Gitlab Burndown Chart
一、说明
通过调用gitlab api直接获取相应project的所有issues,然后对其进行统计以制作燃尽图
二、方法
1.生成 Personal access token
Gitlab > Profile > Access Tokens
设置Name, Expires at, Scopes后Create personal access token

2.获取Project ID
将$your_personal_access_token$替换为你的personal access token
将$your_project_name$替换为你的项目名称
获取的数据中,第一个id即为项目id
3.执行脚本生成燃尽图
3.1获取项目的所有issues
curl --header "PRIVATE-TOKEN: $your_personal_access_token$" https://gitlab.buaaoo.top/api/v4/projects/ $your_project_id$/issues?per_page=$decided by your issues numbers$
将$your_personal_access_token$替换为你的personal access token
将$your_project_id$替换为你的项目id
将$decided by your issues numbers$替换为大于等于项目issues最大数量的值,比如你估计你的项目最多会同时存在80个issues,你可以把值设为100
注:per_page 默认为20,如果你不知道目前项目共有多少issues,也可以直接执行如下命令查看
curl --head --header "PRIVATE-TOKEN: $your_personal_access_token$" https://gitlab.buaaoo.top/api/v4/projects/$your_project_id$/issues
返回的数据中X-Total字段即为当前项目的issues数量
3.2 统计并生成燃尽图
根据issues数量的变化生成期望曲线和实际变化曲线
完整脚本如下:
import json
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
from collections import defaultdict
import os
# get all issues
project_id = #your project id#
gitlab_private_token = #your personal access token#
get_issue_cmd = 'curl --header "PRIVATE-TOKEN: ' + gitlab_private_token + '" "https://gitlab.buaaoo.top/api/v4/projects/' \
                + project_id + '/issues?per_page=100" > all_issues.json'
os.system(get_issue_cmd)
# alpha phase start date and end date
start_date = '2021-04-21'
end_date = '2021-05-14'
# get all dates between start date and end date
dates = []
dt = datetime.strptime(start_date, "%Y-%m-%d")
date = start_date
while date <= end_date:
    dates.append(date)
    dt = dt + timedelta(1)
    date = dt.strftime("%Y-%m-%d")
# count issue day by day
daily_issues_cnt = defaultdict(int)
issues_cnt = []
today = datetime.strftime(datetime.now() - timedelta(0), '%Y-%m-%d')
with open('all_issues.json') as json_file:
    data = json.load(json_file)
for date in dates:
    daily_issues_cnt[date] = 0
for i in range(len(data)):
    daily_issues_cnt[data[i]['created_at'][0: 10]] += 1
    closed_at = data[i]['closed_at']
    if closed_at is not None:
        daily_issues_cnt[closed_at[0: 10]] -= 1
issues_cnt.append(daily_issues_cnt[start_date])
for i, key in enumerate(sorted(daily_issues_cnt.keys())):
    if i != 0:
        issues_cnt.append(issues_cnt[i-1] + daily_issues_cnt[key])
        if key == today:
            break
# plot burn down chart
expected_x = [0, len(dates) - 1]
expected_y = [daily_issues_cnt[start_date], 0]
actual_x = range(0, len(issues_cnt))
actual_y = issues_cnt
fig, ax = plt.subplots(figsize=(15, 10))
expected = plt.plot(expected_x, expected_y, color='green', label='expected')
actual = plt.plot(actual_x, actual_y, color='blue', label='actual')
plt.xticks(range(0, len(dates)), dates, rotation=45)
plt.legend()
plt.xlabel('Date')
plt.ylabel('Issues Count')
plt.savefig('burndown_chart.png')
生成的燃尽图:

Gitlab Burndown Chart的更多相关文章
- Burndown chart
		S型的燃尽图 在一次milestone开发过程中,开发者会持续编辑issue列表,每个issue都有自己的生命周期.燃尽图预期这些issues会被线性的消灭掉,所以从第一天直接到最后一天画个直线表示预 ... 
