chore(stdiscosrv): less garbage in statistics

This commit is contained in:
Jakob Borg 2024-09-11 08:34:11 +02:00
parent f3f5557c8e
commit 63e4659282
No known key found for this signature in database

View File

@ -17,12 +17,11 @@ import (
"errors"
"io"
"log"
"net"
"net/url"
"os"
"path"
"runtime"
"slices"
"strings"
"time"
"github.com/aws/aws-sdk-go/aws"
@ -140,13 +139,13 @@ loop:
for {
select {
case <-t.C:
log.Println("Calculating statistics")
s.calculateStatistics()
log.Println("Flushing database")
if err := s.write(); err != nil {
log.Println("Error writing database:", err)
}
log.Println("Calculating statistics")
s.calculateStatistics()
log.Println("Finished calculating statistics")
log.Println("Finished flushing database")
t.Reset(s.flushInterval)
case <-ctx.Done():
@ -162,7 +161,7 @@ func (s *inMemoryStore) calculateStatistics() {
now := s.clock.Now()
cutoff24h := now.Add(-24 * time.Hour).UnixNano()
cutoff1w := now.Add(-7 * 24 * time.Hour).UnixNano()
current, currentIPv4, currentIPv6, last24h, last1w, errors := 0, 0, 0, 0, 0, 0
current, currentIPv4, currentIPv6, last24h, last1w := 0, 0, 0, 0, 0
n := 0
s.m.Range(func(key protocol.DeviceID, rec DatabaseRecord) bool {
@ -171,23 +170,16 @@ func (s *inMemoryStore) calculateStatistics() {
}
n++
addresses := expire(rec.Addresses, now)
switch {
case len(rec.Addresses) > 0:
case len(addresses) > 0:
current++
seenIPv4, seenIPv6 := false, false
for _, addr := range rec.Addresses {
uri, err := url.Parse(addr.Address)
if err != nil {
continue
}
host, _, err := net.SplitHostPort(uri.Host)
if err != nil {
continue
}
if ip := net.ParseIP(host); ip != nil && ip.To4() != nil {
seenIPv4 = true
} else if ip != nil {
if strings.Contains(addr.Address, "[") {
seenIPv6 = true
} else {
seenIPv4 = true
}
if seenIPv4 && seenIPv6 {
break
@ -215,15 +207,12 @@ func (s *inMemoryStore) calculateStatistics() {
databaseKeys.WithLabelValues("currentIPv6").Set(float64(currentIPv6))
databaseKeys.WithLabelValues("last24h").Set(float64(last24h))
databaseKeys.WithLabelValues("last1w").Set(float64(last1w))
databaseKeys.WithLabelValues("error").Set(float64(errors))
databaseStatisticsSeconds.Set(time.Since(now).Seconds())
}
func (s *inMemoryStore) write() (err error) {
t0 := time.Now()
log.Println("Writing database")
defer func() {
log.Println("Finished writing database")
if err == nil {
databaseWriteSeconds.Set(time.Since(t0).Seconds())
databaseLastWritten.Set(float64(t0.Unix()))
@ -254,7 +243,7 @@ func (s *inMemoryStore) write() (err error) {
}
rec := ReplicationRecord{
Key: key[:],
Addresses: expire(value.Addresses, now),
Addresses: value.Addresses,
Seen: value.Seen,
}
s := rec.Size()
@ -346,7 +335,7 @@ func (s *inMemoryStore) read() (int, error) {
slices.SortFunc(rec.Addresses, DatabaseAddress.Cmp)
s.m.Store(key, DatabaseRecord{
Addresses: rec.Addresses,
Addresses: expire(rec.Addresses, s.clock.Now()),
Seen: rec.Seen,
})
nr++