feat: concurrently check and update all domains
Some checks failed
CI / test (pull_request) Failing after 2m23s

This commit is contained in:
2024-12-29 16:57:02 +01:00
parent 1c725993f5
commit 8e3f1e893b

View File

@@ -3,6 +3,7 @@ package realDynDns
import ( import (
"fmt" "fmt"
"log/slog" "log/slog"
"sync"
"time" "time"
"realdnydns/pkg/config" "realdnydns/pkg/config"
@@ -70,10 +71,17 @@ func (c *ChangeDetector) detectAndApplyChanges() (int, error) {
return 0, err return 0, err
} }
var numberUpdated int var wg sync.WaitGroup
numberUpdated := make(chan int)
for _, domain := range c.domains { for _, domain := range c.domains {
for _, subdomain := range domain.Subdomains { for _, subdomain := range domain.Subdomains {
wg.Add(1)
go func(domain config.DomainConfig, subdomain string) {
defer wg.Done()
c.logger.Info("Checking record", c.logger.Info("Checking record",
slog.String("tld", domain.TLD), slog.String("tld", domain.TLD),
slog.String("subdomain", subdomain), slog.String("subdomain", subdomain),
@@ -85,7 +93,7 @@ func (c *ChangeDetector) detectAndApplyChanges() (int, error) {
slog.String("tld", domain.TLD), slog.String("tld", domain.TLD),
slog.String("subdomain", subdomain), slog.String("subdomain", subdomain),
) )
continue return
} }
if currentRecord.IP != externalIp.String() { if currentRecord.IP != externalIp.String() {
@@ -104,7 +112,7 @@ func (c *ChangeDetector) detectAndApplyChanges() (int, error) {
c.logger.Warn("Failed to send notification", c.logger.Warn("Failed to send notification",
slog.String("error", err.Error()), slog.String("error", err.Error()),
) )
continue return
} }
c.logger.Info("Updating record", c.logger.Info("Updating record",
@@ -120,13 +128,20 @@ func (c *ChangeDetector) detectAndApplyChanges() (int, error) {
slog.String("tld", domain.TLD), slog.String("tld", domain.TLD),
slog.String("subdomain", subdomain), slog.String("subdomain", subdomain),
) )
continue return
} }
numberUpdated++
numberUpdated <- 1
} }
}(domain, subdomain)
} }
} }
c.logger.Info("Run completed", slog.Int("number_of_changes", numberUpdated)) go func() {
return numberUpdated, nil wg.Wait()
close(numberUpdated)
}()
c.logger.Info("Run completed", slog.Int("number_of_changes", <-numberUpdated))
return <-numberUpdated, nil
} }