@cryptotaxi247 / netdata-1 / commits / 0405099ed

lookup at the dictionary names given at each dimension

Costa Tsaousis (ktsaou) committed Dec 9, 2017 at 22:52 UTC 0405099ed7a35719aea638ffb429c89a84260577
1 file changed +25 -19
src/statsd.c
+25 -19
@@ -1194,12 +1194,20 @@ int statsd_readfile(const char *path, const char *filename) {
1194 char *multipler = words[i++];
1195 char *divisor = words[i++];
1196
1197 - if(!pattern && app->dict && (!dim_name || !*dim_name)) {
1198 - dim_name = dictionary_get(app->dict, metric_name);
1199 - }
1197 + if(!pattern) {
1198 + if(app->dict) {
1199 + if(dim_name && *dim_name) {
1200 + char *n = dictionary_get(app->dict, dim_name);
1201 + if(n) dim_name = n;
1202 + }
1203 + else {
1204 + dim_name = dictionary_get(app->dict, metric_name);
1205 + }
1206 + }
1207
1201 - if(!pattern && (!dim_name || !*dim_name))
1202 - dim_name = metric_name;
1208 + if(!dim_name || !*dim_name)
1209 + dim_name = metric_name;
1210 + }
1211
1212 STATSD_APP_CHART_DIM *dim = add_dimension_to_app_chart(
1213 app
@@ -1722,27 +1730,25 @@ static inline void check_if_metric_is_for_app(STATSD_INDEX *index, STATSD_METRIC
1730 STATSD_APP_CHART_DIM *dim;
1731 for(dim = chart->dimensions; dim ; dim = dim->next) {
1732 if(unlikely(dim->metric_pattern)) {
1725 - size_t wildcarded_len = strlen(m->name) + 1;
1733 + size_t dim_name_len = strlen(dim->name);
1734 + size_t wildcarded_len = dim_name_len + strlen(m->name) + 1;
1735 char wildcarded[wildcarded_len];
1727 - if(simple_pattern_matches_extract(dim->metric_pattern, m->name, wildcarded, wildcarded_len)) {
1736
1729 - char *final_name = NULL;
1737 + strcpy(wildcarded, dim->name);
1738 + char *ws = &wildcarded[dim_name_len];
1739
1731 - if(app->dict) {
1732 - // use the name of the metric
1733 - final_name = dictionary_get(app->dict, m->name);
1740 + if(simple_pattern_matches_extract(dim->metric_pattern, m->name, ws, wildcarded_len - dim_name_len)) {
1741
1735 - if(unlikely(!final_name)) {
1736 - // use the name given at the dynamic dimension + the wildcarded string
1737 - size_t key_len = strlen(dim->name) + wildcarded_len + 10;
1738 - char key[key_len + 1];
1742 + char *final_name = NULL;
1743
1740 - snprintfz(key, key_len, "%s%s", dim->name, wildcarded);
1741 - final_name = dictionary_get(app->dict, key);
1744 + if(app->dict) {
1745 + if(likely(*wildcarded)) {
1746 + // use the name of the wildcarded string
1747 + final_name = dictionary_get(app->dict, wildcarded);
1748 }
1749
1744 - if(unlikely(!final_name && *wildcarded)) {
1745 - // use the name of the wildcarded string
1750 + if(unlikely(!final_name)) {
1751 + // use the name of the metric
1752 final_name = dictionary_get(app->dict, m->name);
1753 }
1754 }