chart dimensions (names, multipliers, divisors, algorithms) are now configurable in the config file
Costa Tsaousis (ktsaou) committed
May 1, 2014 at 06:15 UTC
a87922f070ebd2fdf35532f398c1e09db191530a
1 file changed
+56
-29
netdata.c
+56
-29
@@ -35,11 +35,6 @@
35
#include <inttypes.h>
36
37
38
-#define RRD_DIMENSION_ABSOLUTE 0
39
-#define RRD_DIMENSION_INCREMENTAL 1
40
-#define RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL 2
41
-#define RRD_DIMENSION_PCENT_OVER_ROW_TOTAL 3
42
-
38
#define RRD_TYPE_NET "net"
39
#define RRD_TYPE_NET_LEN strlen(RRD_TYPE_NET)
40
@@ -679,6 +674,47 @@ const char *chart_type_name(int chart_type)
674
}
675
676
677
+// ----------------------------------------------------------------------------
678
+// algorithms types
679
+
680
+#define RRD_DIMENSION_ABSOLUTE 0
681
+#define RRD_DIMENSION_INCREMENTAL 1
682
+#define RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL 2
683
+#define RRD_DIMENSION_PCENT_OVER_ROW_TOTAL 3
684
+
685
+int algorithm_id(const char *name)
686
+{
687
+ if(strcmp(name, "absolute") == 0) return RRD_DIMENSION_ABSOLUTE;
688
+ if(strcmp(name, "incremental") == 0) return RRD_DIMENSION_INCREMENTAL;
689
+ if(strcmp(name, "percentage-of-absolute-row") == 0) return RRD_DIMENSION_PCENT_OVER_ROW_TOTAL;
690
+ if(strcmp(name, "percentage-of-incremental-row") == 0) return RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL;
691
+ return RRD_DIMENSION_ABSOLUTE;
692
+}
693
+
694
+const char *algorithm_name(int chart_type)
695
+{
696
+ static char *absolute = "absolute";
697
+ static char *incremental = "incremental";
698
+ static char *percentage_of_absolute_row = "percentage-of-absolute-row";
699
+ static char *percentage_of_incremental_row = "percentage-of-incremental-row";
700
+
701
+ switch(chart_type) {
702
+ case RRD_DIMENSION_ABSOLUTE:
703
+ return absolute;
704
+
705
+ case RRD_DIMENSION_INCREMENTAL:
706
+ return incremental;
707
+
708
+ case RRD_DIMENSION_PCENT_OVER_ROW_TOTAL:
709
+ return percentage_of_absolute_row;
710
+
711
+ case RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL:
712
+ return percentage_of_incremental_row;
713
+ }
714
+ return absolute;
715
+}
716
+
717
+
718
// ----------------------------------------------------------------------------
719
// FAST NUMBER TO STRING
720
@@ -887,6 +923,20 @@ RRD_DIMENSION *rrd_stats_dimension_add(RRD_STATS *st, const char *id, const char
923
return NULL;
924
}
925
926
+ char varname[RRD_STATS_NAME_MAX + 1];
927
+
928
+ snprintf(varname, RRD_STATS_NAME_MAX, "dim %s name", id);
929
+ name = config_get(st->id, varname, name?name:id);
930
+
931
+ snprintf(varname, RRD_STATS_NAME_MAX, "dim %s algorithm", id);
932
+ algorithm = algorithm_id(config_get(st->id, varname, algorithm_name(algorithm)));
933
+
934
+ snprintf(varname, RRD_STATS_NAME_MAX, "dim %s multiplier", id);
935
+ multiplier = config_get_number(st->id, varname, multiplier);
936
+
937
+ snprintf(varname, RRD_STATS_NAME_MAX, "dim %s divisor", id);
938
+ divisor = config_get_number(st->id, varname, divisor);
939
+
940
rd->entries = st->entries;
941
rd->multiplier = multiplier;
942
rd->divisor = divisor;
@@ -1585,29 +1635,6 @@ unsigned long rrd_stats_one_json(RRD_STATS *st, char *options, struct web_buffer
1635
unsigned long rdmem = sizeof(RRD_DIMENSION) + (sizeof(storage_number) * rd->entries);
1636
memory += rdmem;
1637
1588
- char *algorithm = "";
1589
- switch(rd->algorithm) {
1590
- case RRD_DIMENSION_INCREMENTAL:
1591
- algorithm = "incremental";
1592
- break;
1593
-
1594
- case RRD_DIMENSION_ABSOLUTE:
1595
- algorithm = "absolute";
1596
- break;
1597
-
1598
- case RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL:
1599
- algorithm = "percent on incremental total";
1600
- break;
1601
-
1602
- case RRD_DIMENSION_PCENT_OVER_ROW_TOTAL:
1603
- algorithm = "percent on absolute total";
1604
- break;
1605
-
1606
- default:
1607
- algorithm = "other";
1608
- break;
1609
- }
1610
-
1638
web_buffer_printf(wb,
1639
"\t\t\t\t{\n"
1640
"\t\t\t\t\t\"id\": \"%s\",\n"
@@ -1628,7 +1655,7 @@ unsigned long rrd_stats_one_json(RRD_STATS *st, char *options, struct web_buffer
1655
, rd->name
1656
, rd->entries
1657
, rd->hidden
1631
- , algorithm
1658
+ , algorithm_name(rd->algorithm)
1659
, rd->multiplier
1660
, rd->divisor
1661
, rd->last_updated.tv_sec