X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fstore_json.c;h=878cc4fe265886653c754a60a83ef23889af1668;hb=82f8f7dbf1dcfb18f74f1ca8b58ed823a1225404;hp=a772dc39c8f67549c8205a0f63527672b6edf473;hpb=42f08911b5ba35dbd0e3dadc0f3785f8fa3a946a;p=sysdb.git diff --git a/src/core/store_json.c b/src/core/store_json.c index a772dc3..878cc4f 100644 --- a/src/core/store_json.c +++ b/src/core/store_json.c @@ -48,6 +48,9 @@ */ struct sdb_store_json_formatter { + sdb_object_t super; + + /* The string buffer to write to */ sdb_strbuf_t *buf; /* The context describes the state of the formatter through @@ -61,6 +64,35 @@ struct sdb_store_json_formatter { int type; int flags; }; +#define F(obj) ((sdb_store_json_formatter_t *)(obj)) + +static int +formatter_init(sdb_object_t *obj, va_list ap) +{ + sdb_store_json_formatter_t *f = F(obj); + + f->buf = va_arg(ap, sdb_strbuf_t *); + if (! f->buf) + return -1; + + f->type = va_arg(ap, int); + if ((f->type != SDB_HOST) && (f->type != SDB_SERVICE) && (f->type != SDB_METRIC)) + return -1; + + f->flags = va_arg(ap, int); + + f->context[0] = 0; + f->current = 0; + + f->current_host = NULL; + return 0; +} /* formatter_init */ + +static sdb_type_t formatter_type = { + /* size = */ sizeof(sdb_store_json_formatter_t), + /* init = */ formatter_init, + /* destroy = */ NULL, +}; /* * private helper functions @@ -140,8 +172,7 @@ json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj) } /* TODO: make time and interval formats configurable */ - if (! sdb_strftime(time_str, sizeof(time_str), - "%F %T %z", obj->last_update)) + if (! sdb_strftime(time_str, sizeof(time_str), obj->last_update)) snprintf(time_str, sizeof(time_str), ""); time_str[sizeof(time_str) - 1] = '\0'; @@ -170,27 +201,8 @@ json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj) sdb_store_json_formatter_t * sdb_store_json_formatter(sdb_strbuf_t *buf, int type, int flags) { - sdb_store_json_formatter_t *f; - - if (! buf) - return NULL; - - if ((type != SDB_HOST) && (type != SDB_SERVICE) && (type != SDB_METRIC)) - return NULL; - - f = calloc(1, sizeof(*f)); - if (! f) - return NULL; - - f->buf = buf; - f->context[0] = 0; - f->current = 0; - - f->current_host = NULL; - - f->type = type; - f->flags = flags; - return f; + return F(sdb_object_create("json-formatter", formatter_type, + buf, type, flags)); } /* sdb_store_json_formatter */ int