X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fstore.h;h=1cb0e5af1a6f386a5b2ad8af508edd1ce2e8b098;hp=20ca047b9473c28bdb2867bc0259a50419467ad0;hb=11824e1af21c11b8f5a99a1247debed4990f0c7d;hpb=07e184c400bb2061279e084a065a628599183445 diff --git a/src/include/core/store.h b/src/include/core/store.h index 20ca047..1cb0e5a 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -94,6 +94,14 @@ enum { : ((f) == SDB_FIELD_TIMESERIES) ? SDB_TYPE_BOOLEAN \ : -1) +/* + * 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 object stored in the * database. It inherits from sdb_object_t and may safely be cast to a generic @@ -144,6 +152,9 @@ typedef struct sdb_store_matcher sdb_store_matcher_t; /* * A JSON formatter converts stored objects into the JSON format. * See http://www.ietf.org/rfc/rfc4627.txt + * + * A JSON formatter object inherits from sdb_object_t and, thus, may safely be + * cast to a generic object. */ struct sdb_store_json_formatter; typedef struct sdb_store_json_formatter sdb_store_json_formatter_t; @@ -226,6 +237,53 @@ 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. + */ +typedef struct { + /* + * prepare_query: + * Prepare the query described by 'ast' for execution. + */ + sdb_object_t *(*prepare_query)(sdb_ast_node_t *ast, + sdb_strbuf_t *errbuf, sdb_object_t *user_data); + + /* + * 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. + */ + int (*execute_query)(sdb_object_t *q, + sdb_strbuf_t *buf, sdb_strbuf_t *errbuf, + sdb_object_t *user_data); +} sdb_store_reader_t; + +/* + * sdb_store_reader: + * A store reader implementation that uses an in-memory object store. It + * expects a store object as its user-data argument. + */ +extern sdb_store_reader_t sdb_store_reader; + +/* + * sdb_store_create: + * Allocate a new in-memory store. + */ +sdb_store_t * +sdb_store_create(void); + /* * sdb_store_init: * Initialize the store sub-system. This function has to be called before @@ -245,6 +303,31 @@ sdb_store_init(void); void sdb_store_clear(void); +/* + * sdb_store_host, sdb_store_service, sdb_store_metric, sdb_store_attribute, + * sdb_store_metric_attr: + * Store an object in the specified store. + */ +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.