summaryrefslogtreecommitdiffstats
path: root/.github/scripts/analytics
diff options
context:
space:
mode:
authorKirill Rysin <[email protected]>2025-10-02 12:37:24 +0200
committerGitHub <[email protected]>2025-10-02 10:37:24 +0000
commit8ba1afcee952ab9b484ce656b42e6c78e08696ea (patch)
tree058a3b564db99a70de26bec0aa1a04bc2e986cee /.github/scripts/analytics
parent0bf38aa928934c9db08c6a173cbe6e80954d2f8f (diff)
Nemesis: send build and sanitizer to db (#26193)
Diffstat (limited to '.github/scripts/analytics')
-rw-r--r--.github/scripts/analytics/data_mart_queries/stability_aggregate_mart.sql29
-rw-r--r--.github/scripts/analytics/data_mart_queries/stability_per_run_mart.sql27
2 files changed, 49 insertions, 7 deletions
diff --git a/.github/scripts/analytics/data_mart_queries/stability_aggregate_mart.sql b/.github/scripts/analytics/data_mart_queries/stability_aggregate_mart.sql
index ea277053772..5298915448b 100644
--- a/.github/scripts/analytics/data_mart_queries/stability_aggregate_mart.sql
+++ b/.github/scripts/analytics/data_mart_queries/stability_aggregate_mart.sql
@@ -93,9 +93,9 @@ $all_possible_tests = SELECT
CAST(JSON_VALUE(s.Stats, '$.nodes_with_issues') AS Int32) AS NodesWithIssues,
-- Ошибки и диагностика
- JSON_VALUE(s.Stats, '$.node_error_messages') AS NodeErrorMessages, -- JSON массив с подробностями ошибок нод
- JSON_VALUE(s.Stats, '$.workload_error_messages') AS WorkloadErrorMessages, -- JSON массив с ошибками workload
- JSON_VALUE(s.Stats, '$.workload_warning_messages') AS WorkloadWarningMessages, -- JSON массив с предупреждениями workload
+ JSON_QUERY(s.Stats, '$.node_error_messages') AS NodeErrorMessages, -- JSON массив с подробностями ошибок нод
+ JSON_QUERY(s.Stats, '$.workload_error_messages') AS WorkloadErrorMessages, -- JSON массив с ошибками workload
+ JSON_QUERY(s.Stats, '$.workload_warning_messages') AS WorkloadWarningMessages, -- JSON массив с предупреждениями workload
-- Настройки теста
CASE WHEN JSON_VALUE(s.Stats, '$.use_iterations') = 'true' THEN 1U ELSE 0U END AS UseIterations,
@@ -133,7 +133,7 @@ $all_possible_tests = SELECT
ELSE NULL
END AS ClusterMonitoring,
CAST(JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.cluster.nodes_count') AS Int32) AS NodesCount,
- JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.cluster.nodes_info') AS NodesInfo, -- JSON массив с информацией о нодах
+ JSON_QUERY(COALESCE(s.Info, v.VerificationInfo), '$.cluster.nodes_info') AS NodesInfo, -- JSON массив с информацией о нодах
JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.ci_version') AS CiVersion,
JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.test_tools_version') AS TestToolsVersion,
JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.report_url') AS ReportUrl,
@@ -143,6 +143,8 @@ $all_possible_tests = SELECT
JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.ci_job_title') AS CiJobTitle,
JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.ci_cluster_name') AS CiClusterName,
JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.ci_nemesis') AS CiNemesis,
+ JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.ci_build_type') AS CiBuildType,
+ JSON_VALUE(COALESCE(s.Info, v.VerificationInfo), '$.ci_sanitizer') AS CiSanitizer,
-- Флаг того, что тест имел успешную верификацию
v.VerificationSuccess AS HadVerification,
@@ -228,6 +230,8 @@ SELECT
agg.CiJobTitle,
agg.CiClusterName,
agg.CiNemesis,
+ agg.CiBuildType,
+ agg.CiSanitizer,
agg.HadVerification,
agg.OrderInRun,
@@ -252,6 +256,23 @@ SELECT
ELSE NULL
END AS DurationRatio,
+ -- Типы найденных ошибок нод (анализ node_error_messages)
+ CASE
+ WHEN agg.NodeErrorMessages IS NULL OR CAST(agg.NodeErrorMessages AS String) = '[]' OR CAST(agg.NodeErrorMessages AS String) = '' THEN NULL
+ ELSE
+ ListConcat(
+ ListUniq(
+ ListNotNull(AsList(
+ CASE WHEN CAST(agg.NodeErrorMessages AS String) LIKE '%coredump%' THEN 'Coredump' ELSE NULL END,
+ CASE WHEN CAST(agg.NodeErrorMessages AS String) LIKE '%OOM%' OR CAST(agg.NodeErrorMessages AS String) LIKE '%experienced OOM%' THEN 'OOM' ELSE NULL END,
+ CASE WHEN CAST(agg.NodeErrorMessages AS String) LIKE '%VERIFY%' OR CAST(agg.NodeErrorMessages AS String) LIKE '%verify%' THEN 'Verify' ELSE NULL END,
+ CASE WHEN CAST(agg.NodeErrorMessages AS String) LIKE '%SAN%' OR CAST(agg.NodeErrorMessages AS String) LIKE '%sanitizer%' THEN 'SAN' ELSE NULL END
+ ))
+ ),
+ ', '
+ )
+ END AS FacedNodeErrors,
+
-- Общий статус выполнения
CASE
WHEN agg.IsCrashed = 1U AND agg.HadVerification = 0U THEN 'cluster_down_on_start' -- _Verification есть, но Success != 1
diff --git a/.github/scripts/analytics/data_mart_queries/stability_per_run_mart.sql b/.github/scripts/analytics/data_mart_queries/stability_per_run_mart.sql
index db9a615d5ed..43fd8e9613f 100644
--- a/.github/scripts/analytics/data_mart_queries/stability_per_run_mart.sql
+++ b/.github/scripts/analytics/data_mart_queries/stability_per_run_mart.sql
@@ -19,9 +19,8 @@ $per_run_data = SELECT
CASE WHEN JSON_VALUE(Stats, '$.nemesis_enabled') = 'true' THEN 1U ELSE 0U END AS NemesisEnabled,
JSON_VALUE(Stats, '$.error_message') AS ErrorMessage,
JSON_VALUE(Stats, '$.warning_message') AS WarningMessage,
+ JSON_QUERY(Stats, '$.node_error_messages') AS NodeErrorMessages, -- JSON массив с ошибками нод (если доступен)
CAST(JSON_VALUE(Stats, '$.run_id') AS Uint64) AS StatsRunId,
- -- NOTE: Информация об ошибках нод доступна только в агрегированных данных
- -- чтобы избежать неточной временной привязки ошибок к конкретным запускам
-- Извлекаем информацию о кластере из Info JSON
JSON_VALUE(Info, '$.cluster.version') AS ClusterVersion,
@@ -40,7 +39,7 @@ $per_run_data = SELECT
ELSE NULL
END AS ClusterMonitoring,
CAST(JSON_VALUE(Info, '$.cluster.nodes_count') AS Int32) AS NodesCount,
- JSON_VALUE(Info, '$.cluster.nodes_info') AS NodesInfo, -- JSON массив с информацией о нодах
+ JSON_QUERY(Info, '$.cluster.nodes_info') AS NodesInfo, -- JSON массив с информацией о нодах
JSON_VALUE(Info, '$.ci_version') AS CiVersion,
JSON_VALUE(Info, '$.test_tools_version') AS TestToolsVersion,
JSON_VALUE(Info, '$.report_url') AS ReportUrl,
@@ -50,6 +49,8 @@ $per_run_data = SELECT
JSON_VALUE(Info, '$.ci_job_title') AS CiJobTitle,
JSON_VALUE(Info, '$.ci_cluster_name') AS CiClusterName,
JSON_VALUE(Info, '$.ci_nemesis') AS CiNemesis,
+ JSON_VALUE(Info, '$.ci_build_type') AS CiBuildType,
+ JSON_VALUE(Info, '$.ci_sanitizer') AS CiSanitizer,
-- Порядок выполнения теста в рамках RunId (на основе Timestamp)
ROW_NUMBER() OVER (PARTITION BY RunId ORDER BY Timestamp) AS OrderInRun
@@ -74,6 +75,7 @@ SELECT
NemesisEnabled,
ErrorMessage,
WarningMessage,
+ NodeErrorMessages,
StatsRunId,
ClusterVersion,
ClusterVersionLink,
@@ -88,6 +90,8 @@ SELECT
CiJobTitle,
CiClusterName,
CiNemesis,
+ CiBuildType,
+ CiSanitizer,
TestToolsVersion,
ReportUrl,
CiLaunchId,
@@ -98,6 +102,23 @@ SELECT
COALESCE(SubString(CAST(CiVersion AS String), 0U, FIND(CAST(CiVersion AS String), '.')), 'unknown') AS CiBranch,
COALESCE(SubString(CAST(TestToolsVersion AS String), 0U, FIND(CAST(TestToolsVersion AS String), '.')), 'unknown') AS TestToolsBranch,
+ -- Типы найденных ошибок нод (анализ node_error_messages)
+ CASE
+ WHEN NodeErrorMessages IS NULL OR CAST(NodeErrorMessages AS String) = '[]' OR CAST(NodeErrorMessages AS String) = '' THEN NULL
+ ELSE
+ ListConcat(
+ ListUniq(
+ ListNotNull(AsList(
+ CASE WHEN CAST(NodeErrorMessages AS String) LIKE '%coredump%' THEN 'Coredump' ELSE NULL END,
+ CASE WHEN CAST(NodeErrorMessages AS String) LIKE '%OOM%' OR CAST(NodeErrorMessages AS String) LIKE '%experienced OOM%' THEN 'OOM' ELSE NULL END,
+ CASE WHEN CAST(NodeErrorMessages AS String) LIKE '%VERIFY%' OR CAST(NodeErrorMessages AS String) LIKE '%verify%' THEN 'Verify' ELSE NULL END,
+ CASE WHEN CAST(NodeErrorMessages AS String) LIKE '%SAN%' OR CAST(NodeErrorMessages AS String) LIKE '%sanitizer%' THEN 'SAN' ELSE NULL END
+ ))
+ ),
+ ', '
+ )
+ END AS FacedNodeErrors,
+
-- Статус выполнения
CASE
WHEN Resolution = 'ok' THEN 'success'