Files
vector/.venv-test/lib/python3.12/site-packages/pygments/lexers/promql.py
T
Sadmin f20080305d feat: ж/д слой + cant_swim в скоринг + профили вне модели
Определение специфических рекомендаций (матрица профилей §8):

1. Ж/д слой (закрыт мёртвый railway ×2.5 у РАС):
   - /api/v1/water/{case_id} отдаёт railway=rail как LineString
     (без service/industrial/military веток), кэш общий v2;
   - railway_warning «перекрыть/проверить немедленно» по профилям;
   - SearchMap: Polyline слой ж/д (тёмно-красный), счётчики 💧/🚂.

2. cant_swim → профиль не_умеет_плавать (water ×3.0, без изменения
   радиуса, critical_warning «обследовать водоёмы НЕМЕДЛЕННО»):
   - раньше чекбокс влиял только на текст, в скоринге был пробел;
   - derive в analyze._derive_profiles — работает и для closed_cases.

3. unmodeled_profiles: ДЦП/слабое зрение/слух — честная пометка
   «вне поведенческой модели» с пояснением (vector_tasks B12:
   профили без аналога не выдавать за учтённые); блок на фронте
   в карточке здоровья.

Площадь воды: сферический эксцесс, проверен на квадрате 53° (744017 м²
vs 743272 точного). Тесты: 202 passed (новый test_cant_swim_profile).
2026-09-09 13:12:55 +03:00

177 lines
4.6 KiB
Python

"""
pygments.lexers.promql
~~~~~~~~~~~~~~~~~~~~~~
Lexer for Prometheus Query Language.
:copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
from pygments.lexer import RegexLexer, bygroups, default, words
from pygments.token import Comment, Keyword, Name, Number, Operator, \
Punctuation, String, Whitespace
__all__ = ["PromQLLexer"]
class PromQLLexer(RegexLexer):
"""
For PromQL queries.
For details about the grammar see:
https://github.com/prometheus/prometheus/tree/master/promql/parser
.. versionadded: 2.7
"""
name = "PromQL"
url = 'https://prometheus.io/docs/prometheus/latest/querying/basics/'
aliases = ["promql"]
filenames = ["*.promql"]
version_added = ''
base_keywords = (
words(
(
"bool",
"by",
"group_left",
"group_right",
"ignoring",
"offset",
"on",
"without",
),
suffix=r"\b",
),
Keyword,
)
aggregator_keywords = (
words(
(
"sum",
"min",
"max",
"avg",
"group",
"stddev",
"stdvar",
"count",
"count_values",
"bottomk",
"topk",
"quantile",
),
suffix=r"\b",
),
Keyword,
)
function_keywords = (
words(
(
"abs",
"absent",
"absent_over_time",
"avg_over_time",
"ceil",
"changes",
"clamp_max",
"clamp_min",
"count_over_time",
"day_of_month",
"day_of_week",
"days_in_month",
"delta",
"deriv",
"exp",
"floor",
"histogram_quantile",
"holt_winters",
"hour",
"idelta",
"increase",
"irate",
"label_join",
"label_replace",
"ln",
"log10",
"log2",
"max_over_time",
"min_over_time",
"minute",
"month",
"predict_linear",
"quantile_over_time",
"rate",
"resets",
"round",
"scalar",
"sort",
"sort_desc",
"sqrt",
"stddev_over_time",
"stdvar_over_time",
"sum_over_time",
"time",
"timestamp",
"vector",
"year",
),
suffix=r"\b",
),
Keyword.Reserved,
)
tokens = {
"root": [
(r"\n", Whitespace),
(r"\s+", Whitespace),
(r",", Punctuation),
# Keywords
base_keywords,
aggregator_keywords,
function_keywords,
# Offsets
(r"[1-9][0-9]*[smhdwy]", String),
# Numbers
(r"-?[0-9]+\.[0-9]+", Number.Float),
(r"-?[0-9]+", Number.Integer),
# Comments
(r"#.*?$", Comment.Single),
# Operators
(r"(\+|\-|\*|\/|\%|\^)", Operator),
(r"==|!=|>=|<=|<|>", Operator),
(r"and|or|unless", Operator.Word),
# Metrics
(r"[_a-zA-Z][a-zA-Z0-9_]+", Name.Variable),
# Params
(r'(["\'])(.*?)(["\'])', bygroups(Punctuation, String, Punctuation)),
# Other states
(r"\(", Operator, "function"),
(r"\)", Operator),
(r"\{", Punctuation, "labels"),
(r"\[", Punctuation, "range"),
],
"labels": [
(r"\}", Punctuation, "#pop"),
(r"\n", Whitespace),
(r"\s+", Whitespace),
(r",", Punctuation),
(r'([_a-zA-Z][a-zA-Z0-9_]*?)(\s*?)(=~|!=|=|!~)(\s*?)("|\')(.*?)("|\')',
bygroups(Name.Label, Whitespace, Operator, Whitespace,
Punctuation, String, Punctuation)),
],
"range": [
(r"\]", Punctuation, "#pop"),
(r"[1-9][0-9]*[smhdwy]", String),
],
"function": [
(r"\)", Operator, "#pop"),
(r"\(", Operator, "#push"),
default("#pop"),
],
}