Code

data: Use a predefined format for sdb_strftime().
[sysdb.git] / src / core / store.c
index ea30da90116d9925cd148e39f7577e346503ba42..171e31935bb898eefb5e6e95b46000a20f3cb1a6 100644 (file)
@@ -488,12 +488,10 @@ ts_tojson(sdb_timeseries_t *ts, sdb_strbuf_t *buf)
        size_t i;
 
        /* TODO: make time format configurable */
-       if (! sdb_strftime(start_str, sizeof(start_str),
-                               "%F %T %z", ts->start))
+       if (! sdb_strftime(start_str, sizeof(start_str), ts->start))
                snprintf(start_str, sizeof(start_str), "<error>");
        start_str[sizeof(start_str) - 1] = '\0';
-       if (! sdb_strftime(end_str, sizeof(end_str),
-                               "%F %T %z", ts->end))
+       if (! sdb_strftime(end_str, sizeof(end_str), ts->end))
                snprintf(end_str, sizeof(end_str), "<error>");
        end_str[sizeof(end_str) - 1] = '\0';
 
@@ -507,8 +505,7 @@ ts_tojson(sdb_timeseries_t *ts, sdb_strbuf_t *buf)
                for (j = 0; j < ts->data_len; ++j) {
                        char time_str[64];
 
-                       if (! sdb_strftime(time_str, sizeof(time_str),
-                                               "%F %T %z", ts->data[i][j].timestamp))
+                       if (! sdb_strftime(time_str, sizeof(time_str), ts->data[i][j].timestamp))
                                snprintf(time_str, sizeof(time_str), "<error>");
                        time_str[sizeof(time_str) - 1] = '\0';
 
@@ -850,6 +847,8 @@ sdb_store_fetch_timeseries(const char *hostname, const char *metric,
 
        sdb_timeseries_t *ts;
 
+       int status = 0;
+
        if ((! hostname) || (! metric) || (! opts) || (! buf))
                return -1;
 
@@ -876,6 +875,7 @@ sdb_store_fetch_timeseries(const char *hostname, const char *metric,
                sdb_log(SDB_LOG_ERR, "store: Failed to fetch time-series '%s/%s' "
                                "- no data-store configured for the stored metric",
                                hostname, metric);
+               sdb_object_deref(SDB_OBJ(m));
                pthread_rwlock_unlock(&host_lock);
                return -1;
        }
@@ -893,13 +893,14 @@ sdb_store_fetch_timeseries(const char *hostname, const char *metric,
                        sdb_log(SDB_LOG_ERR, "store: Failed to fetch time-series '%s/%s' "
                                        "- %s fetcher callback returned no data for '%s'",
                                        hostname, metric, type, id);
-                       return -1;
+                       status = -1;
                }
        }
 
        ts_tojson(ts, buf);
+       sdb_object_deref(SDB_OBJ(m));
        sdb_timeseries_destroy(ts);
-       return 0;
+       return status;
 } /* sdb_store_fetch_timeseries */
 
 int
@@ -942,6 +943,11 @@ sdb_store_get_field(sdb_store_obj_t *obj, int field, sdb_data_t *res)
                        if (! res)
                                return 0;
                        return sdb_data_copy(res, &ATTR(obj)->value);
+               case SDB_FIELD_TIMESERIES:
+                       if (obj->type != SDB_METRIC)
+                               return -1;
+                       tmp.type = SDB_TYPE_BOOLEAN;
+                       tmp.data.boolean = METRIC(obj)->store.type != NULL;
                default:
                        return -1;
        }