summaryrefslogtreecommitdiffstats
path: root/web/api/formatters
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-02-18 15:22:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-02-18 15:22:04 +0000
commit608af7bf0232448f73e76e62a75c8a2e77655101 (patch)
tree65ff9e4da7675e8713b7fb149f674ffe1a8742d1 /web/api/formatters
parentAdding upstream version 1.29.1. (diff)
downloadnetdata-608af7bf0232448f73e76e62a75c8a2e77655101.tar.xz
netdata-608af7bf0232448f73e76e62a75c8a2e77655101.zip
Adding upstream version 1.29.2.upstream/1.29.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/api/formatters')
-rw-r--r--web/api/formatters/rrd2json.c27
-rw-r--r--web/api/formatters/rrd2json.h1
2 files changed, 27 insertions, 1 deletions
diff --git a/web/api/formatters/rrd2json.c b/web/api/formatters/rrd2json.c
index 9168f76eb..d8e248066 100644
--- a/web/api/formatters/rrd2json.c
+++ b/web/api/formatters/rrd2json.c
@@ -32,6 +32,30 @@ void free_context_param_list(struct context_param **param_list)
*param_list = NULL;
}
+void rebuild_context_param_list(struct context_param *context_param_list, time_t after_requested)
+{
+ RRDDIM *temp_rd = context_param_list->rd;
+ RRDDIM *new_rd_list = NULL, *t;
+ while (temp_rd) {
+ t = temp_rd->next;
+ if (rrdset_last_entry_t(temp_rd->rrdset) >= after_requested) {
+ temp_rd->next = new_rd_list;
+ new_rd_list = temp_rd;
+ } else {
+ freez((char *)temp_rd->id);
+ freez((char *)temp_rd->name);
+#ifdef ENABLE_DBENGINE
+ if (temp_rd->rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE)
+ freez(temp_rd->state->metric_uuid);
+#endif
+ freez(temp_rd->state);
+ freez(temp_rd);
+ }
+ temp_rd = t;
+ }
+ context_param_list->rd = new_rd_list;
+};
+
void build_context_param_list(struct context_param **param_list, RRDSET *st)
{
if (unlikely(!param_list || !st))
@@ -193,7 +217,6 @@ int rrdset2anything_api_v1(
time_t last_accessed_time = now_realtime_sec();
st->last_accessed_time = last_accessed_time;
- RRDDIM *temp_rd = context_param_list ? context_param_list->rd : NULL;
RRDR *r = rrd2rrdr(st, points, after, before, group_method, group_time, options, dimensions?buffer_tostring(dimensions):NULL, context_param_list);
if(!r) {
@@ -201,6 +224,8 @@ int rrdset2anything_api_v1(
return HTTP_RESP_INTERNAL_SERVER_ERROR;
}
+ RRDDIM *temp_rd = context_param_list ? context_param_list->rd : NULL;
+
if(r->result_options & RRDR_RESULT_OPTION_RELATIVE)
buffer_no_cacheable(wb);
else if(r->result_options & RRDR_RESULT_OPTION_ABSOLUTE)
diff --git a/web/api/formatters/rrd2json.h b/web/api/formatters/rrd2json.h
index 1f929c494..3dc598973 100644
--- a/web/api/formatters/rrd2json.h
+++ b/web/api/formatters/rrd2json.h
@@ -86,6 +86,7 @@ extern int rrdset2value_api_v1(
);
extern void build_context_param_list(struct context_param **param_list, RRDSET *st);
+extern void rebuild_context_param_list(struct context_param *context_param_list, time_t after_requested);
extern void free_context_param_list(struct context_param **param_list);
#endif /* NETDATA_RRD2JSON_H */