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