1. 使用gerrit API 抓取数据
2. 存储在MongoDB
3. 使用 Dijango 做数据访问
4. 数据可视化展示
安装 pygerrit2
pip install pygerrit2
填写你的用户名和密码
GERRITE_USER = ""
GERRITE_PWD = ""
GERRITE_URL_AUTH = "http://gerrite1.ext.net.[yourcompany].com"
link: https://review.openstack.org/Documentation/rest-api.html
这个Demo,只是打通了RestAPI的调用过程
我们可以到年底发布“开发者成就”, 例如
-
who 提交了多少 mr 按月 周计算
-
who 提交了多少行代码 每月 文件类型(.html .js .ts)
-
MR 提交的类型 根据提交的commit message 信息来区分
- 包含 NF 代表是new feature
- BUG 代码修改的bug
- who 日期
- who 给累最多的comment
- comment 内容是什么 类型 来自什么文件
-reviewer
- 一个mr 从产生到提交 需要经过多久 天/周
-
代码提交 && verify+1 && 包含reviewer && 无review记录
-
正常工作日:提交时间 绿色(<12h) 黄色告警(>12h) 橙色(<24h) 红色告警(>3*24h)
- 提醒到reviewer 代码ok verify +1
- 提醒到committer 代码异常 verify -1
python 使用xmpppy模块向 Jabber 发送消息 或者jabber.py
-
>7*24h 红色告警 提醒到 committer
至于对那些收到的数据做什么二次开发,就看我们怎么做了
- 饼状图 呈现 status 列表
我们开发过程中是不断的增加代码 有时候为了赶进度,就忽略了代码质量等
多少个提交是在减少代码的 [lines_deleted > lines_inserted]
(u'doc/source/configuration/pluggable_panels.rst', {u'lines_deleted': 15, u'lines_inserted': 19})
三、 Gerrit REST API代码 gerrit_python
Status_list = ['open','closed','merged','pending','reviewed','abandoned','draft']
GERRITE_USER = ""
GERRITE_PWD = ""
PROJECT_NAME = "openstack/horizon"
GERRITE_URL_AUTH = "https://review.openstack.org"
rest = GerritRestAPI(url=GERRITE_URL_AUTH)
res = rest.get('/changes/?q=status:{}+project:{}'.format(Status_list[2],PROJECT_NAME)) change_id = res[0]['change_id']
url = '/changes/{}/?o=CURRENT_REVISION&o=CURRENT_FILES'.format(change_id) current_files = rest.get(url) 打印对象信息 print json.dumps(current_files,indent=4)
{ "status": "MERGED", "topic": "zanata/translations", "updated": "2017-07-20 12:09:11.306000000", "insertions": 39, "created": "2017-07-20 11:20:28.000000000", "change_id": "I7ed522c865ea23648d6ca1551ef3ae17cbb3c0c2", "hashtags": [], "deletions": 3, "current_revision": "980f0a204831894c5b83aa6fef60c5040ac2fd35", "submitted": "2017-07-20 12:09:11.000000000", "project": "openstack/horizon", "branch": "stable/newton", "owner": { "_account_id": 11131 }, "_number": 485561, "revisions": { "980f0a204831894c5b83aa6fef60c5040ac2fd35": { "files": { "openstack_dashboard/locale/id/LC_MESSAGES/django.po": { "lines_deleted": 3, "lines_inserted": 39 } }, "created": "2017-07-20 11:20:28.000000000", "uploader": { "_account_id": 11131 }, "ref": "refs/changes/61/485561/1", "fetch": { "git": { "url": "git://git.openstack.org/openstack/horizon", "ref": "refs/changes/61/485561/1" }, "anonymous http": { "url": "https://git.openstack.org/openstack/horizon", "ref": "refs/changes/61/485561/1" } }, "_number": 1 } }, "id": "openstack%2Fhorizon
stable%2FnewtonI7ed522c865ea23648d6ca1551ef3ae17cbb3c0c2", "subject": "Imported Translations from Zanata" } current_revision = current_files['current_revision']
commit_files = current_files['revisions'][current_revision]['files']