X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fcore%2Fstore_json.c;h=a069d8543872ea79e20edd8f31c0355f372488dd;hp=5d0408a75fee33ad7b0a3718efcd081944ea2013;hb=ed2c9fc3e4ca6840a5a31c735f0cfc02fd21d4fc;hpb=6a09adcd03cbb0ee7f32a523c6d9d4895979c8d9 diff --git a/src/core/store_json.c b/src/core/store_json.c index 5d0408a..a069d85 100644 --- a/src/core/store_json.c +++ b/src/core/store_json.c @@ -385,27 +385,67 @@ sdb_store_json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj) if ((! f) || (! obj)) return -1; - { - obj_t o = { - obj->type, - obj->_name, - - /* value */ NULL, - /* timeseries */ -1, - - obj->last_update, - obj->interval, - obj->backends_num, - (const char * const *)obj->backends, - }; - - if (obj->type == SDB_ATTRIBUTE) - o.value = &ATTR(obj)->value; - if (obj->type == SDB_METRIC) - o.timeseries = METRIC(obj)->store.type != NULL; - - return json_emit(f, &o); + switch (obj->type) { + case SDB_HOST: + { + sdb_store_host_t host = { + obj->_name, + obj->last_update, + obj->interval, + (const char * const *)obj->backends, + obj->backends_num, + }; + return sdb_store_json_writer.store_host(&host, SDB_OBJ(f)); + } + case SDB_SERVICE: + { + sdb_store_service_t service = { + obj->parent ? obj->parent->_name : NULL, + obj->_name, + obj->last_update, + obj->interval, + (const char * const *)obj->backends, + obj->backends_num, + }; + return sdb_store_json_writer.store_service(&service, SDB_OBJ(f)); + } + case SDB_METRIC: + { + sdb_store_metric_t metric = { + obj->parent ? obj->parent->_name : NULL, + obj->_name, + { + METRIC(obj)->store.type, + METRIC(obj)->store.id, + }, + obj->last_update, + obj->interval, + (const char * const *)obj->backends, + obj->backends_num, + }; + return sdb_store_json_writer.store_metric(&metric, SDB_OBJ(f)); + } + case SDB_ATTRIBUTE: + { + sdb_store_attribute_t attr = { + NULL, + obj->parent ? obj->parent->type : 0, + obj->parent ? obj->parent->_name : NULL, + obj->_name, + ATTR(obj)->value, + obj->last_update, + obj->interval, + (const char * const *)obj->backends, + obj->backends_num, + }; + if (obj->parent && (obj->parent->type != SDB_HOST) + && obj->parent->parent) + attr.hostname = obj->parent->parent->_name; + return sdb_store_json_writer.store_attribute(&attr, SDB_OBJ(f)); + } } + + return -1; } /* sdb_store_json_emit */ int