X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Finclude%2Fcore%2Fstore.h;h=bccb792202955f00c14924a99ed30db2d788ddda;hb=b75718ea9fe4d6c90f1794e517a0712729553c0c;hp=e5e011875e1775a1592c0511e06d5f3928121b50;hpb=57b25f1ca39421037c6b8e3a9604108b86214d36;p=sysdb.git diff --git a/src/include/core/store.h b/src/include/core/store.h index e5e0118..bccb792 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -103,21 +103,79 @@ 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 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_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; /* - * A metric store describes how to access a metric's data. + * sdb_store_host_t represents the meta-data of a stored host object. + */ +typedef struct { + const char *name; + + sdb_time_t last_update; + sdb_time_t interval; + const char **backends; + size_t backends_num; +} sdb_store_host_t; + +/* + * sdb_store_service_t represents the meta-data of a stored service object. + */ +typedef struct { + const char *hostname; + const char *name; + + sdb_time_t last_update; + sdb_time_t interval; + const char **backends; + size_t backends_num; +} sdb_store_service_t; + +/* + * sdb_metric_store_t specifies how to access a metric's data. */ typedef struct { const char *type; const char *id; } sdb_metric_store_t; +/* + * sdb_store_metric_t represents the meta-data of a stored metric object. + */ +typedef struct { + const char *hostname; + const char *name; + struct { + const char *type; + const char *id; + } store; + + sdb_time_t last_update; + sdb_time_t interval; + const char **backends; + size_t backends_num; +} sdb_store_metric_t; + +/* + * sdb_store_attribute_t represents a stored attribute. + */ +typedef struct { + const char *hostname; /* optional */ + int parent_type; + const char *parent; + const char *key; + sdb_data_t value; + + sdb_time_t last_update; + sdb_time_t interval; + const char **backends; + size_t backends_num; +} sdb_store_attribute_t; + /* * Expressions represent arithmetic expressions based on stored objects and * their various attributes. @@ -130,8 +188,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; @@ -176,8 +233,7 @@ typedef struct { * specified name and timestamp. Else, a new entry will be created in the * store. */ - int (*store_host)(const char *name, sdb_time_t last_update, - sdb_object_t *user_data); + int (*store_host)(sdb_store_host_t *host, sdb_object_t *user_data); /* * store_service: @@ -187,8 +243,7 @@ typedef struct { * does not exist, an error will be reported. Else, a new entry will be * created in the store. */ - int (*store_service)(const char *hostname, const char *name, - sdb_time_t last_update, sdb_object_t *user_data); + int (*store_service)(sdb_store_service_t *service, sdb_object_t *user_data); /* * store_metric: @@ -198,9 +253,7 @@ typedef struct { * exist, an error will be reported. Else, a new entry will be created in * the store. */ - int (*store_metric)(const char *hostname, const char *name, - sdb_metric_store_t *store, sdb_time_t last_update, - sdb_object_t *user_data); + int (*store_metric)(sdb_store_metric_t *metric, sdb_object_t *user_data); /* * store_attribute: @@ -210,31 +263,7 @@ typedef struct { * exist, an error will be reported. Else, a new entry will be created in * the store. */ - int (*store_attribute)(const char *hostname, - const char *key, const sdb_data_t *value, sdb_time_t last_update, - sdb_object_t *user_data); - - /* - * store_service_attr: - * Add/update a service's attribute in the store. If the attribute, - * identified by its key, already exists for the specified service, it - * will be updated to the specified value. If the references service (for - * the specified host) does not exist, an error will be reported. - */ - int (*store_service_attr)(const char *hostname, const char *service, - const char *key, const sdb_data_t *value, sdb_time_t last_update, - sdb_object_t *user_data); - - /* - * store_metric_attr: - * Add/update a metric's attribute in the store. If the attribute, - * identified by its key, already exists for the specified metric, it will - * be updated to the specified value. If the references metric (for the - * specified host) does not exist, an error will be reported. - */ - int (*store_metric_attr)(const char *hostname, const char *metric, - const char *key, const sdb_data_t *value, sdb_time_t last_update, - sdb_object_t *user_data); + int (*store_attribute)(sdb_store_attribute_t *attr, sdb_object_t *user_data); } sdb_store_writer_t; /* @@ -285,45 +314,54 @@ sdb_store_t * sdb_store_create(void); /* - * 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_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_init(void); - -/* - * sdb_store_clear: - * Clear the entire store and remove all stored objects. - */ -void -sdb_store_clear(void); +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); /* @@ -415,15 +453,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); /* @@ -503,20 +541,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. */ @@ -672,18 +700,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); /*