mirror of
https://github.com/kernelkit/infix.git
synced 2026-08-04 14:43:01 +02:00
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>
32 lines
981 B
C
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
|