feat: concurrently check and update all domains #24

Merged
t.behrendt merged 2 commits from feat-concurrency into main 2024-12-30 17:37:50 +01:00
Showing only changes of commit 8e3f1e893b - Show all commits

View File

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