mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 01:18:42 +00:00
Added Grafana query to README.md for reference. (#30632)
Added Grafana query to Engineering Metrics README.md for reference. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a new "Grafana queries" section to the README, providing a detailed example SQL query for visualizing the "Time to First Review" metric with dynamic filtering and rolling averages in Grafana dashboards. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
parent
8d7e87c4e8
commit
7319e269e0
1 changed files with 146 additions and 0 deletions
146
.github/actions/eng-metrics/README.md
vendored
146
.github/actions/eng-metrics/README.md
vendored
|
|
@ -298,6 +298,152 @@ npm test
|
|||
npm run lint
|
||||
```
|
||||
|
||||
## Grafana queries
|
||||
|
||||
Snapshot of Grafana query for Time to First Review (2025/07/08). Replace `engineering-metrics-XXXXXX` with the right project.
|
||||
|
||||
```sql
|
||||
-- Process user/group variables
|
||||
WITH parameters AS (
|
||||
SELECT
|
||||
ARRAY(
|
||||
SELECT
|
||||
TRIM(u)
|
||||
FROM
|
||||
UNNEST(SPLIT('${user:csv}', ',')) u
|
||||
WHERE
|
||||
u NOT IN ('', '__all')
|
||||
) AS users,
|
||||
ARRAY(
|
||||
SELECT
|
||||
TRIM(g)
|
||||
FROM
|
||||
UNNEST(SPLIT('${user_group:value}', ';')) g
|
||||
WHERE
|
||||
g NOT IN ('', '__all')
|
||||
) AS `groups`
|
||||
),
|
||||
-- Centralized time/pr_creator filter
|
||||
filtered_pr AS (
|
||||
SELECT
|
||||
first_review_time,
|
||||
pr_creator,
|
||||
pickup_time_seconds,
|
||||
pr_number
|
||||
FROM
|
||||
`engineering-metrics-XXXXXX.github_metrics.pr_first_review`
|
||||
CROSS JOIN parameters p
|
||||
WHERE
|
||||
first_review_time BETWEEN TIMESTAMP_SUB(TIMESTAMP_MILLIS($__from), INTERVAL 7 DAY) -- added 6+1 day just in case to be safe
|
||||
AND TIMESTAMP_MILLIS($__to)
|
||||
AND (
|
||||
-- No filters selected → show all
|
||||
(
|
||||
ARRAY_LENGTH(p.users) = 0
|
||||
AND ARRAY_LENGTH(p.groups) = 0
|
||||
)
|
||||
OR (
|
||||
-- Only user filter
|
||||
ARRAY_LENGTH(p.users) > 0
|
||||
AND ARRAY_LENGTH(p.groups) = 0
|
||||
AND pr_creator IN UNNEST(p.users)
|
||||
)
|
||||
OR (
|
||||
-- Only group filter
|
||||
ARRAY_LENGTH(p.groups) > 0
|
||||
AND ARRAY_LENGTH(p.users) = 0
|
||||
AND pr_creator IN UNNEST(p.groups)
|
||||
)
|
||||
OR (
|
||||
-- Both filters → intersection
|
||||
ARRAY_LENGTH(p.users) > 0
|
||||
AND ARRAY_LENGTH(p.groups) > 0
|
||||
AND pr_creator IN (
|
||||
SELECT
|
||||
u
|
||||
FROM
|
||||
UNNEST(p.users) AS u
|
||||
INTERSECT
|
||||
DISTINCT
|
||||
SELECT
|
||||
g
|
||||
FROM
|
||||
UNNEST(p.groups) AS g
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
-- daily roll-up
|
||||
daily AS (
|
||||
SELECT
|
||||
DATE(first_review_time, "America/Chicago") AS day,
|
||||
COUNT(*) AS pr_count,
|
||||
SUM(pickup_time_seconds) AS total_seconds
|
||||
FROM
|
||||
filtered_pr
|
||||
WHERE
|
||||
first_review_time BETWEEN TIMESTAMP_SUB(TIMESTAMP_MILLIS($__from), INTERVAL 6 DAY)
|
||||
AND TIMESTAMP_MILLIS($__to)
|
||||
GROUP BY
|
||||
day
|
||||
),
|
||||
calendar AS (
|
||||
SELECT
|
||||
day
|
||||
FROM
|
||||
UNNEST(
|
||||
GENERATE_DATE_ARRAY(
|
||||
DATE(TIMESTAMP_MILLIS($__from)),
|
||||
DATE(TIMESTAMP_MILLIS($__to))
|
||||
)
|
||||
) AS day
|
||||
),
|
||||
-- 7-day weighted moving average
|
||||
rolling_avg AS (
|
||||
SELECT
|
||||
c.day,
|
||||
TIMESTAMP(CONCAT(CAST(c.day AS STRING), ' 12:00:00')) AS time,
|
||||
SAFE_DIVIDE(
|
||||
(
|
||||
SELECT
|
||||
SUM(d.total_seconds)
|
||||
FROM
|
||||
daily d
|
||||
WHERE
|
||||
d.day BETWEEN DATE_SUB(c.day, INTERVAL 6 DAY)
|
||||
AND c.day
|
||||
),
|
||||
(
|
||||
SELECT
|
||||
SUM(d.pr_count)
|
||||
FROM
|
||||
daily d
|
||||
WHERE
|
||||
d.day BETWEEN DATE_SUB(c.day, INTERVAL 6 DAY)
|
||||
AND c.day
|
||||
)
|
||||
) / 3600 AS moving_avg_hours
|
||||
FROM
|
||||
calendar c
|
||||
) -- final result
|
||||
SELECT
|
||||
r.time,
|
||||
r.moving_avg_hours,
|
||||
(
|
||||
SELECT
|
||||
ARRAY_AGG(DISTINCT pr_number)
|
||||
FROM
|
||||
filtered_pr p
|
||||
WHERE
|
||||
DATE(p.first_review_time, "America/Chicago") BETWEEN DATE(DATE_SUB(r.time, INTERVAL 6 DAY))
|
||||
AND DATE(r.time)
|
||||
) AS pr_numbers_window
|
||||
FROM
|
||||
rolling_avg r
|
||||
ORDER BY
|
||||
r.time;
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
When contributing to this project, please:
|
||||
|
|
|
|||
Loading…
Reference in a new issue