diff --git a/src/core/store.c b/src/core/store.c
index ea30da90116d9925cd148e39f7577e346503ba42..764c7c7a0e7604177f18a570d68529b0aba1caed 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
* private types
*/
-static sdb_type_t sdb_host_type;
-static sdb_type_t sdb_service_type;
-static sdb_type_t sdb_metric_type;
-static sdb_type_t sdb_attribute_type;
+static sdb_type_t host_type;
+static sdb_type_t service_type;
+static sdb_type_t metric_type;
+static sdb_type_t attribute_type;
static int
store_obj_init(sdb_object_t *obj, va_list ap)
} /* store_obj_destroy */
static int
-sdb_host_init(sdb_object_t *obj, va_list ap)
+host_init(sdb_object_t *obj, va_list ap)
{
sdb_host_t *sobj = HOST(obj);
int ret;
if (! sobj->attributes)
return -1;
return 0;
-} /* sdb_host_init */
+} /* host_init */
static void
-sdb_host_destroy(sdb_object_t *obj)
+host_destroy(sdb_object_t *obj)
{
sdb_host_t *sobj = HOST(obj);
assert(obj);
sdb_avltree_destroy(sobj->metrics);
if (sobj->attributes)
sdb_avltree_destroy(sobj->attributes);
-} /* sdb_host_destroy */
+} /* host_destroy */
static int
-sdb_service_init(sdb_object_t *obj, va_list ap)
+service_init(sdb_object_t *obj, va_list ap)
{
sdb_service_t *sobj = SVC(obj);
int ret;
if (! sobj->attributes)
return -1;
return 0;
-} /* sdb_service_init */
+} /* service_init */
static void
-sdb_service_destroy(sdb_object_t *obj)
+service_destroy(sdb_object_t *obj)
{
sdb_service_t *sobj = SVC(obj);
assert(obj);
if (sobj->attributes)
sdb_avltree_destroy(sobj->attributes);
-} /* sdb_service_destroy */
+} /* service_destroy */
static int
-sdb_metric_init(sdb_object_t *obj, va_list ap)
+metric_init(sdb_object_t *obj, va_list ap)
{
sdb_metric_t *sobj = METRIC(obj);
int ret;
sobj->store.type = sobj->store.id = NULL;
return 0;
-} /* sdb_metric_init */
+} /* metric_init */
static void
-sdb_metric_destroy(sdb_object_t *obj)
+metric_destroy(sdb_object_t *obj)
{
sdb_metric_t *sobj = METRIC(obj);
assert(obj);
free(sobj->store.type);
if (sobj->store.id)
free(sobj->store.id);
-} /* sdb_metric_destroy */
+} /* metric_destroy */
static int
-sdb_attr_init(sdb_object_t *obj, va_list ap)
+attr_init(sdb_object_t *obj, va_list ap)
{
const sdb_data_t *value;
int ret;
if (sdb_data_copy(&ATTR(obj)->value, value))
return -1;
return 0;
-} /* sdb_attr_init */
+} /* attr_init */
static void
-sdb_attr_destroy(sdb_object_t *obj)
+attr_destroy(sdb_object_t *obj)
{
assert(obj);
store_obj_destroy(obj);
sdb_data_free_datum(&ATTR(obj)->value);
-} /* sdb_attr_destroy */
+} /* attr_destroy */
-static sdb_type_t sdb_host_type = {
- sizeof(sdb_host_t),
- sdb_host_init,
- sdb_host_destroy
+static sdb_type_t host_type = {
+ /* size = */ sizeof(sdb_host_t),
+ /* init = */ host_init,
+ /* destroy = */ host_destroy
};
-static sdb_type_t sdb_service_type = {
- sizeof(sdb_service_t),
- sdb_service_init,
- sdb_service_destroy
+static sdb_type_t service_type = {
+ /* size = */ sizeof(sdb_service_t),
+ /* init = */ service_init,
+ /* destroy = */ service_destroy
};
-static sdb_type_t sdb_metric_type = {
- sizeof(sdb_metric_t),
- sdb_metric_init,
- sdb_metric_destroy
+static sdb_type_t metric_type = {
+ /* size = */ sizeof(sdb_metric_t),
+ /* init = */ metric_init,
+ /* destroy = */ metric_destroy
};
-static sdb_type_t sdb_attribute_type = {
- sizeof(sdb_attribute_t),
- sdb_attr_init,
- sdb_attr_destroy
+static sdb_type_t attribute_type = {
+ /* size = */ sizeof(sdb_attribute_t),
+ /* init = */ attr_init,
+ /* destroy = */ attr_destroy
};
/*
else {
if (type == SDB_ATTRIBUTE) {
/* the value will be updated by the caller */
- new = STORE_OBJ(sdb_object_create(name, sdb_attribute_type,
+ new = STORE_OBJ(sdb_object_create(name, attribute_type,
type, last_update, NULL));
}
else {
sdb_type_t t;
t = type == SDB_HOST
- ? sdb_host_type
+ ? host_type
: type == SDB_SERVICE
- ? sdb_service_type
- : sdb_metric_type;
+ ? service_type
+ : metric_type;
new = STORE_OBJ(sdb_object_create(name, t, type, last_update));
}
size_t i;
/* TODO: make time format configurable */
- if (! sdb_strftime(start_str, sizeof(start_str),
- "%F %T %z", ts->start))
+ if (! sdb_strftime(start_str, sizeof(start_str), ts->start))
snprintf(start_str, sizeof(start_str), "<error>");
start_str[sizeof(start_str) - 1] = '\0';
- if (! sdb_strftime(end_str, sizeof(end_str),
- "%F %T %z", ts->end))
+ if (! sdb_strftime(end_str, sizeof(end_str), ts->end))
snprintf(end_str, sizeof(end_str), "<error>");
end_str[sizeof(end_str) - 1] = '\0';
for (j = 0; j < ts->data_len; ++j) {
char time_str[64];
- if (! sdb_strftime(time_str, sizeof(time_str),
- "%F %T %z", ts->data[i][j].timestamp))
+ if (! sdb_strftime(time_str, sizeof(time_str), ts->data[i][j].timestamp))
snprintf(time_str, sizeof(time_str), "<error>");
time_str[sizeof(time_str) - 1] = '\0';
sdb_timeseries_t *ts;
+ int status = 0;
+
if ((! hostname) || (! metric) || (! opts) || (! buf))
return -1;
sdb_log(SDB_LOG_ERR, "store: Failed to fetch time-series '%s/%s' "
"- no data-store configured for the stored metric",
hostname, metric);
+ sdb_object_deref(SDB_OBJ(m));
pthread_rwlock_unlock(&host_lock);
return -1;
}
sdb_log(SDB_LOG_ERR, "store: Failed to fetch time-series '%s/%s' "
"- %s fetcher callback returned no data for '%s'",
hostname, metric, type, id);
- return -1;
+ status = -1;
}
}
ts_tojson(ts, buf);
+ sdb_object_deref(SDB_OBJ(m));
sdb_timeseries_destroy(ts);
- return 0;
+ return status;
} /* sdb_store_fetch_timeseries */
int
if (! res)
return 0;
return sdb_data_copy(res, &ATTR(obj)->value);
+ case SDB_FIELD_TIMESERIES:
+ if (obj->type != SDB_METRIC)
+ return -1;
+ tmp.type = SDB_TYPE_BOOLEAN;
+ tmp.data.boolean = METRIC(obj)->store.type != NULL;
default:
return -1;
}