Browse Source

filtering out charts in context queries, includes them in full_xxx variables (#13886)

Costa Tsaousis 2 years ago
parent
commit
b8ea0b75eb
1 changed files with 22 additions and 19 deletions
  1. 22 19
      database/rrdcontext.c

+ 22 - 19
database/rrdcontext.c

@@ -2372,7 +2372,8 @@ void query_target_free(void) {
     thread_query_target.hosts.size = 0;
 }
 
-static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED *rma, RRDINSTANCE *ri, bool instance_matches_label_filters) {
+static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED *rma, RRDINSTANCE *ri,
+                                    bool queryable_instance) {
     QUERY_TARGET *qt = qtl->qt;
 
     RRDMETRIC *rm = rrdmetric_acquired_value(rma);
@@ -2385,7 +2386,7 @@ static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED
     }
     qt->metrics.array[qt->metrics.used++] = rrdmetric_acquired_dup(rma);
 
-    if(!instance_matches_label_filters)
+    if(!queryable_instance)
         return;
 
     time_t common_first_time_t = 0;
@@ -2529,7 +2530,7 @@ static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED
     }
 }
 
-static void query_target_add_instance(QUERY_TARGET_LOCALS *qtl, RRDINSTANCE_ACQUIRED *ria) {
+static void query_target_add_instance(QUERY_TARGET_LOCALS *qtl, RRDINSTANCE_ACQUIRED *ria, bool queryable_instance) {
     QUERY_TARGET *qt = qtl->qt;
 
     RRDINSTANCE *ri = rrdinstance_acquired_value(ria);
@@ -2546,24 +2547,24 @@ static void query_target_add_instance(QUERY_TARGET_LOCALS *qtl, RRDINSTANCE_ACQU
     if(qt->db.minimum_latest_update_every == 0 || ri->update_every < qt->db.minimum_latest_update_every)
         qt->db.minimum_latest_update_every = ri->update_every;
 
-    bool instance_matches_label_filters = true;
-    if ((qt->instances.chart_label_key_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.chart_label_key_pattern, ':')) ||
-        (qt->instances.charts_labels_filter_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.charts_labels_filter_pattern, ':')))
-        instance_matches_label_filters = false;
+    if(queryable_instance) {
+        if ((qt->instances.chart_label_key_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.chart_label_key_pattern, ':')) ||
+            (qt->instances.charts_labels_filter_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.charts_labels_filter_pattern, ':')))
+            queryable_instance = false;
+    }
 
     size_t added = 0;
 
     if(unlikely(qt->request.rma)) {
-        query_target_add_metric(qtl, qt->request.rma, ri, instance_matches_label_filters);
+        query_target_add_metric(qtl, qt->request.rma, ri, queryable_instance);
         added++;
     }
     else {
         RRDMETRIC *rm;
-        dfe_start_read(ri->rrdmetrics, rm){
-                    query_target_add_metric(qtl, (RRDMETRIC_ACQUIRED *) rm_dfe.item, ri,
-                                            instance_matches_label_filters);
-                    added++;
-                }
+        dfe_start_read(ri->rrdmetrics, rm) {
+            query_target_add_metric(qtl, (RRDMETRIC_ACQUIRED *) rm_dfe.item, ri, queryable_instance);
+            added++;
+        }
         dfe_done(rm);
     }
 
@@ -2588,23 +2589,25 @@ static void query_target_add_context(QUERY_TARGET_LOCALS *qtl, RRDCONTEXT_ACQUIR
 
     size_t added = 0;
     if(unlikely(qt->request.ria)) {
-        query_target_add_instance(qtl, qt->request.ria);
+        query_target_add_instance(qtl, qt->request.ria, true);
         added++;
     }
     else if(unlikely(qtl->st && qtl->st->rrdcontext == rca && qtl->st->rrdinstance)) {
-        query_target_add_instance(qtl, qtl->st->rrdinstance);
+        query_target_add_instance(qtl, qtl->st->rrdinstance, true);
         added++;
     }
     else {
         RRDINSTANCE *ri;
         dfe_start_read(rc->rrdinstances, ri) {
+            bool queryable_instance = false;
             if(!qt->instances.pattern
                 || (qtl->match_ids   && simple_pattern_matches(qt->instances.pattern, string2str(ri->id)))
                 || (qtl->match_names && simple_pattern_matches(qt->instances.pattern, string2str(ri->name)))
-                ) {
-                query_target_add_instance(qtl, (RRDINSTANCE_ACQUIRED *)ri_dfe.item);
-                added++;
-            }
+                )
+                queryable_instance = true;
+
+            query_target_add_instance(qtl, (RRDINSTANCE_ACQUIRED *)ri_dfe.item, queryable_instance);
+            added++;
         }
         dfe_done(ri);
     }