sum.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_API_QUERY_SUM_H
  3. #define NETDATA_API_QUERY_SUM_H
  4. #include "../query.h"
  5. #include "../rrdr.h"
  6. struct tg_sum {
  7. NETDATA_DOUBLE sum;
  8. size_t count;
  9. };
  10. static inline void tg_sum_create(RRDR *r, const char *options __maybe_unused) {
  11. r->time_grouping.data = onewayalloc_callocz(r->internal.owa, 1, sizeof(struct tg_sum));
  12. }
  13. // resets when switches dimensions
  14. // so, clear everything to restart
  15. static inline void tg_sum_reset(RRDR *r) {
  16. struct tg_sum *g = (struct tg_sum *)r->time_grouping.data;
  17. g->sum = 0;
  18. g->count = 0;
  19. }
  20. static inline void tg_sum_free(RRDR *r) {
  21. onewayalloc_freez(r->internal.owa, r->time_grouping.data);
  22. r->time_grouping.data = NULL;
  23. }
  24. static inline void tg_sum_add(RRDR *r, NETDATA_DOUBLE value) {
  25. struct tg_sum *g = (struct tg_sum *)r->time_grouping.data;
  26. g->sum += value;
  27. g->count++;
  28. }
  29. static inline NETDATA_DOUBLE tg_sum_flush(RRDR *r, RRDR_VALUE_FLAGS *rrdr_value_options_ptr) {
  30. struct tg_sum *g = (struct tg_sum *)r->time_grouping.data;
  31. NETDATA_DOUBLE value;
  32. if(unlikely(!g->count)) {
  33. value = 0.0;
  34. *rrdr_value_options_ptr |= RRDR_VALUE_EMPTY;
  35. }
  36. else {
  37. value = g->sum;
  38. }
  39. g->sum = 0.0;
  40. g->count = 0;
  41. return value;
  42. }
  43. #endif //NETDATA_API_QUERY_SUM_H