X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffrontend%2Fquery.c;h=e0b7181161cde74bbf9ba50d96c49022444ec31e;hb=baeea2369e2feabf67121ffc771d7c29b5ae43f9;hp=50f0fed6bb4997856e8692e2a994ab185ee94734;hpb=38c8618eca3e3a837a5a718683608510feb9a7e0;p=sysdb.git diff --git a/src/frontend/query.c b/src/frontend/query.c index 50f0fed..e0b7181 100644 --- a/src/frontend/query.c +++ b/src/frontend/query.c @@ -167,24 +167,30 @@ sdb_fe_lookup(sdb_conn_t *conn) int sdb_fe_exec(sdb_conn_t *conn, sdb_conn_node_t *node) { + sdb_store_matcher_t *m = NULL, *filter = NULL; + if (! node) return -1; switch (node->cmd) { case CONNECTION_FETCH: - return sdb_fe_exec_fetch(conn, CONN_FETCH(node)->name, - /* filter = */ NULL); + if (CONN_FETCH(node)->filter) + filter = CONN_FETCH(node)->filter->matcher; + return sdb_fe_exec_fetch(conn, CONN_FETCH(node)->name, filter); case CONNECTION_LIST: - return sdb_fe_exec_list(conn, /* filter = */ NULL); + if (CONN_LIST(node)->filter) + filter = CONN_LIST(node)->filter->matcher; + return sdb_fe_exec_list(conn, filter); case CONNECTION_LOOKUP: - { - sdb_store_matcher_t *m = NULL, *filter = NULL; if (CONN_LOOKUP(node)->matcher) m = CONN_LOOKUP(node)->matcher->matcher; if (CONN_LOOKUP(node)->filter) filter = CONN_LOOKUP(node)->filter->matcher; return sdb_fe_exec_lookup(conn, m, filter); - } + case CONNECTION_TIMESERIES: + return sdb_fe_exec_timeseries(conn, + CONN_TS(node)->hostname, CONN_TS(node)->metric, + &CONN_TS(node)->opts); default: sdb_log(SDB_LOG_ERR, "frontend: Unknown command %i", node->cmd); @@ -308,5 +314,36 @@ sdb_fe_exec_lookup(sdb_conn_t *conn, sdb_store_matcher_t *m, return 0; } /* sdb_fe_exec_lookup */ +int +sdb_fe_exec_timeseries(sdb_conn_t *conn, + const char *hostname, const char *metric, + sdb_timeseries_opts_t *opts) +{ + sdb_strbuf_t *buf; + + buf = sdb_strbuf_create(1024); + if (! buf) { + char errbuf[1024]; + sdb_log(SDB_LOG_ERR, "frontend: Failed to create " + "buffer to handle TIMESERIES command: %s", + sdb_strerror(errno, errbuf, sizeof(errbuf))); + + sdb_strbuf_sprintf(conn->errbuf, "Out of memory"); + return -1; + } + + if (sdb_store_fetch_timeseries(hostname, metric, opts, buf)) { + sdb_log(SDB_LOG_ERR, "frontend: Failed to fetch time-series"); + sdb_strbuf_sprintf(conn->errbuf, "Failed to fetch time-series"); + sdb_strbuf_destroy(buf); + return -1; + } + + sdb_connection_send(conn, CONNECTION_OK, + (uint32_t)sdb_strbuf_len(buf), sdb_strbuf_string(buf)); + sdb_strbuf_destroy(buf); + return 0; +} /* sdb_fe_exec_timeseries */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */