如何用Grafana创建GitHub PR状态时间线图表?需何种数据表?
适配Grafana PR状态时间序列图表的数据表结构
要实现你需要的这种PR状态时间序列分段展示图表,不需要额外创建全新数据表:你可以直接基于现有PgAdmin中的数据表编写SQL查询,生成Grafana所需的结构化数据;如果想提前存储适配好的数据,建议用状态区间拆分表,结构如下:
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| pr_number | int | PR编号(对应原表的number字段) |
| status | varchar | PR状态,固定取值:OPEN/MERGED/CLOSED |
| start_time | timestamp | 当前状态的起始时间 |
| end_time | timestamp | 当前状态的结束时间(OPEN状态的结束时间为PR合并/关闭时间,MERGED/CLOSED状态的结束时间设为9999-12-31 23:59:59) |
基于原表生成适配数据的SQL示例(PostgreSQL语法)
如果不想额外建表,直接在Grafana中用以下SQL查询原表,就能得到符合要求的数据集:
WITH processed_prs AS ( -- 先处理merged_at为空的情况,替换为指定时间 SELECT number AS pr_number, created_at, COALESCE(merged_at, '9999-12-31 23:59:59'::timestamp) AS merged_at, closed_at FROM your_original_table -- 替换成你实际的表名 ) -- 拆分OPEN状态的时间区间 SELECT pr_number, 'OPEN' AS status, created_at AS start_time, -- OPEN状态结束于合并时间或关闭时间(取较早的那个) COALESCE(LEAST(merged_at, closed_at), merged_at) AS end_time FROM processed_prs UNION ALL -- 拆分MERGED/CLOSED状态的时间区间 SELECT pr_number, CASE -- 若合并时间早于关闭时间,状态为MERGED;否则为CLOSED WHEN merged_at < COALESCE(closed_at, '9999-12-31 23:59:59'::timestamp) THEN 'MERGED' ELSE 'CLOSED' END AS status, -- 该状态起始于OPEN状态的结束时间 COALESCE(LEAST(merged_at, closed_at), merged_at) AS start_time, '9999-12-31 23:59:59'::timestamp AS end_time FROM processed_prs -- 过滤掉一直处于OPEN状态的PR(即未合并也未关闭的) WHERE merged_at <> '9999-12-31 23:59:59'::timestamp OR closed_at IS NOT NULL;
内容的提问来源于stack exchange,提问作者Minminmin
相关产品推荐
相关产品推荐

