mirror of
https://github.com/therootcompany/golib.git
synced 2026-11-04 06:55:00 +00:00
PrefixSet: git-backed CIDR files via gitshallow, refreshed every 47 min. DomainSet: takes pre-parsed (staticPrefixes, domains []string); resolves hostnames every 5 min, retaining stale IPs on failure. Both use atomic-swapped ipcohort.Cohort for lock-free reads. ParseDomainSet(RecordReader) parses rows into prefixes and hostnames; caller constructs the record reader (e.g. csv.Reader with delimiter, comment char). RecordReader interface is satisfied by *csv.Reader. commaify uses plain string concat (integers max ~7 groups).
30 lines
391 B
Go
30 lines
391 B
Go
package ipgate
|
|
|
|
import (
|
|
"log/slog"
|
|
"strconv"
|
|
)
|
|
|
|
func log() *slog.Logger { return slog.Default().WithGroup("ipgate") }
|
|
|
|
func commaify(n int) string {
|
|
s := strconv.Itoa(n)
|
|
if n < 0 {
|
|
return "-" + commaify(-n)
|
|
}
|
|
if len(s) <= 3 {
|
|
return s
|
|
}
|
|
|
|
rem := len(s) % 3
|
|
if rem == 0 {
|
|
rem = 3
|
|
}
|
|
|
|
out := s[:rem]
|
|
for i := rem; i < len(s); i += 3 {
|
|
out += "," + s[i:i+3]
|
|
}
|
|
return out
|
|
}
|