]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
add distribution_average()
authorSvetlana Shmidt <sshmidt@google.com>
Mon, 27 Jul 2020 15:29:42 +0000 (20:29 +0500)
committerSvetlana Shmidt <sshmidt@google.com>
Mon, 27 Jul 2020 15:29:42 +0000 (20:29 +0500)
src/daemon/distribution.c

index 6183f95a7deb8d02d3ce7fc7de699d602fab85e6..18746e655d844c31327ffd9c9cd240e97c5b6d56 100644 (file)
@@ -17,6 +17,7 @@ typedef struct bucket_s {
 struct distribution_s {
   bucket_t *tree;
   size_t num_buckets;
+  double total_sum;
 };
 
 size_t left_child_index(size_t node_index, size_t left, size_t right) {
@@ -175,13 +176,18 @@ void update_tree(distribution_t *dist, size_t node_index, size_t left, size_t ri
     update_tree(dist, left_child, left, mid, gauge);
   else
     update_tree(dist, right_child, mid + 1, right, gauge);
-  dist->tree[node_index] = merge_buckets(dist->tree[left_child], dist->tree[right_child]);
+  dist->tree[node_index].bucket_counter++;
 }
 
 void distribution_update(distribution_t *dist, double gauge) {
   if (dist == NULL)
     return;
   update_tree(dist, 0, 0, dist->num_buckets - 1, gauge);
+  dist->total_sum += gauge;
+}
+
+double distribution_average(distribution_t *dist) {
+  return dist->total_sum / dist->tree[0].bucket_counter;
 }
 
 int main() {
@@ -194,5 +200,6 @@ int main() {
   for (size_t i = 0; i < 7; i++) {
     printf("%f %f %llu\n", p->tree[i].minimum, p->tree[i].maximum, p->tree[i].bucket_counter);
   }
+  printf("%f\n", distribution_average(p));
   distribution_destroy(p);
 }
\ No newline at end of file