mirror of
https://github.com/Icinga/icingadb.git
synced 2026-05-28 04:35:54 -04:00
telemetry: Fix atomic.Pointer initialisation responsibility
Return `atomic.pointer`, so that initialisation is not the responsibility of another package.
This commit is contained in:
parent
7cf54c1b25
commit
95f2763a73
2 changed files with 11 additions and 8 deletions
|
|
@ -101,6 +101,7 @@ func run() int {
|
|||
// the heartbeat is not read while HA gets stuck when updating the instance table.
|
||||
var heartbeat *icingaredis.Heartbeat
|
||||
var ha *icingadb.HA
|
||||
var telemetrySyncStats *atomic.Pointer[telemetry.SuccessfulSync]
|
||||
{
|
||||
rc, err := cmd.Redis(logs.GetChildLogger("redis"))
|
||||
if err != nil {
|
||||
|
|
@ -116,8 +117,7 @@ func run() int {
|
|||
ha = icingadb.NewHA(ctx, db, heartbeat, logs.GetChildLogger("high-availability"))
|
||||
|
||||
telemetryLogger := logs.GetChildLogger("telemetry")
|
||||
telemetry.LastSuccessfulSync.Store(&telemetry.SuccessfulSync{})
|
||||
telemetry.StartHeartbeat(ctx, rc, telemetryLogger, ha, heartbeat)
|
||||
telemetrySyncStats = telemetry.StartHeartbeat(ctx, rc, telemetryLogger, ha, heartbeat)
|
||||
telemetry.WriteStats(ctx, rc, telemetryLogger)
|
||||
}
|
||||
// Closing ha on exit ensures that this instance retracts its heartbeat
|
||||
|
|
@ -251,7 +251,7 @@ func run() int {
|
|||
logger := logs.GetChildLogger("config-sync")
|
||||
|
||||
if synctx.Err() == nil {
|
||||
telemetry.LastSuccessfulSync.Store(&telemetry.SuccessfulSync{
|
||||
telemetrySyncStats.Store(&telemetry.SuccessfulSync{
|
||||
FinishMilli: syncEnd.UnixMilli(),
|
||||
DurationMilli: elapsed.Milliseconds(),
|
||||
})
|
||||
|
|
|
|||
|
|
@ -79,16 +79,17 @@ func GetCurrentDbConnErr() (string, int64) {
|
|||
// OngoingSyncStartMilli is to be updated by the main() function.
|
||||
var OngoingSyncStartMilli int64
|
||||
|
||||
// LastSuccessfulSync is to be updated by the main() function.
|
||||
var LastSuccessfulSync atomic.Pointer[SuccessfulSync]
|
||||
|
||||
var boolToStr = map[bool]string{false: "0", true: "1"}
|
||||
var startTime = time.Now().UnixMilli()
|
||||
|
||||
// StartHeartbeat periodically writes heartbeats to Redis for being monitored by Icinga 2.
|
||||
// It returns an atomic pointer to SuccessfulSync,
|
||||
// which contains synchronisation statistics that the caller should update.
|
||||
func StartHeartbeat(
|
||||
ctx context.Context, client *redis.Client, logger *logging.Logger, ha ha, heartbeat *icingaredis.Heartbeat,
|
||||
) {
|
||||
) *atomic.Pointer[SuccessfulSync] {
|
||||
var syncStats atomic.Pointer[SuccessfulSync]
|
||||
syncStats.Store(&SuccessfulSync{})
|
||||
goMetrics := NewGoMetrics()
|
||||
|
||||
const interval = time.Second
|
||||
|
|
@ -100,7 +101,7 @@ func StartHeartbeat(
|
|||
heartbeat := heartbeat.LastReceived()
|
||||
responsibleTsMilli, responsible, otherResponsible := ha.State()
|
||||
ongoingSyncStart := atomic.LoadInt64(&OngoingSyncStartMilli)
|
||||
lastSync := LastSuccessfulSync.Load()
|
||||
lastSync := syncStats.Load()
|
||||
dbConnErr, dbConnErrSinceMilli := GetCurrentDbConnErr()
|
||||
now := time.Now()
|
||||
|
||||
|
|
@ -144,6 +145,8 @@ func StartHeartbeat(
|
|||
silenceUntil = time.Time{}
|
||||
}
|
||||
})
|
||||
|
||||
return &syncStats
|
||||
}
|
||||
|
||||
type goMetrics struct {
|
||||
|
|
|
|||
Loading…
Reference in a new issue