Мы используем Azure DevOps Server 2019 (предварительно). Таким образом, аналитика сборки практически не существует. Итак, мы настроили процесс загрузки готовых метрик сборки в Azure AppInsights, что позволяет нам писать все виды интересных панелей мониторинга.
Мой менеджер хочет знать три вещи:
- Как часто происходит сбой сборки?
- Сколько времени занимает сборка?
- Как долго сборка не работает?
Первые два довольно просто, но последний довольно сложный.
Сначала я перевел проблему на Sql и решил ее с помощью Пометить последовательные ненулевые строки на отдельные разделы?
Получив ответ на Sql, я смог перевести его на Kql (язык запросов Kusto, используемый AppInsights) следующим образом:
customEvents
| where customDimensions.kind == "build"
and name == 'vNext_master_ci_r_git'
| project
startTime = todatetime(customDimensions.startTime),
outcome = tostring(customDimensions.buildResult)
| where outcome in ('succeeded', 'failed')
| order by startTime asc
| extend
nextStartTime = next(startTime, 1)
| extend
duration = case(outcome == 'failed', nextStartTime - startTime, totimespan(0)),
rn = row_number(),
rn2 = row_number(1, prev(outcome) != outcome)
| extend
grp = rn - rn2
| where outcome == 'failed'
| summarize startTime = min(startTime), duration = toreal(sum(duration) / time(1h)) by grp
| order by startTime asc
| project startTime, duration
Как видите, это перевод 1-1 соответствующего Sql. Но мне интересно, есть ли более краткий способ достижения этой цели в Ккл. Мое обоснование заключается в том, что Kql был разработан для поддержки анализа данных, и, возможно, он может предоставить более элегантное решение.