X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fstore.c;h=3d1a847b00b61f236c2d9d8ae914d7fa847ff3b1;hp=7285b349b39be9994b92add89167bb3aaaacb174;hb=816e3e1e9fea25d37504e3f0f51b758a41e60ae3;hpb=fb2335d70cc065307f889e6085553cdff344c36f diff --git a/src/frontend/store.c b/src/frontend/store.c index 7285b34..3d1a847 100644 --- a/src/frontend/store.c +++ b/src/frontend/store.c @@ -73,6 +73,10 @@ store_reply(sdb_conn_t *conn, int type, const char *name, int status) * public API */ +/* + * TODO: move sdb_fe_store to frontend/query.c and let it build an AST + */ + int sdb_fe_store(sdb_conn_t *conn) { @@ -124,16 +128,18 @@ sdb_fe_store(sdb_conn_t *conn) } return sdb_fe_store_metric(conn, &metric); } - case SDB_ATTRIBUTE: - { - sdb_proto_attribute_t attr; - if (sdb_proto_unmarshal_attribute(buf, len, &attr) < 0) { - sdb_strbuf_sprintf(conn->errbuf, - "STORE: Failed to unmarshal attribute object"); - return -1; - } - return sdb_fe_store_attribute(conn, &attr); + } + if (type & SDB_ATTRIBUTE) { + sdb_proto_attribute_t attr; + int status; + if (sdb_proto_unmarshal_attribute(buf, len, &attr) < 0) { + sdb_strbuf_sprintf(conn->errbuf, + "STORE: Failed to unmarshal attribute object"); + return -1; } + status = sdb_fe_store_attribute(conn, &attr); + sdb_data_free_datum(&attr.value); + return status; } sdb_log(SDB_LOG_ERR, "frontend: Invalid object type %d for " @@ -160,7 +166,7 @@ sdb_fe_store_service(sdb_conn_t *conn, const sdb_proto_service_t *svc) if ((! conn) || (! svc) || (! svc->hostname) || (! svc->name)) return -1; - snprintf(name, sizeof(name), svc->hostname, svc->name); + snprintf(name, sizeof(name), "%s.%s", svc->hostname, svc->name); return store_reply(conn, SDB_SERVICE, name, sdb_store_service(svc->hostname, svc->name, svc->last_update)); } /* sdb_fe_store_service */ @@ -176,7 +182,7 @@ sdb_fe_store_metric(sdb_conn_t *conn, const sdb_proto_metric_t *metric) store.type = metric->store_type; store.id = metric->store_id; - snprintf(name, sizeof(name), metric->hostname, metric->name); + snprintf(name, sizeof(name), "%s.%s", metric->hostname, metric->name); return store_reply(conn, SDB_METRIC, name, sdb_store_metric(metric->hostname, metric->name, &store, metric->last_update));