This commit is contained in:
Magnus Root 2026-03-10 17:37:02 +03:00
parent 118c511e77
commit a2988a88fb

View file

@ -58,6 +58,8 @@ func makeVLTargetWithType(refID, expr, datasourceUID, legendFormat, queryType st
// luceneToLogsQL конвертирует базовый Lucene-запрос в LogsQL. // luceneToLogsQL конвертирует базовый Lucene-запрос в LogsQL.
// Поддерживает: AND→пробел, SID:(a OR b)→SID:in(a,b), field:[X TO Y]→field:>=X AND field:<=Y // Поддерживает: AND→пробел, SID:(a OR b)→SID:in(a,b), field:[X TO Y]→field:>=X AND field:<=Y
func luceneToLogsQL(q string) string { func luceneToLogsQL(q string) string {
// Убираем Lucene-экранирование — заменяем все \X на X
q = unescapeLucene(q)
// AND → пробел (LogsQL использует пробел как AND) // AND → пробел (LogsQL использует пробел как AND)
q = strings.ReplaceAll(q, " AND ", " ") q = strings.ReplaceAll(q, " AND ", " ")
@ -449,3 +451,20 @@ func buildVLBucketLogsTargets(cfg map[string]interface{}, _ string, _ string, da
makeVLStatsTarget("A", expr, datasourceUID, legendFormat), makeVLStatsTarget("A", expr, datasourceUID, legendFormat),
} }
} }
// unescapeLucene убирает Lucene-экранирование символов вида \X → X
func unescapeLucene(q string) string {
var result strings.Builder
i := 0
for i < len(q) {
if q[i] == '\\' && i+1 < len(q) {
// Пропускаем обратный слеш, берём следующий символ как есть
result.WriteByte(q[i+1])
i += 2
} else {
result.WriteByte(q[i])
i++
}
}
return result.String()
}