summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 316907e)
raw | patch | inline | side by side (parent: 316907e)
author | Sebastian Harl <sh@tokkee.org> | |
Tue, 22 Sep 2015 08:09:24 +0000 (10:09 +0200) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Tue, 22 Sep 2015 08:09:24 +0000 (10:09 +0200) |
The argument list of some of the callbacks has already gotten kinda long and
we'll want to add more (backends, etc.). Introduce new types which provide all
meta-data of the respective store types.
Also, only use a single callback to store all kinds of attributes, similar to
how it was already done in the "proto" module.
we'll want to add more (backends, etc.). Introduce new types which provide all
meta-data of the respective store types.
Also, only use a single callback to store all kinds of attributes, similar to
how it was already done in the "proto" module.
src/core/plugin.c | patch | blob | history | |
src/core/store.c | patch | blob | history | |
src/include/core/store.h | patch | blob | history | |
src/plugins/store/network.c | patch | blob | history |
diff --git a/src/core/plugin.c b/src/core/plugin.c
index 54f3f7f09f7f39f20c17fb0856db21df4fbd3e7d..2cb852e45112156229a0a22899c20580f254d7ff 100644 (file)
--- a/src/core/plugin.c
+++ b/src/core/plugin.c
assert(impl);
if ((! impl->store_host) || (! impl->store_service)
- || (! impl->store_metric) || (! impl->store_attribute)
- || (! impl->store_service_attr) || (! impl->store_metric_attr)) {
+ || (! impl->store_metric) || (! impl->store_attribute)) {
sdb_log(SDB_LOG_ERR, "core: store writer callback '%s' "
"does not fully implement the writer interface.",
obj->name);
@@ -1470,6 +1469,7 @@ sdb_plugin_query(sdb_ast_node_t *ast, sdb_strbuf_t *buf, sdb_strbuf_t *errbuf)
int
sdb_plugin_store_host(const char *name, sdb_time_t last_update)
{
+ sdb_store_host_t host = { 0 };
char *cname;
sdb_llist_iter_t *iter;
return -1;
}
+ host.name = cname;
+ host.last_update = last_update;
+
iter = sdb_llist_get_iter(writer_list);
while (sdb_llist_iter_has_next(iter)) {
writer_t *writer = WRITER(sdb_llist_iter_get_next(iter));
int s;
assert(writer);
- s = writer->impl.store_host(cname, last_update, writer->w_user_data);
+ s = writer->impl.store_host(&host, writer->w_user_data);
if (((s > 0) && (status >= 0)) || (s < 0))
status = s;
}
sdb_plugin_store_service(const char *hostname, const char *name,
sdb_time_t last_update)
{
+ sdb_store_service_t service = { 0 };
+ char *cname;
+
sdb_llist_iter_t *iter;
sdb_data_t d;
- char *cname;
int status = 0;
if ((! hostname) || (! name))
return -1;
}
+ service.hostname = cname;
+ service.name = name;
+ service.last_update = last_update;
+
iter = sdb_llist_get_iter(writer_list);
while (sdb_llist_iter_has_next(iter)) {
writer_t *writer = WRITER(sdb_llist_iter_get_next(iter));
int s;
assert(writer);
- s = writer->impl.store_service(cname, name, last_update,
- writer->w_user_data);
+ s = writer->impl.store_service(&service, writer->w_user_data);
if (((s > 0) && (status >= 0)) || (s < 0))
status = s;
}
sdb_plugin_store_metric(const char *hostname, const char *name,
sdb_metric_store_t *store, sdb_time_t last_update)
{
+ sdb_store_metric_t metric = { 0 };
+ char *cname;
+
sdb_llist_iter_t *iter;
sdb_data_t d;
- char *cname;
int status = 0;
if ((! hostname) || (! name))
if (store && ((! store->type) || (! store->id)))
store = NULL;
+ metric.hostname = cname;
+ metric.name = name;
+ if (store) {
+ metric.store.type = store->type;
+ metric.store.id = store->id;
+ }
+ metric.last_update = last_update;
+
iter = sdb_llist_get_iter(writer_list);
while (sdb_llist_iter_has_next(iter)) {
writer_t *writer = WRITER(sdb_llist_iter_get_next(iter));
int s;
assert(writer);
- s = writer->impl.store_metric(cname, name, store, last_update,
- writer->w_user_data);
+ s = writer->impl.store_metric(&metric, writer->w_user_data);
if (((s > 0) && (status >= 0)) || (s < 0))
status = s;
}
sdb_plugin_store_attribute(const char *hostname, const char *key,
const sdb_data_t *value, sdb_time_t last_update)
{
+ sdb_store_attribute_t attr = { 0 };
char *cname;
sdb_llist_iter_t *iter;
return -1;
}
+ attr.parent_type = SDB_HOST;
+ attr.parent = cname;
+ attr.key = key;
+ attr.value = *value;
+ attr.last_update = last_update;
+
iter = sdb_llist_get_iter(writer_list);
while (sdb_llist_iter_has_next(iter)) {
writer_t *writer = WRITER(sdb_llist_iter_get_next(iter));
int s;
assert(writer);
- s = writer->impl.store_attribute(cname, key, value, last_update,
- writer->w_user_data);
+ s = writer->impl.store_attribute(&attr, writer->w_user_data);
if (((s > 0) && (status >= 0)) || (s < 0))
status = s;
}
sdb_plugin_store_service_attribute(const char *hostname, const char *service,
const char *key, const sdb_data_t *value, sdb_time_t last_update)
{
+ sdb_store_attribute_t attr = { 0 };
char *cname;
sdb_llist_iter_t *iter;
@@ -1670,13 +1694,19 @@ sdb_plugin_store_service_attribute(const char *hostname, const char *service,
return -1;
}
+ attr.hostname = cname;
+ attr.parent_type = SDB_SERVICE;
+ attr.parent = service;
+ attr.key = key;
+ attr.value = *value;
+ attr.last_update = last_update;
+
iter = sdb_llist_get_iter(writer_list);
while (sdb_llist_iter_has_next(iter)) {
writer_t *writer = WRITER(sdb_llist_iter_get_next(iter));
int s;
assert(writer);
- s = writer->impl.store_service_attr(cname, service,
- key, value, last_update, writer->w_user_data);
+ s = writer->impl.store_attribute(&attr, writer->w_user_data);
if (((s > 0) && (status >= 0)) || (s < 0))
status = s;
}
sdb_plugin_store_metric_attribute(const char *hostname, const char *metric,
const char *key, const sdb_data_t *value, sdb_time_t last_update)
{
+ sdb_store_attribute_t attr = { 0 };
char *cname;
sdb_llist_iter_t *iter;
return -1;
}
+ attr.hostname = cname;
+ attr.parent_type = SDB_METRIC;
+ attr.parent = metric;
+ attr.key = key;
+ attr.value = *value;
+ attr.last_update = last_update;
+
iter = sdb_llist_get_iter(writer_list);
while (sdb_llist_iter_has_next(iter)) {
writer_t *writer = WRITER(sdb_llist_iter_get_next(iter));
int s;
assert(writer);
- s = writer->impl.store_metric_attr(cname, metric,
- key, value, last_update, writer->w_user_data);
+ s = writer->impl.store_attribute(&attr, writer->w_user_data);
if (((s > 0) && (status >= 0)) || (s < 0))
status = s;
}
diff --git a/src/core/store.c b/src/core/store.c
index 3936020d54ccd04b6cc3a9b47d6ed0f25b9627b0..7772548a6b0efb340251a37057e7476e400768ba 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
} /* store_attr */
static int
-store_metric_store(sdb_metric_t *metric, sdb_metric_store_t *store)
+store_metric_store(sdb_metric_t *metric, sdb_store_metric_t *m)
{
char *type = metric->store.type;
char *id = metric->store.id;
- if ((! metric->store.type) || strcasecmp(metric->store.type, store->type)) {
- if (! (type = strdup(store->type)))
+ if ((! metric->store.type) || strcasecmp(metric->store.type, m->store.type)) {
+ if (! (type = strdup(m->store.type)))
return -1;
}
- if ((! metric->store.id) || strcasecmp(metric->store.id, store->id)) {
- if (! (id = strdup(store->id))) {
+ if ((! metric->store.id) || strcasecmp(metric->store.id, m->store.id)) {
+ if (! (id = strdup(m->store.id))) {
if (type != metric->store.type)
free(type);
return -1;
*/
static 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_attribute(sdb_store_attribute_t *attr, sdb_object_t *user_data)
{
sdb_store_t *st = SDB_STORE(user_data);
-
+ const char *hostname;
host_t *host;
+
+ sdb_store_obj_t *obj = NULL;
+ sdb_avltree_t *children = NULL;
sdb_avltree_t *attrs;
int status = 0;
- if ((! hostname) || (! key))
+ if ((! attr) || (! attr->parent) || (! attr->key))
+ return -1;
+
+ hostname = attr->hostname;
+ if (attr->parent_type == SDB_HOST)
+ hostname = attr->parent;
+ if (! hostname)
return -1;
pthread_rwlock_wrlock(&st->host_lock);
host = HOST(sdb_avltree_lookup(st->hosts, hostname));
- attrs = get_host_children(host, SDB_ATTRIBUTE);
- if (! attrs) {
+ if (! host) {
sdb_log(SDB_LOG_ERR, "store: Failed to store attribute '%s' - "
- "host '%s' not found", key, hostname);
+ "host '%s' not found", attr->key, hostname);
+ status = -1;
+ }
+
+ switch (attr->parent_type) {
+ case SDB_HOST:
+ obj = STORE_OBJ(host);
+ attrs = get_host_children(host, SDB_ATTRIBUTE);
+ break;
+ case SDB_SERVICE:
+ children = get_host_children(host, SDB_SERVICE);
+ break;
+ case SDB_METRIC:
+ children = get_host_children(host, SDB_METRIC);
+ break;
+ default:
status = -1;
+ break;
+ }
+
+ if (children) {
+ obj = STORE_OBJ(sdb_avltree_lookup(children, attr->parent));
+ if (! obj) {
+ sdb_log(SDB_LOG_ERR, "store: Failed to store attribute '%s' - "
+ "%s '%s/%s' not found", attr->key,
+ SDB_STORE_TYPE_TO_NAME(attr->parent_type),
+ attr->hostname, attr->parent);
+ status = -1;
+ }
+ else
+ attrs = attr->parent_type == SDB_SERVICE
+ ? SVC(obj)->attributes
+ : METRIC(obj)->attributes;
}
if (! status)
- status = store_attr(STORE_OBJ(host), attrs, key, value, last_update);
+ status = store_attr(obj, attrs, attr->key, &attr->value, attr->last_update);
+ if (obj != STORE_OBJ(host))
+ sdb_object_deref(SDB_OBJ(obj));
sdb_object_deref(SDB_OBJ(host));
pthread_rwlock_unlock(&st->host_lock);
} /* store_attribute */
static int
-store_host(const char *name, sdb_time_t last_update, sdb_object_t *user_data)
+store_host(sdb_store_host_t *host, sdb_object_t *user_data)
{
sdb_store_t *st = SDB_STORE(user_data);
int status = 0;
- if (! name)
+ if ((! host) || (! host->name))
return -1;
pthread_rwlock_wrlock(&st->host_lock);
status = store_obj(NULL, st->hosts,
- SDB_HOST, name, last_update, NULL);
+ SDB_HOST, host->name, host->last_update, NULL);
pthread_rwlock_unlock(&st->host_lock);
return status;
} /* store_host */
static 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)
-{
- sdb_store_t *st = SDB_STORE(user_data);
-
- host_t *host;
- service_t *svc;
- sdb_avltree_t *services;
- int status = 0;
-
- if ((! hostname) || (! service) || (! key))
- return -1;
-
- pthread_rwlock_wrlock(&st->host_lock);
- host = HOST(sdb_avltree_lookup(st->hosts, hostname));
- services = get_host_children(host, SDB_SERVICE);
- sdb_object_deref(SDB_OBJ(host));
- if (! services) {
- sdb_log(SDB_LOG_ERR, "store: Failed to store attribute '%s' "
- "for service '%s' - host '%ss' not found",
- key, service, hostname);
- pthread_rwlock_unlock(&st->host_lock);
- return -1;
- }
-
- svc = SVC(sdb_avltree_lookup(services, service));
- if (! svc) {
- sdb_log(SDB_LOG_ERR, "store: Failed to store attribute '%s' - "
- "service '%s/%s' not found", key, hostname, service);
- status = -1;
- }
-
- if (! status)
- status = store_attr(STORE_OBJ(svc), svc->attributes,
- key, value, last_update);
-
- sdb_object_deref(SDB_OBJ(svc));
- pthread_rwlock_unlock(&st->host_lock);
-
- return status;
-} /* store_service_attr */
-
-static int
-store_service(const char *hostname, const char *name,
- sdb_time_t last_update, sdb_object_t *user_data)
+store_service(sdb_store_service_t *service, sdb_object_t *user_data)
{
sdb_store_t *st = SDB_STORE(user_data);
int status = 0;
- if ((! hostname) || (! name))
+ if ((! service) || (! service->hostname) || (! service->name))
return -1;
pthread_rwlock_wrlock(&st->host_lock);
- host = HOST(sdb_avltree_lookup(st->hosts, hostname));
+ host = HOST(sdb_avltree_lookup(st->hosts, service->hostname));
services = get_host_children(host, SDB_SERVICE);
if (! services) {
sdb_log(SDB_LOG_ERR, "store: Failed to store service '%s' - "
- "host '%s' not found", name, hostname);
+ "host '%s' not found", service->name, service->hostname);
status = -1;
}
if (! status)
status = store_obj(STORE_OBJ(host), services, SDB_SERVICE,
- name, last_update, NULL);
+ service->name, service->last_update, NULL);
sdb_object_deref(SDB_OBJ(host));
pthread_rwlock_unlock(&st->host_lock);
} /* store_service */
static 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)
-{
- sdb_store_t *st = SDB_STORE(user_data);
-
- sdb_avltree_t *metrics;
- host_t *host;
- sdb_metric_t *m;
- int status = 0;
-
- if ((! hostname) || (! metric) || (! key))
- return -1;
-
- pthread_rwlock_wrlock(&st->host_lock);
- host = HOST(sdb_avltree_lookup(st->hosts, hostname));
- metrics = get_host_children(host, SDB_METRIC);
- sdb_object_deref(SDB_OBJ(host));
- if (! metrics) {
- sdb_log(SDB_LOG_ERR, "store: Failed to store attribute '%s' "
- "for metric '%s' - host '%s' not found",
- key, metric, hostname);
- pthread_rwlock_unlock(&st->host_lock);
- return -1;
- }
-
- m = METRIC(sdb_avltree_lookup(metrics, metric));
- if (! m) {
- sdb_log(SDB_LOG_ERR, "store: Failed to store attribute '%s' - "
- "metric '%s/%s' not found", key, hostname, metric);
- status = -1;
- }
-
- if (! status)
- status = store_attr(STORE_OBJ(m), m->attributes,
- key, value, last_update);
-
- sdb_object_deref(SDB_OBJ(m));
- pthread_rwlock_unlock(&st->host_lock);
-
- return status;
-} /* store_metric_attr */
-
-static int
-store_metric(const char *hostname, const char *name,
- sdb_metric_store_t *store, sdb_time_t last_update,
- sdb_object_t *user_data)
+store_metric(sdb_store_metric_t *metric, sdb_object_t *user_data)
{
sdb_store_t *st = SDB_STORE(user_data);
sdb_store_obj_t *obj = NULL;
- host_t *host;
- sdb_metric_t *metric;
-
sdb_avltree_t *metrics;
+ host_t *host;
int status = 0;
- if ((! hostname) || (! name))
+ if ((! metric) || (! metric->hostname) || (! metric->name))
return -1;
- if (store) {
- if ((store->type != NULL) != (store->id != NULL))
- return -1;
- else if (! store->type)
- store = NULL;
- }
+ if ((metric->store.type != NULL) != (metric->store.id != NULL))
+ return -1;
pthread_rwlock_wrlock(&st->host_lock);
- host = HOST(sdb_avltree_lookup(st->hosts, hostname));
+ host = HOST(sdb_avltree_lookup(st->hosts, metric->hostname));
metrics = get_host_children(host, SDB_METRIC);
if (! metrics) {
sdb_log(SDB_LOG_ERR, "store: Failed to store metric '%s' - "
- "host '%s' not found", name, hostname);
+ "host '%s' not found", metric->name, metric->hostname);
status = -1;
}
if (! status)
status = store_obj(STORE_OBJ(host), metrics, SDB_METRIC,
- name, last_update, &obj);
+ metric->name, metric->last_update, &obj);
sdb_object_deref(SDB_OBJ(host));
if (status) {
}
assert(obj);
- metric = METRIC(obj);
-
- if (store)
- if (store_metric_store(metric, store))
+ if (metric->store.type && metric->store.id)
+ if (store_metric_store(METRIC(obj), metric))
status = -1;
pthread_rwlock_unlock(&st->host_lock);
return status;
} /* store_metric */
sdb_store_writer_t sdb_store_writer = {
- store_host, store_service, store_metric,
- store_attribute, store_service_attr, store_metric_attr,
+ store_host, store_service, store_metric, store_attribute,
};
static sdb_object_t *
int
sdb_store_host(sdb_store_t *store, const char *name, sdb_time_t last_update)
{
- return store_host(name, last_update, SDB_OBJ(store));
+ sdb_store_host_t host = {
+ name, last_update, 0, NULL, 0,
+ };
+ return store_host(&host, SDB_OBJ(store));
} /* sdb_store_host */
int
sdb_store_service(sdb_store_t *store, const char *hostname, const char *name,
sdb_time_t last_update)
{
- return store_service(hostname, name, last_update, SDB_OBJ(store));
+ sdb_store_service_t service = {
+ hostname, name, last_update, 0, NULL, 0,
+ };
+ return store_service(&service, SDB_OBJ(store));
} /* sdb_store_service */
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)
{
- return store_metric(hostname, name, metric_store, last_update, SDB_OBJ(store));
+ sdb_store_metric_t metric = {
+ hostname, name, { NULL, NULL }, last_update, 0, NULL, 0,
+ };
+ if (metric_store) {
+ metric.store.type = metric_store->type;
+ metric.store.id = metric_store->id;
+ }
+ return store_metric(&metric, SDB_OBJ(store));
} /* sdb_store_metric */
int
sdb_store_attribute(sdb_store_t *store, const char *hostname,
const char *key, const sdb_data_t *value, sdb_time_t last_update)
{
- return store_attribute(hostname, key, value, last_update, SDB_OBJ(store));
+ sdb_store_attribute_t attr = {
+ NULL, SDB_HOST, hostname, key, SDB_DATA_INIT, last_update, 0, NULL, 0,
+ };
+ if (value) {
+ attr.value = *value;
+ }
+ return store_attribute(&attr, SDB_OBJ(store));
} /* sdb_store_attribute */
int
const char *service, const char *key, const sdb_data_t *value,
sdb_time_t last_update)
{
- return store_service_attr(hostname, service, key, value,
- last_update, SDB_OBJ(store));
+ sdb_store_attribute_t attr = {
+ hostname, SDB_SERVICE, service, key, SDB_DATA_INIT, last_update, 0, NULL, 0,
+ };
+ if (value) {
+ attr.value = *value;
+ }
+ return store_attribute(&attr, SDB_OBJ(store));
} /* sdb_store_service_attr */
int
const char *metric, const char *key, const sdb_data_t *value,
sdb_time_t last_update)
{
- return store_metric_attr(hostname, metric, key, value,
- last_update, SDB_OBJ(store));
+ sdb_store_attribute_t attr = {
+ hostname, SDB_METRIC, metric, key, SDB_DATA_INIT, last_update, 0, NULL, 0,
+ };
+ if (value) {
+ attr.value = *value;
+ }
+ return store_attribute(&attr, SDB_OBJ(store));
} /* sdb_store_metric_attr */
sdb_store_obj_t *
index 678af6ff9e706f85a33080ac5a377142e17b0e23..a1e5e179ca5ec03d40fedc20081ec9b9f86a3e7f 100644 (file)
--- a/src/include/core/store.h
+++ b/src/include/core/store.h
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;
+ 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;
+ 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;
+ 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;
+ char **backends;
+ size_t backends_num;
+} sdb_store_attribute_t;
+
/*
* Expressions represent arithmetic expressions based on stored objects and
* their various attributes.
* 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:
* 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:
* 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:
* 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;
/*
index c7ee4293a5384a1485c20adaf6ab3eae81be6e51..8223d389a496f1ed85995ce8f2f318a8a16a9940 100644 (file)
} /* store_rpc */
static int
-store_host(const char *name, sdb_time_t last_update, sdb_object_t *user_data)
+store_host(sdb_store_host_t *host, sdb_object_t *user_data)
{
- sdb_proto_host_t host = { last_update, name };
- size_t len = sdb_proto_marshal_host(NULL, 0, &host);
+ sdb_proto_host_t h = { host->last_update, host->name };
+ size_t len = sdb_proto_marshal_host(NULL, 0, &h);
char buf[len];
- sdb_proto_marshal_host(buf, len, &host);
+ sdb_proto_marshal_host(buf, len, &h);
return store_rpc(UD(user_data), buf, len);
} /* store_host */
static int
-store_service(const char *hostname, const char *name, sdb_time_t last_update,
- sdb_object_t *user_data)
+store_service(sdb_store_service_t *service, sdb_object_t *user_data)
{
- sdb_proto_service_t svc = { last_update, hostname, name };
- ssize_t len = sdb_proto_marshal_service(NULL, 0, &svc);
+ sdb_proto_service_t s = {
+ service->last_update, service->hostname, service->name,
+ };
+ ssize_t len = sdb_proto_marshal_service(NULL, 0, &s);
char buf[len];
- sdb_proto_marshal_service(buf, len, &svc);
+ sdb_proto_marshal_service(buf, len, &s);
return store_rpc(UD(user_data), buf, len);
} /* store_service */
static int
-store_metric(const char *hostname, const char *name,
- sdb_metric_store_t *store, sdb_time_t last_update,
- sdb_object_t *user_data)
+store_metric(sdb_store_metric_t *metric, sdb_object_t *user_data)
{
- sdb_proto_metric_t metric = {
- last_update, hostname, name,
- store ? store->type : NULL, store ? store->id : NULL,
+ sdb_proto_metric_t m = {
+ metric->last_update, metric->hostname, metric->name,
+ metric->store.type, metric->store.id,
};
- size_t len = sdb_proto_marshal_metric(NULL, 0, &metric);
+ size_t len = sdb_proto_marshal_metric(NULL, 0, &m);
char buf[len];
- sdb_proto_marshal_metric(buf, len, &metric);
+ sdb_proto_marshal_metric(buf, len, &m);
return store_rpc(UD(user_data), buf, len);
} /* store_metric */
static int
-store_attr(const char *hostname, const char *key, const sdb_data_t *value,
- sdb_time_t last_update, sdb_object_t *user_data)
+store_attr(sdb_store_attribute_t *attr, sdb_object_t *user_data)
{
- sdb_proto_attribute_t attr = {
- last_update, SDB_HOST, NULL, hostname, key, *value,
+ sdb_proto_attribute_t a = {
+ attr->last_update, attr->parent_type, attr->hostname, attr->parent,
+ attr->key, attr->value,
};
- size_t len = sdb_proto_marshal_attribute(NULL, 0, &attr);
+ size_t len = sdb_proto_marshal_attribute(NULL, 0, &a);
char buf[len];
- sdb_proto_marshal_attribute(buf, len, &attr);
+ sdb_proto_marshal_attribute(buf, len, &a);
return store_rpc(UD(user_data), buf, len);
} /* store_attr */
-static 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)
-{
- sdb_proto_attribute_t attr = {
- last_update, SDB_SERVICE, hostname, service, key, *value,
- };
- size_t len = sdb_proto_marshal_attribute(NULL, 0, &attr);
- char buf[len];
-
- sdb_proto_marshal_attribute(buf, len, &attr);
- return store_rpc(UD(user_data), buf, len);
-} /* store_service_attr */
-
-static 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)
-{
- sdb_proto_attribute_t attr = {
- last_update, SDB_METRIC, hostname, metric, key, *value,
- };
- size_t len = sdb_proto_marshal_attribute(NULL, 0, &attr);
- char buf[len];
-
- sdb_proto_marshal_attribute(buf, len, &attr);
- return store_rpc(UD(user_data), buf, len);
-} /* store_metric_attr */
-
static sdb_store_writer_t store_impl = {
- store_host, store_service, store_metric,
- store_attr, store_service_attr, store_metric_attr,
+ store_host, store_service, store_metric, store_attr,
};
/*