Push code

This commit is contained in:
2026-01-28 23:03:50 +01:00
parent 5bd203b516
commit 00bbd6534b
19 changed files with 1224 additions and 0 deletions

79
cache/MemCache.go vendored Normal file
View File

@@ -0,0 +1,79 @@
package cache
import "sync"
// DNSCache is a simple in-memory cache for DNS records
type DNSCache struct {
mu sync.RWMutex
cache map[string]string // key: "fqdn:provider" -> value: IP
}
var globalCache *DNSCache
func init() {
globalCache = &DNSCache{
cache: make(map[string]string),
}
}
// GetCache returns the global cache instance
func GetCache() *DNSCache {
return globalCache
}
// makeKey creates a unique cache key from FQDN and provider
func (c *DNSCache) makeKey(fqdn, provider string) string {
return fqdn + ":" + provider
}
// NeedsUpdate checks if the record needs updating
// Returns true if IP is different or not in cache
func (c *DNSCache) NeedsUpdate(fqdn, provider, newIP string) bool {
c.mu.RLock()
defer c.mu.RUnlock()
key := c.makeKey(fqdn, provider)
cachedIP, exists := c.cache[key]
if !exists {
return true // Not in cache, needs update
}
return cachedIP != newIP // Update if IP changed
}
// Set updates the cache with the new IP
func (c *DNSCache) Set(fqdn, provider, ip string) {
c.mu.Lock()
defer c.mu.Unlock()
key := c.makeKey(fqdn, provider)
c.cache[key] = ip
}
// Get retrieves the cached IP
func (c *DNSCache) Get(fqdn, provider string) (string, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
key := c.makeKey(fqdn, provider)
ip, exists := c.cache[key]
return ip, exists
}
// Clear removes a specific entry from cache
func (c *DNSCache) Clear(fqdn, provider string) {
c.mu.Lock()
defer c.mu.Unlock()
key := c.makeKey(fqdn, provider)
delete(c.cache, key)
}
// ClearAll removes all entries from cache
func (c *DNSCache) ClearAll() {
c.mu.Lock()
defer c.mu.Unlock()
c.cache = make(map[string]string)
}