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
}