From d3873bfb2e5299bf3a978ed9b29b9d9eaa87a96e Mon Sep 17 00:00:00 2001 From: Magnus Root Date: Wed, 11 Mar 2026 17:28:19 +0300 Subject: [PATCH] Fix VL --- panels_vl.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/panels_vl.go b/panels_vl.go index 876fb34..b0bb79c 100644 --- a/panels_vl.go +++ b/panels_vl.go @@ -402,13 +402,18 @@ func buildVLMultiSumExpressionTargets(cfg map[string]interface{}, sidQuery strin // ---------- Bucket logs (overview panels) ---------- func buildVLBucketLogsTargets(cfg map[string]interface{}, _ string, _ string, datasourceUID string, _ *DashboardTemplate, _ DomainInfo, _ ClientData) []interface{} { - raw := getString(cfg, "base_query") - // Заменяем Grafana переменные в Lucene формате на LogsQL формат - // SID:({${SID:lucene}}) → SID:in(${SID:csv}) чтобы избежать двойных скобок - raw = strings.ReplaceAll(raw, "SID:(${SID:lucene})", "SID:in(${SID:csv})") - raw = strings.ReplaceAll(raw, "app_name:${app_name:lucene}", "app_name:${app_name}") - raw = strings.ReplaceAll(raw, "response_status_code:${response_status_code:lucene}", "response_status_code:${response_status_code}") - baseQuery := luceneToLogsQL(raw) + // Если есть vl_base_query — используем его напрямую (уже в LogsQL формате) + // Иначе конвертируем base_query из Lucene + var baseQuery string + if vlRaw := getString(cfg, "vl_base_query"); vlRaw != "" { + baseQuery = vlRaw + } else { + raw := getString(cfg, "base_query") + raw = strings.ReplaceAll(raw, "SID:(${SID:lucene})", "SID:in(${SID:csv})") + raw = strings.ReplaceAll(raw, "app_name:${app_name:lucene}", "app_name:${app_name}") + raw = strings.ReplaceAll(raw, "response_status_code:${response_status_code:lucene}", "response_status_code:${response_status_code}") + baseQuery = luceneToLogsQL(raw) + } bucketAggsRaw, _ := cfg["bucket_aggs"].([]interface{}) // Разбираем bucket_aggs чтобы понять по какому полю группировать и top N