summaryrefslogtreecommitdiffstats
path: root/web/api/queries/incremental_sum/incremental_sum.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-08-10 09:18:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-08-10 09:18:49 +0000
commitdd814a7c1a8de056a79f7238578b09236edd5506 (patch)
tree429e7eed5a634a4efe9a6877ce66da8e64aa1782 /web/api/queries/incremental_sum/incremental_sum.h
parentAdding upstream version 1.41.0. (diff)
downloadnetdata-dd814a7c1a8de056a79f7238578b09236edd5506.tar.xz
netdata-dd814a7c1a8de056a79f7238578b09236edd5506.zip
Adding upstream version 1.42.0.upstream/1.42.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/api/queries/incremental_sum/incremental_sum.h')
-rw-r--r--web/api/queries/incremental_sum/incremental_sum.h28
1 files changed, 15 insertions, 13 deletions
diff --git a/web/api/queries/incremental_sum/incremental_sum.h b/web/api/queries/incremental_sum/incremental_sum.h
index dd6483b2c..f110c5861 100644
--- a/web/api/queries/incremental_sum/incremental_sum.h
+++ b/web/api/queries/incremental_sum/incremental_sum.h
@@ -12,19 +12,20 @@ struct tg_incremental_sum {
size_t count;
};
-static inline void tg_incremental_sum_create(RRDR *r, const char *options __maybe_unused) {
- r->time_grouping.data = onewayalloc_callocz(r->internal.owa, 1, sizeof(struct tg_incremental_sum));
-}
-
// resets when switches dimensions
// so, clear everything to restart
static inline void tg_incremental_sum_reset(RRDR *r) {
struct tg_incremental_sum *g = (struct tg_incremental_sum *)r->time_grouping.data;
- g->first = 0;
- g->last = 0;
+ g->first = NAN;
+ g->last = NAN;
g->count = 0;
}
+static inline void tg_incremental_sum_create(RRDR *r, const char *options __maybe_unused) {
+ r->time_grouping.data = onewayalloc_mallocz(r->internal.owa, sizeof(struct tg_incremental_sum));
+ tg_incremental_sum_reset(r);
+}
+
static inline void tg_incremental_sum_free(RRDR *r) {
onewayalloc_freez(r->internal.owa, r->time_grouping.data);
r->time_grouping.data = NULL;
@@ -34,7 +35,11 @@ static inline void tg_incremental_sum_add(RRDR *r, NETDATA_DOUBLE value) {
struct tg_incremental_sum *g = (struct tg_incremental_sum *)r->time_grouping.data;
if(unlikely(!g->count)) {
- g->first = value;
+ if(isnan(g->first))
+ g->first = value;
+ else
+ g->last = value;
+
g->count++;
}
else {
@@ -48,19 +53,16 @@ static inline NETDATA_DOUBLE tg_incremental_sum_flush(RRDR *r, RRDR_VALUE_FLAGS
NETDATA_DOUBLE value;
- if(unlikely(!g->count)) {
+ if(unlikely(!g->count || isnan(g->first) || isnan(g->last))) {
value = 0.0;
*rrdr_value_options_ptr |= RRDR_VALUE_EMPTY;
}
- else if(unlikely(g->count == 1)) {
- value = 0.0;
- }
else {
value = g->last - g->first;
}
- g->first = 0.0;
- g->last = 0.0;
+ g->first = g->last;
+ g->last = NAN;
g->count = 0;
return value;