diff options
Diffstat (limited to 'web/api/queries/countif')
-rw-r--r-- | web/api/queries/countif/Makefile.am | 8 | ||||
-rw-r--r-- | web/api/queries/countif/README.md | 40 | ||||
-rw-r--r-- | web/api/queries/countif/countif.c | 7 | ||||
-rw-r--r-- | web/api/queries/countif/countif.h | 148 |
4 files changed, 0 insertions, 203 deletions
diff --git a/web/api/queries/countif/Makefile.am b/web/api/queries/countif/Makefile.am deleted file mode 100644 index 161784b8..00000000 --- a/web/api/queries/countif/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later - -AUTOMAKE_OPTIONS = subdir-objects -MAINTAINERCLEANFILES = $(srcdir)/Makefile.in - -dist_noinst_DATA = \ - README.md \ - $(NULL) diff --git a/web/api/queries/countif/README.md b/web/api/queries/countif/README.md deleted file mode 100644 index 4004e7a2..00000000 --- a/web/api/queries/countif/README.md +++ /dev/null @@ -1,40 +0,0 @@ -<!-- -title: "CountIf" -sidebar_label: "CountIf" -custom_edit_url: https://github.com/netdata/netdata/edit/master/web/api/queries/countif/README.md -learn_status: "Published" -learn_topic_type: "References" -learn_rel_path: "Developers/Web/Api/Queries" ---> - -# CountIf - -> This query is available as `countif`. - -CountIf returns the percentage of points in the database that satisfy the condition supplied. - -The following conditions are available: - -- `!` or `!=` or `<>`, different than -- `=` or `:`, equal to -- `>`, greater than -- `<`, less than -- `>=`, greater or equal to -- `<=`, less or equal to - -The target number and the desired condition can be set using the `group_options` query parameter, as a string, like in these examples: - -- `!0`, to match any number except zero. -- `>=-3` to match any number bigger or equal to -3. - -. When an invalid condition is given, the web server can deliver a not accurate response. - -## how to use - -This query cannot be used in alerts. - -`countif` changes the units of charts. The result of the calculation is always from zero to 1, expressing the percentage of database points that matched the condition. - -In APIs and badges can be used like this: `&group=countif&group_options=>10` in the URL. - - diff --git a/web/api/queries/countif/countif.c b/web/api/queries/countif/countif.c deleted file mode 100644 index 8a3a1f50..00000000 --- a/web/api/queries/countif/countif.c +++ /dev/null @@ -1,7 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "countif.h" - -// ---------------------------------------------------------------------------- -// countif - diff --git a/web/api/queries/countif/countif.h b/web/api/queries/countif/countif.h deleted file mode 100644 index 896b9d87..00000000 --- a/web/api/queries/countif/countif.h +++ /dev/null @@ -1,148 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef NETDATA_API_QUERY_COUNTIF_H -#define NETDATA_API_QUERY_COUNTIF_H - -#include "../query.h" -#include "../rrdr.h" - -enum tg_countif_cmp { - TG_COUNTIF_EQUAL, - TG_COUNTIF_NOTEQUAL, - TG_COUNTIF_LESS, - TG_COUNTIF_LESSEQUAL, - TG_COUNTIF_GREATER, - TG_COUNTIF_GREATEREQUAL, -}; - -struct tg_countif { - enum tg_countif_cmp comparison; - NETDATA_DOUBLE target; - size_t count; - size_t matched; -}; - -static inline void tg_countif_create(RRDR *r, const char *options __maybe_unused) { - struct tg_countif *g = onewayalloc_callocz(r->internal.owa, 1, sizeof(struct tg_countif)); - r->time_grouping.data = g; - - if(options && *options) { - // skip any leading spaces - while(isspace(*options)) options++; - - // find the comparison function - switch(*options) { - case '!': - options++; - if(*options != '=' && *options != ':') - options--; - g->comparison = TG_COUNTIF_NOTEQUAL; - break; - - case '>': - options++; - if(*options == '=' || *options == ':') { - g->comparison = TG_COUNTIF_GREATEREQUAL; - } - else { - options--; - g->comparison = TG_COUNTIF_GREATER; - } - break; - - case '<': - options++; - if(*options == '>') { - g->comparison = TG_COUNTIF_NOTEQUAL; - } - else if(*options == '=' || *options == ':') { - g->comparison = TG_COUNTIF_LESSEQUAL; - } - else { - options--; - g->comparison = TG_COUNTIF_LESS; - } - break; - - default: - case '=': - case ':': - g->comparison = TG_COUNTIF_EQUAL; - break; - } - if(*options) options++; - - // skip everything up to the first digit - while(isspace(*options)) options++; - - g->target = str2ndd(options, NULL); - } - else { - g->target = 0.0; - g->comparison = TG_COUNTIF_EQUAL; - } -} - -// resets when switches dimensions -// so, clear everything to restart -static inline void tg_countif_reset(RRDR *r) { - struct tg_countif *g = (struct tg_countif *)r->time_grouping.data; - g->matched = 0; - g->count = 0; -} - -static inline void tg_countif_free(RRDR *r) { - onewayalloc_freez(r->internal.owa, r->time_grouping.data); - r->time_grouping.data = NULL; -} - -static inline void tg_countif_add(RRDR *r, NETDATA_DOUBLE value) { - struct tg_countif *g = (struct tg_countif *)r->time_grouping.data; - switch(g->comparison) { - case TG_COUNTIF_GREATER: - if(value > g->target) g->matched++; - break; - - case TG_COUNTIF_GREATEREQUAL: - if(value >= g->target) g->matched++; - break; - - case TG_COUNTIF_LESS: - if(value < g->target) g->matched++; - break; - - case TG_COUNTIF_LESSEQUAL: - if(value <= g->target) g->matched++; - break; - - case TG_COUNTIF_EQUAL: - if(value == g->target) g->matched++; - break; - - case TG_COUNTIF_NOTEQUAL: - if(value != g->target) g->matched++; - break; - } - g->count++; -} - -static inline NETDATA_DOUBLE tg_countif_flush(RRDR *r, RRDR_VALUE_FLAGS *rrdr_value_options_ptr) { - struct tg_countif *g = (struct tg_countif *)r->time_grouping.data; - - NETDATA_DOUBLE value; - - if(unlikely(!g->count)) { - value = 0.0; - *rrdr_value_options_ptr |= RRDR_VALUE_EMPTY; - } - else { - value = (NETDATA_DOUBLE)g->matched * 100 / (NETDATA_DOUBLE)g->count; - } - - g->matched = 0; - g->count = 0; - - return value; -} - -#endif //NETDATA_API_QUERY_COUNTIF_H |