X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fstore.h;h=678af6ff9e706f85a33080ac5a377142e17b0e23;hp=e851dd9f955ee38cb3bec993fe753aa3e4f5a537;hb=a248a2d506d3caf06d3cf5284231df6fc583087e;hpb=182112ccd9852672b39ff958ab0c605c9ef856ad diff --git a/src/include/core/store.h b/src/include/core/store.h index e851dd9..678af6f 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -95,9 +95,17 @@ enum { : -1) /* - * sdb_store_obj_t represents the super-class of any object stored in the - * database. It inherits from sdb_object_t and may safely be cast to a generic - * object to access its name. + * sdb_store_t represents an in-memory store. It inherits from sdb_object_t + * and may safely be case to a generic object. + */ +struct sdb_store; +typedef struct sdb_store sdb_store_t; +#define SDB_STORE(obj) ((sdb_store_t *)(obj)) + +/* + * sdb_store_obj_t represents the super-class of any stored object. It + * inherits from sdb_object_t and may safely be cast to a generic object to + * access its name. */ struct sdb_store_obj; typedef struct sdb_store_obj sdb_store_obj_t; @@ -122,8 +130,7 @@ typedef struct sdb_store_expr sdb_store_expr_t; #define SDB_STORE_EXPR(obj) ((sdb_store_expr_t *)(obj)) /* - * An expression iterator iterates over the values of an iterable expression - * (see sdb_store_expr_iterable). + * An expression iterator iterates over the values of an iterable expression. */ struct sdb_store_expr_iter; typedef struct sdb_store_expr_iter sdb_store_expr_iter_t; @@ -229,6 +236,13 @@ typedef struct { sdb_object_t *user_data); } sdb_store_writer_t; +/* + * sdb_store_writer: + * A store writer implementation that provides an in-memory object store. It + * expects a store object as its user-data argument. + */ +extern sdb_store_writer_t sdb_store_writer; + /* * A store reader describes the interface to query a store implementation. */ @@ -256,45 +270,68 @@ typedef struct { } sdb_store_reader_t; /* - * sdb_store_init: - * Initialize the store sub-system. This function has to be called before - * doing any other store operations. - * - * Returns: - * - 0 on success - * - a negative value else + * sdb_store_reader: + * A store reader implementation that uses an in-memory object store. It + * expects a store object as its user-data argument. */ -int -sdb_store_init(void); +extern sdb_store_reader_t sdb_store_reader; /* - * sdb_store_clear: - * Clear the entire store and remove all stored objects. + * sdb_store_create: + * Allocate a new in-memory store. */ -void -sdb_store_clear(void); +sdb_store_t * +sdb_store_create(void); + +/* + * sdb_store_host, sdb_store_service, sdb_store_metric, sdb_store_attribute, + * sdb_store_metric_attr: + * Store an object in the specified store. The hostname is expected to be + * canonical. + */ +int +sdb_store_host(sdb_store_t *store, const char *name, sdb_time_t last_update); +int +sdb_store_service(sdb_store_t *store, const char *hostname, const char *name, + sdb_time_t last_update); +int +sdb_store_metric(sdb_store_t *store, const char *hostname, const char *name, + sdb_metric_store_t *metric_store, sdb_time_t last_update); +int +sdb_store_attribute(sdb_store_t *store, const char *hostname, + const char *key, const sdb_data_t *value, sdb_time_t last_update); +int +sdb_store_service_attr(sdb_store_t *store, const char *hostname, + const char *service, const char *key, const sdb_data_t *value, + sdb_time_t last_update); +int +sdb_store_metric_attr(sdb_store_t *store, const char *hostname, + const char *metric, const char *key, const sdb_data_t *value, + sdb_time_t last_update); /* * sdb_store_get_host: - * Query the store for a host by its (canonicalized) name. + * Query the specified store for a host by its (canonicalized) name. * * The function increments the ref count of the host object. The caller needs * to deref it when no longer using it. */ sdb_store_obj_t * -sdb_store_get_host(const char *name); +sdb_store_get_host(sdb_store_t *store, const char *name); /* * sdb_store_fetch_timeseries: * Fetch the time-series described by the specified host's metric and - * serialize it as JSON into the provided string buffer. + * serialize it as JSON into the provided string buffer. The host data is + * retrieved from the specified store. * * Returns: * - 0 on success * - a negative value else */ int -sdb_store_fetch_timeseries(const char *hostname, const char *metric, +sdb_store_fetch_timeseries(sdb_store_t *store, + const char *hostname, const char *metric, sdb_timeseries_opts_t *opts, sdb_strbuf_t *buf); /* @@ -386,15 +423,15 @@ sdb_store_query_prepare_matcher(sdb_ast_node_t *ast); /* * sdb_store_query_execute: - * Execute a previously prepared query. The query result will be written to - * 'buf' and any errors to 'errbuf'. + * Execute a previously prepared query in the specified store. The query + * result will be written to 'buf' and any errors to 'errbuf'. * * Returns: * - the result type (to be used by the server reply) * - a negative value on error */ int -sdb_store_query_execute(sdb_store_query_t *m, +sdb_store_query_execute(sdb_store_t *store, sdb_store_query_t *m, sdb_strbuf_t *buf, sdb_strbuf_t *errbuf); /* @@ -474,20 +511,10 @@ int sdb_store_expr_eval(sdb_store_expr_t *expr, sdb_store_obj_t *obj, sdb_data_t *res, sdb_store_matcher_t *filter); -/* - * sdb_store_expr_iterable: - * Check whether an expression, evaluated in the specified context (HOST, - * SERVICE, METRIC) is iterable, that is, if it may evaluate to multiple - * values. - */ -bool -sdb_store_expr_iterable(sdb_store_expr_t *expr, int context); - /* * sdb_store_expr_iter: * Iterate over the elements of an iterable expression. sdb_store_expr_iter * returns NULL if the expression is not iterable (for the specified object). - * See also sdb_store_expr_iterable. * * sdb_store_expr_iter_get_next returns NULL if there is no next element. */ @@ -643,18 +670,19 @@ typedef int (*sdb_store_lookup_cb)(sdb_store_obj_t *obj, /* * sdb_store_scan: - * Look up objects of the specified type in the store. The specified callback - * function is called for each object in the store matching 'm'. The function - * performs a full scan of all objects stored in the database. If specified, - * the filter will be used to preselect objects for further evaluation. See - * the description of 'sdb_store_matcher_matches' for details. + * Look up objects of the specified type in the specified store. The specified + * callback function is called for each object in the store matching 'm'. The + * function performs a full scan of all stored objects. If specified, the + * filter will be used to preselect objects for further evaluation. See the + * description of 'sdb_store_matcher_matches' for details. * * Returns: * - 0 on success * - a negative value else */ int -sdb_store_scan(int type, sdb_store_matcher_t *m, sdb_store_matcher_t *filter, +sdb_store_scan(sdb_store_t *store, int type, + sdb_store_matcher_t *m, sdb_store_matcher_t *filter, sdb_store_lookup_cb cb, void *user_data); /*