feat: concurrently check and update all domains (#24)
Reviewed-on: #24 Co-authored-by: Timo Behrendt <t.behrendt@t00n.de> Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
This commit was merged in pull request #24.
This commit is contained in:
@@ -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
|
||||
|
||||
numberUpdatedChannel := 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,11 +128,23 @@ func (c *ChangeDetector) detectAndApplyChanges() (int, error) {
|
||||
slog.String("tld", domain.TLD),
|
||||
slog.String("subdomain", subdomain),
|
||||
)
|
||||
continue
|
||||
return
|
||||
}
|
||||
numberUpdated++
|
||||
|
||||
numberUpdatedChannel <- 1
|
||||
}
|
||||
}(domain, subdomain)
|
||||
}
|
||||
}
|
||||
|
||||
go func() {
|
||||
wg.Wait()
|
||||
close(numberUpdatedChannel)
|
||||
}()
|
||||
|
||||
numberUpdated := 0
|
||||
for v := range numberUpdatedChannel {
|
||||
numberUpdated += v
|
||||
}
|
||||
|
||||
c.logger.Info("Run completed", slog.Int("number_of_changes", numberUpdated))
|
||||
|
||||
Reference in New Issue
Block a user