- Alpha项目展示
		项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 Alpha-项目展示 我们是谁 删库跑路对不队 我们在做什么 题士 进度如何 进度总览 一.项目与团队亮点 ... 
- 关于Agile Scrum的笔记
		Roles: Scrum Master -- advisor but leader, 替Team消除障碍 Product Owner -- 定sprint的交付内容, 优先级 Team -- 干活的, ... 
- Daily Scrum Meeting ——SeventhDay(Beta)12.15
		一.Daily Scrum Meeting照片 二.Burndown Chart 想做的太多,冲刺仍在继续 三.项目进展(check-in) 1.完成了登录注册剩下的所有界面 2.更改通知详情和活动详 ... 
- Daily Scrum Meeting ——SixthDay(Beta)12.14
		一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展(check-in) 1.完成注册界面中的学院.年级.身份选择. 2.补充参与者报名活动成功后按钮变为不可 ... 
- Daily Scrum Meeting ——FifthDay(Beta)12.13
		一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展(check-in) 1.制作注册分流的头像 发布者头像 参与者头像 2.完成参与者上传头像的功能:通过本 ... 
- Daily Scrum Meeting ——FourthDay(Beta)12.12
		一.Daily Scrum Meeting照片 讨论界面优化详情 二.Burndown Chart 项目有条不紊地进行中... 1.新增6个界面修改计划 2.修复两个BUG 三.项目进展(check- ... 
- Daily Scrum Meeting ——ThirdDay(Beta)12.11
		一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展(check-in) 1.欢迎界面的优化,从模糊到清楚 2.新增主界面背景 3.新增注册背景 4.参与者侧 ... 
- Daily Scrum Meeting ——SecondDay(Beta)12.10
		一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展(check-in) 1. 修复两个Alpha版本所遗留的BUG 2. 着手修改参与者与发布者的侧滑框,改 ... 
随机推荐
- 「山东省队集训2021 Round 1」 半夜
			考虑将 \(X\) 复制一次放到后面再对其长度为 \(n\) 的连续子串和 \(Y\) 求一波 \(\rm{Longest\ Common\ Subsequence}\) 就能得到 \(\Theta( ... 
- [考试总结]noip模拟46
			脑袋确实是不好使了需要回家暴颓治疗 数数数树鼠树 真好玩. 数数 大水题一个,妥妥的签到题目,然后... 我没签上 气展了!!! 其实我还是想麻烦了. 就是我们实际上就是排序之后每一次找头上和尾巴上的 ... 
- 不写注释的程序员-Models
			Models 不写注释的程序员-Models # This is an auto-generated Django model module. # You'll have to do the foll ... 
- (8)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Cloud Eureka是什么?
			 Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能. ... 
- 【第九篇】- Git 标签之Spring Cloud直播商城 b2b2c电子商务技术总结
			Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 xxx 项目发布一个"1.0"版本. ... 
- 解决git bash闪退问题 报openssl错误
			问题描述:今天安装git之后发现Git Bash工具闪退. 于是试了各种办法之后,最后终于解决. 背景描述:git 下载地址:https://git-scm.com/download/win 下载成功 ... 
- Dockerfile常见命令
			Dockerfile结构 Dockerfile的结构分成了若干部分,每个部分之间的先后顺序有明确的要求: 部分 命令 基础镜像信息 FROM 维护者信息 MAINTAINER 镜像操作指令 RUN.C ... 
- Dockerfile 自动制作 Docker 镜像(三)—— 镜像的分层与 Dockerfile 的优化
			Dockerfile 自动制作 Docker 镜像(三)-- 镜像的分层与 Dockerfile 的优化 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云 ... 
- Java基础系列(21)- dowhile循环
			do-while循环 对于while语句而言,如果不满足条件,则不能进入循环.但有时候我们需要即使不满足条件,也至少执行一次 do-while循环和while循环相似,不同的是,do-while循环至 ... 
- requests接口自动化-动态关联text/html格式
			动态关联,前一个接口返回的值为后一个接口请求的参数. # 动态关联 import requests def test_cookies(): # 以百度为例 r_baidu=requests.get(' ... 
