summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: dd74510)
raw | patch | inline | side by side (parent: dd74510)
author | Sebastian Harl <sh@tokkee.org> | |
Sat, 16 Aug 2014 10:17:15 +0000 (12:17 +0200) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Sat, 16 Aug 2014 10:17:15 +0000 (12:17 +0200) |
A timeseries describes one or multiple sequences of data-points where each
data-point is a timestamp and a value.
A new type of plugin, "time-series fetchers", has been introduced to access
time-series information from arbitrary data-stores.
data-point is a timestamp and a value.
A new type of plugin, "time-series fetchers", has been introduced to access
time-series information from arbitrary data-stores.
src/Makefile.am | patch | blob | history | |
src/core/plugin.c | patch | blob | history | |
src/include/core/plugin.h | patch | blob | history | |
src/include/core/timeseries.h | [new file with mode: 0644] | patch | blob |
diff --git a/src/Makefile.am b/src/Makefile.am
index 272533b0951f0ff23532de6bceb93f240a992422..c7c53e3289189d9fbb7a67ba4cd7151b18ba1758 100644 (file)
--- a/src/Makefile.am
+++ b/src/Makefile.am
include/core/object.h \
include/core/plugin.h \
include/core/store.h \
- include/core/time.h
+ include/core/time.h \
+ include/core/timeseries.h
pkgfeincludedir = $(pkgincludedir)/frontend
pkgfeinclude_HEADERS = \
include/frontend/connection.h \
core/store_expr.c \
core/store_lookup.c \
core/data.c include/core/data.h \
+ include/core/timeseries.h \
frontend/connection.c include/frontend/connection.h \
frontend/connection-private.h \
frontend/parser.c include/frontend/parser.h \
diff --git a/src/core/plugin.c b/src/core/plugin.c
index 919df2b3c982fed934b0495849817936907d9253..85dd76f410dbccfdb27f6bbf9fff3c0ee4653f27 100644 (file)
--- a/src/core/plugin.c
+++ b/src/core/plugin.c
static sdb_llist_t *cname_list = NULL;
static sdb_llist_t *shutdown_list = NULL;
static sdb_llist_t *log_list = NULL;
+static sdb_llist_t *ts_fetcher_list = NULL;
static struct {
const char *type;
@@ -786,6 +787,14 @@ sdb_plugin_register_collector(const char *name, sdb_plugin_collector_cb callback
return 0;
} /* sdb_plugin_register_collector */
+int
+sdb_plugin_register_ts_fetcher(const char *name,
+ sdb_plugin_fetch_ts_cb callback, sdb_object_t *user_data)
+{
+ return plugin_add_callback(&ts_fetcher_list, "time-series fetcher",
+ name, callback, user_data);
+} /* sdb_plugin_register_ts_fetcher */
+
sdb_plugin_ctx_t
sdb_plugin_get_ctx(void)
{
index f75788ad2359a479c5be92d276366d41bf2fa21b..4ccc983c446551db07ec729b4c7b26cfc8161b8b 100644 (file)
#include "sysdb.h"
#include "core/object.h"
#include "core/time.h"
+#include "core/timeseries.h"
#include "liboconfig/oconfig.h"
typedef int (*sdb_plugin_log_cb)(int prio, const char *msg,
sdb_object_t *user_data);
+typedef sdb_timeseries_t *(*sdb_plugin_fetch_ts_cb)(const char *id,
+ sdb_timeseries_opts_t *opts, sdb_object_t *user_data);
+
/*
* sdb_plugin_register_config:
* Register a "config" function. This will be used to pass on the
sdb_plugin_register_log(const char *name, sdb_plugin_log_cb callback,
sdb_object_t *user_data);
+/*
+ * sdb_plugin_register_ts_fetcher:
+ * Register a "time-series fetcher" function to be called whenever retrieving
+ * a time-series from a data-store. The callback will receive an identifier
+ * describing where to retrieve the data from (e.g. a filename or some kind of
+ * URL) and options which further describe the query.
+ *
+ * The name is used literally (without prepending the plugin name) to look up
+ * the appropriate fetcher callback.
+ *
+ * Arguments:
+ * - user_data: If specified, this will be passed on to each call of the
+ * callback. The function will take ownership of the object, that is,
+ * increment the reference count by one. In case the caller does not longer
+ * use the object for other purposes, it should thus deref it.
+ */
+int
+sdb_plugin_register_ts_fetcher(const char *name,
+ sdb_plugin_fetch_ts_cb callback, sdb_object_t *user_data);
+
/*
* sdb_plugin_get_ctx, sdb_plugin_set_ctx:
* The plugin context defines a set of settings that are available whenever a
diff --git a/src/include/core/timeseries.h b/src/include/core/timeseries.h
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * SysDB - src/include/core/timeseries.h
+ * Copyright (C) 2014 Sebastian 'tokkee' Harl <sh@tokkee.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SDB_CORE_TIMESERIES_H
+#define SDB_CORE_TIMESERIES_H 1
+
+#include "sysdb.h"
+#include "core/time.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A data-point describes a datum at a certain point of time.
+ */
+typedef struct {
+ sdb_time_t timestamp;
+ double value;
+} sdb_data_point_t;
+
+/*
+ * A timeseries describes one or more sequences of data-points. Multiple
+ * sequences will have a name each and share the same start and end times and
+ * number of data points.
+ *
+ * Start and end times may diverge slightly from the requested start and end
+ * times depending on the resolution available in the backend data-store.
+ */
+typedef struct {
+ sdb_time_t start;
+ sdb_time_t end;
+
+ sdb_data_point_t **data;
+ char **data_names;
+ size_t data_len;
+} sdb_timeseries_t;
+
+/*
+ * Time-series options specify generic parameters to be used when fetching
+ * time-series data from a data-store.
+ */
+typedef struct {
+ sdb_time_t start;
+ sdb_time_t end;
+} sdb_timeseries_opts_t;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* ! SDB_CORE_TIMESERIES_H */
+
+/* vim: set tw=78 sw=4 ts=4 noexpandtab : */
+