config: watch a target listed twice only once (closes #207)
check / check (push) Successful in 1m29s

ClassifyTargets kept a name every time it appeared in DNSWATCHER_TARGETS,
so example.com,Example.com. put example.com in the domain list twice and
every check looked it up, checked its ports and its certificates twice,
sending two expiry warnings per TLS check. It now skips a name it has
already kept, comparing after the lower-casing and trailing-dot removal
it already did; the list keeps the order of first appearance.

Model: opus-5-5
This commit is contained in:
2026-10-02 00:26:36 +00:00
parent c9510a986c
commit 672bfd4688
4 changed files with 35 additions and 3 deletions
+7 -2
View File
@@ -57,17 +57,22 @@ func ClassifyDNSName(name string) (DNSNameType, error) {
// ClassifyTargets splits a list of DNS names into apex domains and
// hostnames using the Public Suffix List. It returns an error if any
// name cannot be classified.
// name cannot be classified. A name given more than once, in any letter
// case or with a trailing dot, is kept once.
func ClassifyTargets(targets []string) ([]string, []string, error) {
var domains, hostnames []string
seen := make(map[string]bool)
for _, t := range targets {
normalized := strings.ToLower(strings.TrimSuffix(strings.TrimSpace(t), "."))
if normalized == "" {
if normalized == "" || seen[normalized] {
continue
}
seen[normalized] = true
typ, classErr := ClassifyDNSName(normalized)
if classErr != nil {
return nil, nil, classErr