X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fstore.h;h=4038fe4da91c0fc0c70a68b4ba833e3cba67da5c;hp=678af6ff9e706f85a33080ac5a377142e17b0e23;hb=894ed7e3743e1cd4913454b2bc086ff5d18c04b4;hpb=a248a2d506d3caf06d3cf5284231df6fc583087e diff --git a/src/include/core/store.h b/src/include/core/store.h index 678af6f..4038fe4 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -111,13 +111,75 @@ 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 * const *backends; + size_t backends_num; +} sdb_store_host_t; +#define SDB_STORE_HOST_INIT { NULL, 0, 0, NULL, 0 } + +/* + * 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 * const *backends; + size_t backends_num; +} sdb_store_service_t; +#define SDB_STORE_SERVICE_INIT { NULL, NULL, 0, 0, NULL, 0 } + +/* + * 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 * const *backends; + size_t backends_num; +} sdb_store_metric_t; +#define SDB_STORE_METRIC_INIT { NULL, NULL, { NULL, NULL }, 0, 0, NULL, 0 } + +/* + * 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 * const *backends; + size_t backends_num; +} sdb_store_attribute_t; +#define SDB_STORE_ATTRIBUTE_INIT { NULL, 0, NULL, NULL, SDB_DATA_INIT, 0, 0, NULL, 0 } + /* * Expressions represent arithmetic expressions based on stored objects and * their various attributes. @@ -175,8 +237,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: @@ -186,8 +247,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: @@ -197,9 +257,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: @@ -209,31 +267,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; /* @@ -258,15 +292,12 @@ typedef struct { * execute_query: * Execute a previously prepared query. The callback may expect that only * queries prepared by its respective prepare callback will be passed to - * this function. - * - * TODO: Instead of letting the executor write directly to a string buffer - * (which cannot easily be merged with other results), let it hand - * all objects to a store-writer. + * this function. The query result will be passed back via the specified + * store writer. */ int (*execute_query)(sdb_object_t *q, - sdb_strbuf_t *buf, sdb_strbuf_t *errbuf, - sdb_object_t *user_data); + sdb_store_writer_t *w, sdb_object_t *wd, + sdb_strbuf_t *errbuf, sdb_object_t *user_data); } sdb_store_reader_t; /* @@ -432,7 +463,7 @@ sdb_store_query_prepare_matcher(sdb_ast_node_t *ast); */ int sdb_store_query_execute(sdb_store_t *store, sdb_store_query_t *m, - sdb_strbuf_t *buf, sdb_strbuf_t *errbuf); + sdb_store_writer_t *w, sdb_object_t *wd, sdb_strbuf_t *errbuf); /* * sdb_store_expr_create: @@ -701,13 +732,12 @@ sdb_store_json_formatter_t * sdb_store_json_formatter(sdb_strbuf_t *buf, int type, int flags); /* - * sdb_store_json_emit: + * sdb_store_emit: * Serialize a single object to JSON adding it to the string buffer associated * with the formatter object. The serialized object will not include * attributes or any child objects. Instead, call the function again for each * of those objects. All attributes have to be emitted before any other - * children types. Use sdb_store_json_emit_full() to emit a full (filtered) - * object. + * children types. Use sdb_store_emit_full() to emit a full (filtered) object. * * Note that the output might not be valid JSON before calling * sdb_store_json_finish(). @@ -717,10 +747,10 @@ sdb_store_json_formatter(sdb_strbuf_t *buf, int type, int flags); * - a negative value else */ int -sdb_store_json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj); +sdb_store_emit(sdb_store_obj_t *obj, sdb_store_writer_t *w, sdb_object_t *wd); /* - * sdb_store_json_emit_full: + * sdb_store_emit_full: * Serialize a single object including it's attributes and all children to * JSON, adding it to the string buffer associated with the formatter object. * The filter, if specified, is applied to each attribute and child object. @@ -734,8 +764,8 @@ sdb_store_json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj); * - a negative value else */ int -sdb_store_json_emit_full(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj, - sdb_store_matcher_t *filter); +sdb_store_emit_full(sdb_store_obj_t *obj, sdb_store_matcher_t *filter, + sdb_store_writer_t *w, sdb_object_t *wd); /* * sdb_store_json_finish: @@ -745,6 +775,13 @@ sdb_store_json_emit_full(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj, int sdb_store_json_finish(sdb_store_json_formatter_t *f); +/* + * sdb_store_json_writer: + * A store writer implementation that generates JSON output. It expects a + * store JSON formatter as its user-data argument. + */ +extern sdb_store_writer_t sdb_store_json_writer; + #ifdef __cplusplus } /* extern "C" */ #endif