func watchLogStats(stats *statsd.StatsdBuffer, logC chan dnsLogEntry, logs []chan dnsLogEntry) { for { stats.Gauge("incoming_log_depth", int64(len(logC))) for i, logChan := range logs { stats.Gauge(strconv.Itoa(i)+".log_depth", int64(len(logChan))) } time.Sleep(3) } }
//background task to clear out stale entries in the conntable //one of these gets spun up for every packet handling thread //takes a pointer to the contable to clean, the maximum age of an entry and how often to run GC func cleanDnsCache(conntable *map[uint16]dnsMapEntry, maxAge time.Duration, interval time.Duration, threadNum int, stats *statsd.StatsdBuffer) { for { time.Sleep(interval) //max_age should be negative, e.g. -1m cleanupCutoff := time.Now().Add(maxAge) if stats != nil { stats.Gauge(strconv.Itoa(threadNum)+".cache_size", int64(len(*conntable))) } for key, item := range *conntable { if item.inserted.Before(cleanupCutoff) { log.Debug("conntable GC(" + strconv.Itoa(threadNum) + "): cleanup query ID " + strconv.Itoa(int(key))) delete(*conntable, key) if stats != nil { stats.Incr(strconv.Itoa(threadNum)+".cache_entries_dropped", 1) } } } } }