act数据可视化:执行历史与统计数据的图表展示

act数据可视化:执行历史与统计数据的图表展示

【免费下载链接】act nektos/act: 是一个开源的 GitHub Actions 辅助工具,用于简化 GitHub Actions 的使用。它可以帮助开发者快速构建和部署工作流程,提高开发效率。特点包括易于使用、支持多种语言、支持自定义脚本等。 【免费下载链接】act 项目地址: https://gitcode.com/GitHub_Trending/ac/act

痛点:本地GitHub Actions调试的"盲区"

你是否曾经在使用GitHub Actions时遇到过这样的困境?每次修改workflow文件后,都需要反复commit、push、等待CI/CD流水线执行,才能看到结果。这种"试错-等待-再试错"的循环不仅耗时,还严重影响了开发效率。

更令人头疼的是,当workflow执行失败时,你只能看到最终的错误日志,却无法直观地了解:

  • 整个workflow的执行流程是怎样的?
  • 各个job之间的依赖关系如何?
  • 执行时间分布和性能瓶颈在哪里?
  • 历史执行记录和成功率统计如何?

act(GitHub Actions本地运行器)的出现解决了第一个问题,但数据可视化仍然是许多开发者的痛点。本文将为你揭示如何通过act的数据可视化功能,彻底告别本地调试的"盲区"。

act可视化功能全景图

act提供了多种可视化方式来帮助你理解和分析workflow执行情况:

1. 工作流图形化展示(Graph Mode)

使用--graph-g参数,act可以将workflow的job依赖关系以ASCII艺术的形式直观展示:

act --graph

这将生成类似下面的可视化输出:

   ╭─────────────╮   ╭─────────────╮   ╭─────────────╮
   │   build     │   │   test      │   │   deploy    │
   ╰─────────────╯   ╰─────────────╯   ╰─────────────╯
         ↓                 ↓                 ↓

2. 执行时间线可视化

虽然act本身不直接提供时间线图表,但可以通过日志时间戳结合外部工具实现:

act -v 2>&1 | grep "time=" | awk '{print $1, $2, $5}'

3. 自定义数据收集框架

通过扩展act的日志输出,可以构建完整的数据可视化流水线:

mermaid

实战:构建act执行数据可视化系统

步骤1:启用详细日志记录

首先,我们需要获取详细的执行数据。使用verbose模式运行act:

act -v --json > act_execution.json

这将生成包含完整执行信息的JSON格式日志。

步骤2:数据解析与存储

创建一个Python脚本来解析act的执行数据:

import json
import sqlite3
from datetime import datetime

def parse_act_logs(log_file):
    with open(log_file, 'r') as f:
        logs = [json.loads(line) for line in f if line.strip()]
    
    # 连接到SQLite数据库
    conn = sqlite3.connect('act_stats.db')
    cursor = conn.cursor()
    
    # 创建统计表
    cursor.execute('''
    CREATE TABLE IF NOT EXISTS execution_stats (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        workflow_name TEXT,
        job_name TEXT,
        status TEXT,
        start_time TIMESTAMP,
        end_time TIMESTAMP,
        duration INTEGER,
        exit_code INTEGER
    )
    ''')
    
    # 解析并存储数据
    for log in logs:
        if 'msg' in log and 'job' in log['msg']:
            job_data = parse_job_log(log)
            cursor.execute('''
            INSERT INTO execution_stats 
            (workflow_name, job_name, status, start_time, end_time, duration, exit_code)
            VALUES (?, ?, ?, ?, ?, ?, ?)
            ''', job_data)
    
    conn.commit()
    conn.close()

def parse_job_log(log_entry):
    # 解析具体的job日志信息
    # 返回(workflow_name, job_name, status, start_time, end_time, duration, exit_code)
    pass

步骤3:生成可视化图表

使用Python的Matplotlib和Seaborn库创建丰富的可视化图表:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from datetime import datetime

def generate_visualizations():
    # 从数据库读取数据
    conn = sqlite3.connect('act_stats.db')
    df = pd.read_sql_query('SELECT * FROM execution_stats', conn)
    conn.close()
    
    # 设置图表样式
    sns.set_style("whitegrid")
    plt.figure(figsize=(15, 10))
    
    # 1. 执行时间分布图
    plt.subplot(2, 2, 1)
    sns.histplot(df['duration'], kde=True)
    plt.title('执行时间分布')
    plt.xlabel('持续时间(秒)')
    plt.ylabel('频次')
    
    # 2. 成功率统计
    plt.subplot(2, 2, 2)
    status_counts = df['status'].value_counts()
    plt.pie(status_counts.values, labels=status_counts.index, autopct='%1.1f%%')
    plt.title('执行状态分布')
    
    # 3. 各job平均执行时间
    plt.subplot(2, 2, 3)
    job_avg_time = df.groupby('job_name')['duration'].mean().sort_values()
    job_avg_time.plot(kind='barh')
    plt.title('各Job平均执行时间')
    plt.xlabel('平均时间(秒)')
    
    # 4. 时间趋势分析
    plt.subplot(2, 2, 4)
    df['date'] = pd.to_datetime(df['start_time']).dt.date
    daily_stats = df.groupby('date').agg({
        'duration': 'mean',
        'id': 'count'
    }).rename(columns={'id': 'execution_count'})
    
    ax = daily_stats['duration'].plot(secondary_y=True, color='r', marker='o')
    daily_stats['execution_count'].plot(kind='bar', ax=plt.gca(), alpha=0.3)
    plt.title('每日执行统计')
    plt.tight_layout()
    plt.savefig('act_visualization.png', dpi=300, bbox_inches='tight')

