]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
change custom sizes to custom boundaries
authorSvetlana Shmidt <sshmidt@google.com>
Tue, 28 Jul 2020 11:52:01 +0000 (16:52 +0500)
committerSvetlana Shmidt <sshmidt@google.com>
Tue, 28 Jul 2020 11:52:01 +0000 (16:52 +0500)
src/daemon/distribution.c
src/daemon/distribution.h

index dff2fff9257679a2fb9f83edfa40176e1e445efd..1b05ac183b3a7fd23fd39d9a9501069448561c9e 100644 (file)
@@ -111,30 +111,31 @@ distribution_t* distribution_new_exponential(size_t num_buckets, double initial_
   return build_distribution_from_bucket_array(num_buckets, bucket_array);
 }
 
-distribution_t* distribution_new_custom(size_t num_buckets, double *custom_buckets_sizes) {
-  if (num_buckets == 0) {
-    errno = EINVAL;
-    return NULL;
-  }
-  for (size_t i = 0; i < num_buckets; i++)
-    if (custom_buckets_sizes[i] <= 0) {
+distribution_t* distribution_new_custom(size_t array_size, double *custom_buckets_boundaries) {
+  for (size_t i = 0; i < array_size; i++) {
+    double previous_boundary = 0;
+    if (i > 0)
+      previous_boundary = custom_buckets_boundaries[i - 1];
+    if (custom_buckets_boundaries[i] <= previous_boundary) {
       errno = EINVAL;
       return NULL;
     }
+  }
 
-  bucket_t bucket_array[num_buckets + 1];
-  for (size_t i = 0; i < num_buckets + 1; i++) {
+  size_t num_buckets = array_size + 1;
+  bucket_t bucket_array[num_buckets];
+  for (size_t i = 0; i < num_buckets; i++) {
     bucket_array[i].bucket_counter = 0;
     if (i != 0)
       bucket_array[i].minimum = bucket_array[i - 1].maximum;
     else
       bucket_array[i].minimum = 0;
-    if (i == num_buckets)
+    if (i == num_buckets - 1)
       bucket_array[i].maximum = INFINITY;
     else
-      bucket_array[i].maximum = bucket_array[i].minimum + custom_buckets_sizes[i];
+      bucket_array[i].maximum = custom_buckets_boundaries[i];
   }
-  return build_distribution_from_bucket_array(num_buckets + 1, bucket_array);
+  return build_distribution_from_bucket_array(num_buckets, bucket_array);
 }
 
 void distribution_destroy(distribution_t *d) {
@@ -181,7 +182,7 @@ double distribution_average(distribution_t *dist) {
 }
 
 int main() {
-  double a[] = {3.0, 2.7, 1.0};
+  double a[] = {3.0, 5.7, 6.7};
   distribution_t *p = distribution_new_custom(3, a);
   distribution_update(p, 2);
   distribution_update(p, 5);
index 4c126b27354503c483a76c1fc609844e4154c4bb..8e6706094ef1d73f911146035c780aa884977d0c 100644 (file)
@@ -13,7 +13,7 @@ typedef struct distribution_s distribution_t;
 //constructor functions:
 distribution_t* distribution_new_linear(size_t num_buckets, double size);
 distribution_t* distribution_new_exponential(size_t num_buckets, double initial_size, double factor);
-distribution_t* distribution_new_custom(size_t num_buckets, double *custom_buckets_sizes);
+distribution_t* distribution_new_custom(size_t array_size, double *custom_buckets_boundaries);
 
 void distribution_update(distribution_t *dist, double gauge);
 double distribution_percentile(distribution_t *dist, double percent);