@cryptotaxi247 / netdata-1 / commits / 62ec8b418

dimensions should also be referred as context.dimension under the same family

Costa Tsaousis (ktsaou) committed Nov 12, 2016 at 19:41 UTC 62ec8b418c1884452024e19f919dabbf0d0da724
2 files changed +52 -25
src/health.c
+44 -21
@@ -520,6 +520,9 @@ static inline RRDVAR *rrdvar_create_and_index(const char *scope, avl_tree_lock *
520 else {
521 // already exists
522 freez(variable);
523 +
524 + // this is important
525 + // it must return NULL - not the existing variable - or double-free will happen
526 rv = NULL;
527 }
528
@@ -722,6 +725,12 @@ RRDDIMVAR *rrddimvar_create(RRDDIM *rd, int type, const char *prefix, const char
725 snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", rd->rrdset->id, rs->name);
726 rs->fullidname = strdupz(buffer);
727
728 + snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", rd->rrdset->context, rs->id);
729 + rs->contextid = strdupz(buffer);
730 +
731 + snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", rd->rrdset->context, rs->name);
732 + rs->contextname = strdupz(buffer);
733 +
734 snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", rd->rrdset->name, rs->id);
735 rs->fullnameid = strdupz(buffer);
736
@@ -733,16 +742,18 @@ RRDDIMVAR *rrddimvar_create(RRDDIM *rd, int type, const char *prefix, const char
742 rs->options = options;
743 rs->rrddim = rd;
744
736 - rs->local_id = rrdvar_create_and_index("local", &st->variables_root_index, rs->id, rs->type, rs->value);
737 - rs->local_name = rrdvar_create_and_index("local", &st->variables_root_index, rs->name, rs->type, rs->value);
745 + rs->local_id = rrdvar_create_and_index("local", &st->variables_root_index, rs->id, rs->type, rs->value);
746 + rs->local_name = rrdvar_create_and_index("local", &st->variables_root_index, rs->name, rs->type, rs->value);
747
739 - rs->family_id = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->id, rs->type, rs->value);
740 - rs->family_name = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->name, rs->type, rs->value);
748 + rs->family_id = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->id, rs->type, rs->value);
749 + rs->family_name = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->name, rs->type, rs->value);
750 + rs->family_contextid = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->contextid, rs->type, rs->value);
751 + rs->family_contextname = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->contextname, rs->type, rs->value);
752
742 - rs->host_fullidid = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullidid, rs->type, rs->value);
743 - rs->host_fullidname = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullidname, rs->type, rs->value);
744 - rs->host_fullnameid = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullnameid, rs->type, rs->value);
745 - rs->host_fullnamename = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullnamename, rs->type, rs->value);
753 + rs->host_fullidid = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullidid, rs->type, rs->value);
754 + rs->host_fullidname = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullidname, rs->type, rs->value);
755 + rs->host_fullnameid = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullnameid, rs->type, rs->value);
756 + rs->host_fullnamename = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullnamename, rs->type, rs->value);
757
758 rs->next = rd->variables;
759 rd->variables = rs;
@@ -762,35 +773,42 @@ void rrddimvar_rename_all(RRDDIM *rd) {
773 char buffer[RRDDIMVAR_ID_MAX + 1];
774 // name changed
775
765 - // name
776 + // name and family name
777 rrdvar_free(st->rrdhost, &st->variables_root_index, rs->local_name);
778 + rrdvar_free(st->rrdhost, &st->rrdfamily->variables_root_index, rs->family_name);
779 freez(rs->name);
780 snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s%s%s", rs->prefix, rd->name, rs->suffix);
781 rs->name = strdupz(buffer);
770 - rs->local_name = rrdvar_create_and_index("local", &st->variables_root_index, rs->name, rs->type, rs->value);
782 + rs->local_name = rrdvar_create_and_index("local", &st->variables_root_index, rs->name, rs->type, rs->value);
783 + rs->family_name = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->name, rs->type, rs->value);
784 +
785 + // family_contextname
786 + rrdvar_free(st->rrdhost, &st->rrdhost->variables_root_index, rs->family_contextname);
787 + freez(rs->contextname);
788 + snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", rd->rrdset->context, rs->name);
789 + rs->contextname = strdupz(buffer);
790 + rs->family_contextname = rrdvar_create_and_index("family", &st->rrdfamily->variables_root_index, rs->contextname, rs->type, rs->value);
791
792 + // fullidname
793 rrdvar_free(st->rrdhost, &st->rrdhost->variables_root_index, rs->host_fullidname);
794 freez(rs->fullidname);
795 snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", st->id, rs->name);
796 rs->fullidname = strdupz(buffer);
776 - rs->host_fullidname = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index,
777 - rs->fullidname, rs->type, rs->value);
797 + rs->host_fullidname = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullidname, rs->type, rs->value);
798
799 // fullnameid
800 rrdvar_free(st->rrdhost, &st->rrdhost->variables_root_index, rs->host_fullnameid);
801 freez(rs->fullnameid);
802 snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", st->name, rs->id);
803 rs->fullnameid = strdupz(buffer);
784 - rs->host_fullnameid = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index,
785 - rs->fullnameid, rs->type, rs->value);
804 + rs->host_fullnameid = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullnameid, rs->type, rs->value);
805
806 // fullnamename
807 rrdvar_free(st->rrdhost, &st->rrdhost->variables_root_index, rs->host_fullnamename);
808 freez(rs->fullnamename);
809 snprintfz(buffer, RRDDIMVAR_ID_MAX, "%s.%s", st->name, rs->name);
810 rs->fullnamename = strdupz(buffer);
792 - rs->host_fullnamename = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index,
793 - rs->fullnamename, rs->type, rs->value);
811 + rs->host_fullnamename = rrdvar_create_and_index("host", &st->rrdhost->variables_root_index, rs->fullnamename, rs->type, rs->value);
812 }
813 }
814 }
@@ -805,6 +823,8 @@ void rrddimvar_free(RRDDIMVAR *rs) {
823
824 rrdvar_free(st->rrdhost, &st->rrdfamily->variables_root_index, rs->family_id);
825 rrdvar_free(st->rrdhost, &st->rrdfamily->variables_root_index, rs->family_name);
826 + rrdvar_free(st->rrdhost, &st->rrdfamily->variables_root_index, rs->family_contextid);
827 + rrdvar_free(st->rrdhost, &st->rrdfamily->variables_root_index, rs->family_contextname);
828
829 rrdvar_free(st->rrdhost, &st->rrdhost->variables_root_index, rs->host_fullidid);
830 rrdvar_free(st->rrdhost, &st->rrdhost->variables_root_index, rs->host_fullidname);
@@ -827,6 +847,8 @@ void rrddimvar_free(RRDDIMVAR *rs) {
847 freez(rs->suffix);
848 freez(rs->id);
849 freez(rs->name);
850 + freez(rs->contextid);
851 + freez(rs->contextname);
852 freez(rs->fullidid);
853 freez(rs->fullidname);
854 freez(rs->fullnameid);
@@ -2722,23 +2744,24 @@ void *health_main(void *ptr) {
2744
2745 rc->value = NAN;
2746
2725 - debug(D_HEALTH, "Health alarm '%s.%s': failed to evaluate calculation with error: %s",
2726 - rc->chart?rc->chart:"NOCHART", rc->name, buffer_tostring(rc->calculation->error_msg));
2747 + debug(D_HEALTH, "Health alarm '%s.%s': expression '%s' failed: %s",
2748 + rc->chart?rc->chart:"NOCHART", rc->name, rc->calculation->parsed_as, buffer_tostring(rc->calculation->error_msg));
2749
2750 if (unlikely(!(rc->rrdcalc_flags & RRDCALC_FLAG_CALC_ERROR))) {
2751 rc->rrdcalc_flags |= RRDCALC_FLAG_CALC_ERROR;
2730 - error("Health alarm '%s.%s': failed to evaluate calculation with error: %s",
2731 - rc->chart?rc->chart:"NOCHART", rc->name, buffer_tostring(rc->calculation->error_msg));
2752 + error("Health alarm '%s.%s': expression '%s' failed: %s",
2753 + rc->chart?rc->chart:"NOCHART", rc->name, rc->calculation->parsed_as, buffer_tostring(rc->calculation->error_msg));
2754 }
2755 }
2756 else {
2757 if (unlikely(rc->rrdcalc_flags & RRDCALC_FLAG_CALC_ERROR))
2758 rc->rrdcalc_flags &= ~RRDCALC_FLAG_CALC_ERROR;
2759
2738 - debug(D_HEALTH, "Health alarm '%s.%s': calculation expression gave value "
2760 + debug(D_HEALTH, "Health alarm '%s.%s': expression '%s' gave value "
2761 CALCULATED_NUMBER_FORMAT
2762 ": %s (source: %s)",
2763 rc->chart?rc->chart:"NOCHART", rc->name,
2764 + rc->calculation->parsed_as,
2765 rc->calculation->result,
2766 buffer_tostring(rc->calculation->error_msg),
2767 rc->source
src/health.h
+8 -4
@@ -66,10 +66,12 @@ typedef struct rrddimvar {
66
67 char *id; // dimension id
68 char *name; // dimension name
69 - char *fullidid; // chart type.chart id.dimension id
70 - char *fullidname; // chart type.chart id.dimension name
71 - char *fullnameid; // chart type.chart name.dimension id
72 - char *fullnamename; // chart type.chart name.dimension name
69 + char *contextid; // context + dimension id
70 + char *contextname; // context + dimension name
71 + char *fullidid; // chart type.chart id + dimension id
72 + char *fullidname; // chart type.chart id + dimension name
73 + char *fullnameid; // chart type.chart name + dimension id
74 + char *fullnamename; // chart type.chart name + dimension name
75
76 int type;
77 void *value;
@@ -81,6 +83,8 @@ typedef struct rrddimvar {
83
84 RRDVAR *family_id;
85 RRDVAR *family_name;
86 + RRDVAR *family_contextid;
87 + RRDVAR *family_contextname;
88
89 RRDVAR *host_fullidid;
90 RRDVAR *host_fullidname;