filtering out charts in context queries, includes them in full_xxx variables (#13886)
Costa Tsaousis committed
Oct 26, 2022 at 18:27 UTC
b8ea0b75eb8747f89bc8380c0ce542a3c939f0f1
1 file changed
+22
-19
database/rrdcontext.c
+22
-19
@@ -2372,7 +2372,8 @@ void query_target_free(void) {
2372
thread_query_target.hosts.size = 0;
2373
}
2374
2375
-static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED *rma, RRDINSTANCE *ri, bool instance_matches_label_filters) {
2375
+static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED *rma, RRDINSTANCE *ri,
2376
+ bool queryable_instance) {
2377
QUERY_TARGET *qt = qtl->qt;
2378
2379
RRDMETRIC *rm = rrdmetric_acquired_value(rma);
@@ -2385,7 +2386,7 @@ static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED
2386
}
2387
qt->metrics.array[qt->metrics.used++] = rrdmetric_acquired_dup(rma);
2388
2388
- if(!instance_matches_label_filters)
2389
+ if(!queryable_instance)
2390
return;
2391
2392
time_t common_first_time_t = 0;
@@ -2529,7 +2530,7 @@ static void query_target_add_metric(QUERY_TARGET_LOCALS *qtl, RRDMETRIC_ACQUIRED
2530
}
2531
}
2532
2532
-static void query_target_add_instance(QUERY_TARGET_LOCALS *qtl, RRDINSTANCE_ACQUIRED *ria) {
2533
+static void query_target_add_instance(QUERY_TARGET_LOCALS *qtl, RRDINSTANCE_ACQUIRED *ria, bool queryable_instance) {
2534
QUERY_TARGET *qt = qtl->qt;
2535
2536
RRDINSTANCE *ri = rrdinstance_acquired_value(ria);
@@ -2546,24 +2547,24 @@ static void query_target_add_instance(QUERY_TARGET_LOCALS *qtl, RRDINSTANCE_ACQU
2547
if(qt->db.minimum_latest_update_every == 0 || ri->update_every < qt->db.minimum_latest_update_every)
2548
qt->db.minimum_latest_update_every = ri->update_every;
2549
2549
- bool instance_matches_label_filters = true;
2550
- if ((qt->instances.chart_label_key_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.chart_label_key_pattern, ':')) ||
2551
- (qt->instances.charts_labels_filter_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.charts_labels_filter_pattern, ':')))
2552
- instance_matches_label_filters = false;
2550
+ if(queryable_instance) {
2551
+ if ((qt->instances.chart_label_key_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.chart_label_key_pattern, ':')) ||
2552
+ (qt->instances.charts_labels_filter_pattern && !rrdlabels_match_simple_pattern_parsed(ri->rrdlabels, qt->instances.charts_labels_filter_pattern, ':')))
2553
+ queryable_instance = false;
2554
+ }
2555
2556
size_t added = 0;
2557
2558
if(unlikely(qt->request.rma)) {
2557
- query_target_add_metric(qtl, qt->request.rma, ri, instance_matches_label_filters);
2559
+ query_target_add_metric(qtl, qt->request.rma, ri, queryable_instance);
2560
added++;
2561
}
2562
else {
2563
RRDMETRIC *rm;
2562
- dfe_start_read(ri->rrdmetrics, rm){
2563
- query_target_add_metric(qtl, (RRDMETRIC_ACQUIRED *) rm_dfe.item, ri,
2564
- instance_matches_label_filters);
2565
- added++;
2566
- }
2564
+ dfe_start_read(ri->rrdmetrics, rm) {
2565
+ query_target_add_metric(qtl, (RRDMETRIC_ACQUIRED *) rm_dfe.item, ri, queryable_instance);
2566
+ added++;
2567
+ }
2568
dfe_done(rm);
2569
}
2570
@@ -2588,23 +2589,25 @@ static void query_target_add_context(QUERY_TARGET_LOCALS *qtl, RRDCONTEXT_ACQUIR
2589
2590
size_t added = 0;
2591
if(unlikely(qt->request.ria)) {
2591
- query_target_add_instance(qtl, qt->request.ria);
2592
+ query_target_add_instance(qtl, qt->request.ria, true);
2593
added++;
2594
}
2595
else if(unlikely(qtl->st && qtl->st->rrdcontext == rca && qtl->st->rrdinstance)) {
2595
- query_target_add_instance(qtl, qtl->st->rrdinstance);
2596
+ query_target_add_instance(qtl, qtl->st->rrdinstance, true);
2597
added++;
2598
}
2599
else {
2600
RRDINSTANCE *ri;
2601
dfe_start_read(rc->rrdinstances, ri) {
2602
+ bool queryable_instance = false;
2603
if(!qt->instances.pattern
2604
|| (qtl->match_ids && simple_pattern_matches(qt->instances.pattern, string2str(ri->id)))
2605
|| (qtl->match_names && simple_pattern_matches(qt->instances.pattern, string2str(ri->name)))
2604
- ) {
2605
- query_target_add_instance(qtl, (RRDINSTANCE_ACQUIRED *)ri_dfe.item);
2606
- added++;
2607
- }
2606
+ )
2607
+ queryable_instance = true;
2608
+
2609
+ query_target_add_instance(qtl, (RRDINSTANCE_ACQUIRED *)ri_dfe.item, queryable_instance);
2610
+ added++;
2611
}
2612
dfe_done(ri);
2613
}