Wait for metrics pusher before persisting metrics

This commit is contained in:
Daniel 2023-09-19 16:55:51 +02:00
parent 1f08d4f02f
commit 3d8c3de6a2
2 changed files with 20 additions and 0 deletions

View file

@ -11,6 +11,7 @@ import (
"github.com/safing/portbase/api"
"github.com/safing/portbase/config"
"github.com/safing/portbase/log"
"github.com/safing/portbase/utils"
)
func registerAPI() error {
@ -139,7 +140,11 @@ func writeMetricsTo(ctx context.Context, url string) error {
)
}
var metricsPusherDone = utils.NewBroadcastFlag()
func metricsWriter(ctx context.Context) error {
defer metricsPusherDone.NotifyAndReset()
pushURL := pushOption()
ticker := module.NewSleepyTicker(1*time.Minute, 0)
defer ticker.Stop()

View file

@ -5,6 +5,7 @@ import (
"fmt"
"sort"
"sync"
"time"
"github.com/safing/portbase/modules"
)
@ -78,6 +79,20 @@ func start() error {
}
func stop() error {
// Wait until the metrics pusher is done, as it may have started reporting
// and may report a higher number than we store to disk. For persistent
// metrics it can then happen that the first report is lower than the
// previous report, making prometheus think that al that happened since the
// last report, due to the automatic restart detection.
done := metricsPusherDone.NewFlag()
done.Refresh()
if !done.IsSet() {
select {
case <-done.Signal():
case <-time.After(10 * time.Second):
}
}
storePersistentMetrics()
return nil