X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fstore.h;h=14cb7c03cb36511c16bad98b4c213d12bc877083;hb=30a857cf51e15b453348ea95a13007e60a4f3812;hp=82507a9d424c2c33865e5f133a6fd753ca32d94c;hpb=ad0100d18b3e1b754a92f36ef91f52382b0b6ead;p=sysdb.git diff --git a/src/include/core/store.h b/src/include/core/store.h index 82507a9..14cb7c0 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -1,5 +1,5 @@ /* - * syscollector - src/include/core/store.h + * SysDB - src/include/core/store.h * Copyright (C) 2012 Sebastian 'tokkee' Harl * All rights reserved. * @@ -25,12 +25,12 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef SC_CORE_STORE_H -#define SC_CORE_STORE_H 1 +#ifndef SDB_CORE_STORE_H +#define SDB_CORE_STORE_H 1 -#include "syscollector.h" +#include "sysdb.h" #include "core/object.h" -#include "utils/time.h" +#include "core/time.h" #include "utils/llist.h" #include @@ -39,48 +39,58 @@ extern "C" { #endif -typedef struct { - sc_object_t parent; +extern const sdb_type_t sdb_host_type; +extern const sdb_type_t sdb_attribute_type; +extern const sdb_type_t sdb_service_type; - sc_time_t last_update; - char *name; -} sc_store_obj_t; -#define SC_STORE_OBJ_INIT { SC_OBJECT_INIT, 0, NULL } -#define SC_STORE_OBJ(obj) ((sc_store_obj_t *)(obj)) +typedef struct { + sdb_object_t super; + sdb_time_t last_update; +} sdb_store_obj_t; +#define SDB_STORE_OBJ_INIT(t) { SDB_OBJECT_TYPED_INIT(t), 0 } +#define SDB_STORE_OBJ(obj) ((sdb_store_obj_t *)(obj)) +#define SDB_CONST_STORE_OBJ(obj) ((const sdb_store_obj_t *)(obj)) typedef struct { - sc_store_obj_t parent; -#define svc_last_update parent.last_update -#define svc_name parent.name + sdb_store_obj_t super; char *hostname; -} sc_service_t; -#define SC_SVC_INIT { SC_STORE_OBJ_INIT, NULL } -#define SC_SVC(obj) ((sc_service_t *)(obj)) +} sdb_service_t; +#define SDB_SVC_INIT { SDB_STORE_OBJ_INIT(sdb_service_type), NULL } +#define SDB_SVC(obj) ((sdb_service_t *)(obj)) +#define SDB_CONST_SVC(obj) ((const sdb_service_t *)(obj)) typedef struct { - sc_store_obj_t parent; -#define host_last_update parent.last_update -#define host_name parent.name + sdb_store_obj_t super; + + char *attr_value; + char *hostname; +} sdb_attribute_t; +#define SDB_ATTR_INIT { SDB_STORE_OBJ_INIT(sdb_attribute_type), NULL, NULL } +#define SDB_ATTR(obj) ((sdb_attribute_t *)(obj)) +#define SDB_CONST_ATTR(obj) ((const sdb_attribute_t *)(obj)) - sc_llist_t *services; -} sc_host_t; -#define SC_HOST_INIT { SC_STORE_OBJ_INIT, NULL } -#define SC_HOST(obj) ((sc_host_t *)(obj)) +typedef struct { + sdb_store_obj_t super; -sc_host_t * -sc_host_create(const char *name); + sdb_llist_t *attributes; + sdb_llist_t *services; +} sdb_host_t; +#define SDB_HOST_INIT { SDB_STORE_OBJ_INIT(sdb_host_type), NULL, NULL } +#define SDB_HOST(obj) ((sdb_host_t *)(obj)) +#define SDB_CONST_HOST(obj) ((const sdb_host_t *)(obj)) -sc_host_t * -sc_host_clone(const sc_host_t *host); +/* shortcuts for accessing the sdb_store_obj_t attributes of inheriting + * objects */ +#define _last_update super.last_update /* - * sc_store_host: - * Add/update a host in the store. If the host, identified by its name, - * already exists, it will be updated according to the specified 'host' - * object. Else, a new entry will be created in the store. Any memory required - * for storing the entry will be allocated an managed by the store itself. The - * specified host-object will not be referenced or further accessed. + * sdb_store_host: + * Add/update a host in the store. If the host, identified by its + * canonicalized name, already exists, it will be updated according to the + * specified name and timestamp. Else, a new entry will be created in the + * store. Any memory required for storing the entry will be allocated an + * managed by the store itself. * * Returns: * - 0 on success @@ -89,19 +99,32 @@ sc_host_clone(const sc_host_t *host); * - a negative value on error */ int -sc_store_host(const sc_host_t *host); - -const sc_host_t * -sc_store_get_host(const char *name); +sdb_store_host(const char *name, sdb_time_t last_update); -sc_service_t * -sc_service_create(const char *hostname, const char *name); +_Bool +sdb_store_has_host(const char *name); -sc_service_t * -sc_service_clone(const sc_service_t *svc); +/* + * sdb_store_attribute: + * Add/update a host's attribute in the store. If the attribute, identified by + * its name, already exists for the specified host, it will be updated + * according to the specified 'attr' object. If the referenced host does not + * exist, an error will be reported. Else, a new entry will be created in the + * store. Any memory required for storing the entry will be allocated and + * managed by the store itself. The specified attribute-object will not be + * referenced or further accessed. + * + * Returns: + * - 0 on success + * - a positive value if the new entry is older than the currently stored + * entry (in this case, no update will happen) + * - a negative value on error + */ +int +sdb_store_attribute(const sdb_attribute_t *attr); /* - * sc_store_service: + * sdb_store_service: * Add/update a store in the store. If the service, identified by its name, * already exists for the specified host, it will be updated according to the * specified 'service' object. If the referenced host does not exist, an error @@ -117,19 +140,19 @@ sc_service_clone(const sc_service_t *svc); * - a negative value on error */ int -sc_store_service(const sc_service_t *svc); +sdb_store_service(const sdb_service_t *svc); -const sc_service_t * -sc_store_get_service(const sc_host_t *host, const char *name); +const sdb_service_t * +sdb_store_get_service(const sdb_host_t *host, const char *name); int -sc_store_dump(FILE *fh); +sdb_store_dump(FILE *fh); #ifdef __cplusplus } /* extern "C" */ #endif -#endif /* ! SC_CORE_STORE_H */ +#endif /* ! SDB_CORE_STORE_H */ /* vim: set tw=78 sw=4 ts=4 noexpandtab : */