summaryrefslogtreecommitdiffstats
path: root/web/api/queries
diff options
context:
space:
mode:
Diffstat (limited to 'web/api/queries')
-rw-r--r--web/api/queries/query.c20
-rw-r--r--web/api/queries/rrdr.h3
2 files changed, 19 insertions, 4 deletions
diff --git a/web/api/queries/query.c b/web/api/queries/query.c
index 56e2e2850..216417ae8 100644
--- a/web/api/queries/query.c
+++ b/web/api/queries/query.c
@@ -389,6 +389,7 @@ static inline void do_dimension_variablestep(
, long dim_id_in_rrdr
, time_t after_wanted
, time_t before_wanted
+ , uint32_t options
){
// RRDSET *st = r->st;
@@ -445,7 +446,11 @@ static inline void do_dimension_variablestep(
// db_now has a different value than above
if (likely(now >= db_now)) {
if (likely(does_storage_number_exist(n_curr))) {
- value = unpack_storage_number(n_curr);
+ if (options & RRDR_OPTION_ANOMALY_BIT)
+ value = (n_curr & SN_ANOMALY_BIT) ? 0.0 : 100.0;
+ else
+ value = unpack_storage_number(n_curr);
+
if (likely(value != 0.0))
values_in_group_non_zero++;
@@ -530,8 +535,11 @@ static inline void do_dimension_fixedstep(
, long dim_id_in_rrdr
, time_t after_wanted
, time_t before_wanted
+ , uint32_t options
){
+#ifdef NETDATA_INTERNAL_CHECKS
RRDSET *st = r->st;
+#endif
time_t
now = after_wanted,
@@ -593,7 +601,11 @@ static inline void do_dimension_fixedstep(
error("INTERNAL CHECK: Unaligned query for %s, database time: %ld, expected time: %ld", rd->id, (long)handle.rrdeng.now, (long)now);
}
#endif
- value = unpack_storage_number(n);
+ if (options & RRDR_OPTION_ANOMALY_BIT)
+ value = (n & SN_ANOMALY_BIT) ? 0.0 : 100.0;
+ else
+ value = unpack_storage_number(n);
+
if(likely(value != 0.0))
values_in_group_non_zero++;
@@ -1100,6 +1112,7 @@ static RRDR *rrd2rrdr_fixedstep(
, c
, after_wanted
, before_wanted
+ , options
);
if(r->od[c] & RRDR_DIMENSION_NONZERO)
@@ -1476,6 +1489,7 @@ static RRDR *rrd2rrdr_variablestep(
, c
, after_wanted
, before_wanted
+ , options
);
if(r->od[c] & RRDR_DIMENSION_NONZERO)
@@ -1644,4 +1658,4 @@ RRDR *rrd2rrdr(
return rrd2rrdr_fixedstep(st, points_requested, after_requested, before_requested, group_method,
resampling_time_requested, options, dimensions,
rrd_update_every, first_entry_t, last_entry_t, absolute_period_requested, context_param_list);
-} \ No newline at end of file
+}
diff --git a/web/api/queries/rrdr.h b/web/api/queries/rrdr.h
index b302f8bd4..3637df687 100644
--- a/web/api/queries/rrdr.h
+++ b/web/api/queries/rrdr.h
@@ -24,6 +24,7 @@ typedef enum rrdr_options {
RRDR_OPTION_MATCH_NAMES = 0x00008000, // when filtering dimensions, match only names
RRDR_OPTION_CUSTOM_VARS = 0x00010000, // when wrapping response in a JSON, return custom variables in response
RRDR_OPTION_ALLOW_PAST = 0x00020000, // The after parameter can extend in the past before the first entry
+ RRDR_OPTION_ANOMALY_BIT = 0x00040000, // Return the anomaly bit stored in each collected_number
} RRDR_OPTIONS;
typedef enum rrdr_value_flag {
@@ -99,7 +100,7 @@ typedef struct rrdresult {
#define rrdr_rows(r) ((r)->rows)
-#include "../../../database/rrd.h"
+#include "database/rrd.h"
extern void rrdr_free(RRDR *r);
extern RRDR *rrdr_create(struct rrdset *st, long n, struct context_param *context_param_list);