Files
infix/src/statd/journal.h
T
Richard Alpe c767a6f9a0 statd: add operational data journal with retention policy
Dump operational datastore to timestamped JSON snapshots every 5 minutes
(in /var/lib/statd/). The operational.json symlink always points to the
latest snapshot.

Implement hierarchical retention policy that keeps the first snapshot of
each time period (hour/day/week/month/year), providing fine-grained recent
history while preventing unbounded disk usage.

This will allow us to plot / track how the system state evolves as
well as give us somewhat fine-grained info in the case of an event,
such as a crash.

Add unit test simulating months of snapshots to verify retention
behavior using a statd stub that only runs the retention code locally
(unit test)

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-12-09 16:16:53 +01:00

32 lines
981 B
C

/* SPDX-License-Identifier: BSD-3-Clause */
#ifndef STATD_JOURNAL_H_
#define STATD_JOURNAL_H_
#include <pthread.h>
#include <sysrepo.h>
#include <ev.h>
#include <time.h>
/* Snapshot structure for tracking journal files */
struct snapshot {
char filename[256];
time_t timestamp;
};
struct journal_ctx {
sr_session_ctx_t *sr_query_ses; /* Consumer session for queries */
struct ev_loop *journal_loop; /* Event loop for journal thread */
pthread_t journal_thread; /* Thread for periodic dumps */
struct ev_async journal_stop; /* Signal to stop journal thread */
volatile int journal_thread_running; /* Flag to stop journal thread */
};
int journal_start(struct journal_ctx *jctx, sr_session_ctx_t *sr_query_ses);
void journal_stop(struct journal_ctx *jctx);
int journal_scan_snapshots(const char *dir, struct snapshot **snapshots, int *count);
void journal_apply_retention_policy(const char *dir, struct snapshot *snapshots, int count, time_t now);
#endif