Code

frontend: Let the 'lookup' command support services and metrics.
[sysdb.git] / src / frontend / query.c
index 338d95a75c6351343a6a2b248b3f5bc2a61cdafa..6e94f646f2f9d1c20dc2f12dbd30236283dda21a 100644 (file)
@@ -208,12 +208,15 @@ sdb_fe_lookup(sdb_conn_t *conn)
 
        /* run analyzer separately; parse_matcher is missing
         * the right context to do so */
-       if (sdb_fe_analyze(SDB_CONN_NODE(&node))) {
+       if (sdb_fe_analyze(SDB_CONN_NODE(&node), conn->errbuf)) {
                char expr[matcher_len + 1];
+               char err[sdb_strbuf_len(conn->errbuf) + sizeof(expr) + 64];
                strncpy(expr, matcher, sizeof(expr));
                expr[sizeof(expr) - 1] = '\0';
-               sdb_strbuf_sprintf(conn->errbuf, "Failed to verify "
-                               "lookup condition '%s'", expr);
+               snprintf(err, sizeof(err), "Failed to parse "
+                               "lookup condition '%s': %s", expr,
+                               sdb_strbuf_string(conn->errbuf));
+               sdb_strbuf_sprintf(conn->errbuf, "%s", err);
                status = -1;
        }
        else
@@ -407,15 +410,6 @@ sdb_fe_exec_lookup(sdb_conn_t *conn, int type,
        sdb_store_json_formatter_t *f;
        sdb_strbuf_t *buf;
 
-       /* XXX: support other types */
-       if (type != SDB_HOST) {
-               sdb_log(SDB_LOG_ERR, "frontend: Invalid object type %d "
-                               "in LOOKUP command", type);
-               sdb_strbuf_sprintf(conn->errbuf,
-                               "LOOKUP: Invalid object type %d", type);
-               return -1;
-       }
-
        buf = sdb_strbuf_create(1024);
        if (! buf) {
                char errbuf[1024];
@@ -440,9 +434,11 @@ sdb_fe_exec_lookup(sdb_conn_t *conn, int type,
 
        sdb_strbuf_memcpy(buf, &res_type, sizeof(uint32_t));
 
-       if (sdb_store_scan(SDB_HOST, m, filter, lookup_tojson, f)) {
-               sdb_log(SDB_LOG_ERR, "frontend: Failed to lookup hosts");
-               sdb_strbuf_sprintf(conn->errbuf, "Failed to lookup hosts");
+       if (sdb_store_scan(type, m, filter, lookup_tojson, f)) {
+               sdb_log(SDB_LOG_ERR, "frontend: Failed to lookup %ss",
+                               SDB_STORE_TYPE_TO_NAME(type));
+               sdb_strbuf_sprintf(conn->errbuf, "Failed to lookup %ss",
+                               SDB_STORE_TYPE_TO_NAME(type));
                sdb_strbuf_destroy(buf);
                free(f);
                return -1;