步骤4:构建交互式Web仪表板

使用Streamlit创建实时监控仪表板:

import streamlit as st
import plotly.express as px
import pandas as pd

def create_dashboard():
    st.title('act执行数据可视化仪表板')
    
    # 连接到数据库
    conn = sqlite3.connect('act_stats.db')
    df = pd.read_sql_query('SELECT * FROM execution_stats', conn)
    conn.close()
    
    # 侧边栏过滤器
    st.sidebar.header('过滤器')
    selected_workflow = st.sidebar.selectbox('选择Workflow', df['workflow_name'].unique())
    
    filtered_df = df[df['workflow_name'] == selected_workflow]
    
    # 关键指标
    col1, col2, col3 = st.columns(3)
    with col1:
        st.metric("总执行次数", len(filtered_df))
    with col2:
        success_rate = (filtered_df['status'] == 'success').mean() * 100
        st.metric("成功率", f"{success_rate:.1f}%")
    with col3:
        avg_duration = filtered_df['duration'].mean()
        st.metric("平均耗时", f"{avg_duration:.1f}秒")
    
    # 时间序列图表
    st.subheader('执行时间趋势')
    time_chart = px.line(filtered_df, x='start_time', y='duration', 
                        color='job_name', title='各Job执行时间变化')
    st.plotly_chart(time_chart)
    
    # 状态分布
    st.subheader('执行状态分布')
    status_chart = px.pie(filtered_df, names='status', title='成功/失败分布')
    st.plotly_chart(status_chart)

高级功能:实时监控与告警

实时执行监控

通过结合act的watch模式,可以实现实时监控:

act -w --json | python realtime_monitor.py

性能瓶颈分析

识别workflow中的性能瓶颈:

def analyze_bottlenecks(df):
    # 找出执行时间最长的job
    slowest_jobs = df.nlargest(5, 'duration')[['job_name', 'duration']]
    
    # 分析时间波动
    time_variability = df.groupby('job_name')['duration'].std().sort_values(ascending=False)
    
    # 识别异常值
    Q1 = df['duration'].quantile(0.25)
    Q3 = df['duration'].quantile(0.75)
    IQR = Q3 - Q1
    outliers = df[df['duration'] > (Q3 + 1.5 * IQR)]
    
    return slowest_jobs, time_variability, outliers

自动化告警系统

设置阈值告警:

def setup_alerts(df, thresholds):
    alerts = []
    
    # 失败率告警
    failure_rate = (df['status'] == 'failure').mean()
    if failure_rate > thresholds.get('failure_rate', 0.1):
        alerts.append(f"失败率过高: {failure_rate:.1%}")
    
    # 执行时间告警
    avg_duration = df['duration'].mean()
    if avg_duration > thresholds.get('max_avg_duration', 300):
        alerts.append(f"平均执行时间过长: {avg_duration:.1f}秒")
    
    # 发送告警(邮件、Slack等)
    if alerts:
        send_alert("\n".join(alerts))
    
    return alerts

最佳实践与优化建议

1. 数据收集优化

# 使用tee命令同时输出到文件和屏幕
act -v --json 2>&1 | tee -a act_logs/$(date +%Y%m%d_%H%M%S).log

2. 数据库优化

-- 创建索引加速查询
CREATE INDEX idx_job_name ON execution_stats(job_name);
CREATE INDEX idx_start_time ON execution_stats(start_time);
CREATE INDEX idx_status ON execution_stats(status);

-- 定期清理旧数据
DELETE FROM execution_stats 
WHERE start_time < datetime('now', '-30 days');

3. 可视化性能优化

对于大规模数据,考虑使用以下优化策略:

  • 数据采样:对历史数据进行分析时使用采样
  • 预聚合:预先计算常用统计指标
  • 缓存机制:对图表数据进行缓存
  • 分页加载:大数据集时分页显示

总结与展望

通过本文介绍的方法,你可以构建一个完整的act执行数据可视化系统,实现:

  • 实时监控:实时查看workflow执行状态
  • 历史分析:分析长期执行趋势和模式
  • 性能优化:识别和解决性能瓶颈
  • 告警通知:及时发现问题并通知相关人员
  • 团队协作:共享执行数据和洞察

未来还可以进一步扩展:

  • 集成更多数据源(GitHub API、Docker指标等)
  • 实现预测性分析(执行时间预测、失败预测)
  • 构建更丰富的交互式仪表板
  • 开发插件系统支持自定义可视化

现在就开始使用act的数据可视化功能,让你的本地GitHub Actions调试变得更加高效和直观吧!

【免费下载链接】act nektos/act: 是一个开源的 GitHub Actions 辅助工具,用于简化 GitHub Actions 的使用。它可以帮助开发者快速构建和部署工作流程,提高开发效率。特点包括易于使用、支持多种语言、支持自定义脚本等。 【免费下载链接】act 项目地址: https://gitcode.com/GitHub_Trending/ac/act

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值