You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Grafana创建GitHub PR状态时间线图表?需何种数据表?

适配Grafana PR状态时间序列图表的数据表结构

要实现你需要的这种PR状态时间序列分段展示图表,不需要额外创建全新数据表:你可以直接基于现有PgAdmin中的数据表编写SQL查询,生成Grafana所需的结构化数据;如果想提前存储适配好的数据,建议用状态区间拆分表,结构如下:

字段名数据类型说明
pr_numberintPR编号(对应原表的number字段)
statusvarcharPR状态,固定取值:OPEN/MERGED/CLOSED
start_timetimestamp当前状态的起始时间
end_timetimestamp当前状态的结束时间(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:50:14