From cae7c168992dd33dfdb7f5d9651b2e45d46b711f Mon Sep 17 00:00:00 2001 From: Sven Nierlein Date: Wed, 16 Jun 2021 14:06:05 +0200 Subject: [PATCH] add global persistant broker storage This PR adds a global key/value storage which is persitant over reloads (but not restarts). The storage could be used from neb modules to store data over reloads like this: ```c // fetch global storage struct kvvec *global_store = get_global_store(); // store string value kvvec_addkv_str(global_store, "example_key", (char *)mkstr("%s", "example string value")); // read string from storage char *persistant = kvvec_fetch_str_str(global_store, "example_key"); ``` Signed-off-by: Sven Nierlein --- src/naemon/broker.c | 6 ++++++ src/naemon/broker.h | 1 + src/naemon/naemon.c | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/src/naemon/broker.c b/src/naemon/broker.c index e24afaa4..a1b950c4 100644 --- a/src/naemon/broker.c +++ b/src/naemon/broker.c @@ -12,6 +12,12 @@ #include #include +static struct kvvec global_store = KVVEC_INITIALIZER; + +struct kvvec *get_global_store(void) +{ + return &global_store; +} /* gets timestamp for use by broker */ static inline void get_broker_timestamp(struct timeval *timestamp) diff --git a/src/naemon/broker.h b/src/naemon/broker.h index 9ebe6b59..47cc7ace 100644 --- a/src/naemon/broker.h +++ b/src/naemon/broker.h @@ -167,6 +167,7 @@ NAGIOS_BEGIN_DECL +struct kvvec *get_global_store(void); void broker_program_state(int, int, int); void broker_log_data(int, int, int, char *, unsigned long, time_t); int broker_event_handler(int, int, int, int, void *, int, int, struct timeval, struct timeval, double, int, int, int, char *, char *, char *); diff --git a/src/naemon/naemon.c b/src/naemon/naemon.c index 86d26ee2..04edc4a8 100644 --- a/src/naemon/naemon.c +++ b/src/naemon/naemon.c @@ -135,6 +135,7 @@ int main(int argc, char **argv) nagios_macros *mac; const char *worker_socket = NULL; int i; + struct kvvec *global_store; #ifdef HAVE_GETOPT_H int option_index = 0; @@ -227,6 +228,11 @@ int main(int argc, char **argv) G_LOG_FLAG_RECURSION, nm_g_log_handler, NULL); mac = get_global_macros(); + global_store = get_global_store(); + if (global_store && !kvvec_init(global_store, 0)) { + exit(ERROR); + } + /* if we're a worker we can skip everything below */ if (worker_socket) { exit(nm_core_worker(worker_socket));