|
| 1 | +############################################################################### |
| 2 | +# GENERATED METRICS TESTS |
| 3 | +# ВНИМАНИЕ! Тесты привязаны к metrics_catalog -> metrics-catalog.{{vector_environment}}.yml |
| 4 | +############################################################################### |
| 5 | + |
| 6 | +{% for namespace, metrics in metrics_catalog.metrics.items() -%} |
| 7 | + {%- for metric_name, metric_conf in metrics.items() -%} |
| 8 | + {%- for selector_conf in metric_conf.event_selectors -%} |
| 9 | + |
| 10 | + {%- if selector_conf.testdata is defined -%} |
| 11 | + {%- set metric_namespace = namespace -%}{#- если пустое, то имя метки должно начинаться с _ -#} |
| 12 | + {%- set metric_full_name = metric_namespace + "_" + metric_name -%} |
| 13 | + {%- set selector_index = (loop.index0 | string) -%} |
| 14 | + |
| 15 | + {%- for test_conf in selector_conf.testdata -%} |
| 16 | + {%- set test_index = (loop.index0 | string) -%} |
| 17 | + {%- set test_name = "transforms.metrics-http-accesslog-k8s: check metric " + metric_full_name + "/selector[" + selector_index + "]/test[" + test_index + "]" -%} |
| 18 | + |
| 19 | +[[tests]] |
| 20 | + name = "{{ test_name }}" |
| 21 | + |
| 22 | + [[tests.inputs]] |
| 23 | + insert_at = "metrics-http-accesslog-k8s_exclude_filter" |
| 24 | + type = "log" |
| 25 | + |
| 26 | + {% if not selector_conf.filter.keys() is subset(test_conf.input_values.keys()) %} |
| 27 | +>>> AnsibleTemplateError: Ошибка при генерации кода теста из шаблона. Тест: {{ test_name }}. Ключи из .selector[{{ selector_index}}].filter должны встречаться в selector[{{ selector_index}}]/test[{{test_index}}].input_values. |
| 28 | + {% endif %} |
| 29 | + |
| 30 | + [tests.inputs.log_fields] |
| 31 | + {% for logfield_name, logfield_value in test_conf.input_values.items() -%} |
| 32 | + "{{ logfield_name | replace('"','\\"') | safe }}" = "{{ logfield_value | replace('"','\\"') | safe }}" |
| 33 | + {# newline #} |
| 34 | + {%- endfor %} |
| 35 | + |
| 36 | + [[tests.outputs]] |
| 37 | + extract_from = "metrics-http-accesslog-k8s" |
| 38 | + {# Выводим текст чтобы в случае ошибки конфигурации упасть при валидации #} |
| 39 | + {%- set metric_def_labels = metric_conf.label_logfield_mapping.keys() | sort | join(', ') -%} |
| 40 | + {%- set metric_test_expect_labels = test_conf.expect.label_values.keys() | sort | join(', ') -%} |
| 41 | + {%- set metric_test_labels_ok = (metric_def_labels == metric_test_expect_labels) -%} |
| 42 | + {% if not metric_test_labels_ok %}{# сообщение без переносов должно быть, чтобы при сбое валидации в vector было видно целиком #} |
| 43 | +>>> AnsibleTemplateError: Ошибка при генерации кода теста из шаблона. Тест: {{ test_name }}. Должно быть полное соответствие меток в label_logfield_mapping метрики и label_values теста. Сравните: label_logfield_mapping = [{{ metric_def_labels }}] и selector[{{ selector_index}}]/test[{{test_index}}].expect.label_values = [{{ metric_test_expect_labels }}] |
| 44 | + {% endif %} |
| 45 | + |
| 46 | + [[tests.outputs.conditions]] |
| 47 | + type = "vrl" |
| 48 | + source = ''' |
| 49 | + assert!(!exists(.tags.pod_name)) |
| 50 | + {# проверить имя метрики и перфикса -#} |
| 51 | + assert_eq!(.namespace, "{{ metric_namespace }}") |
| 52 | + assert!(includes([{{ metrics.keys() | map('to_json') | join(', ') }}], "{{ metric_name }}")) |
| 53 | + |
| 54 | + {% for label_name, _ in metric_conf.label_logfield_mapping.items() -%} |
| 55 | + {# проверяем что метрика имеет нужные label -#} |
| 56 | + assert!(exists(.tags.{{ label_name }})) |
| 57 | + {# проверить совпадения значения label метрик по label_logfield_mapping из метрики -#} |
| 58 | + {% if metric_test_labels_ok -%} |
| 59 | + assert_eq!(.tags.{{ label_name }}, "{{ test_conf.expect.label_values[label_name] }}") |
| 60 | + {% else -%} |
| 61 | + ^^ см. AnsibleTemplateError выше по тексту |
| 62 | + {% endif -%} |
| 63 | + {% endfor %} |
| 64 | +{{ "" }} |
| 65 | + ''' |
| 66 | +{# newline #} |
| 67 | + {%- endfor %} |
| 68 | + {%- endif %} |
| 69 | + {%- endfor %} |
| 70 | + {%- endfor %} |
| 71 | +{% endfor %} |
0 commit comments