禅道统计BUG解决时长过滤节假日和跨天问题
之前发过禅道的各种数据统计报表,使用过程中优化了一些,反映最多的是项目bug的解决时长统计问题:
1.比如当天下班左右提交的bug,研发第二天来解决,晚上这段时间应该去掉,不应计算在内
2.节假日、周末这些时间也应该去掉
python有公用模块chinesecalendar可以解决解决第二个问题,不过这个模块有个缺陷,每年需要更新一下,获取当年的节假日,当然你也可以把节假日周末信息存入数据库动态调整获取。
common_workday.py 计算两个时间内的休息日天数
1 ##common_workday.py
2
3
4 # coding = utf-8
5 # 计算周末、节假日时间天数
6
7 from datetime import datetime, timedelta
8 from chinese_calendar import is_workday
9
10
11 def workdays(start, end):
12 """
13 :param start:
14 :param end:
15 :return:
16 """
17 # 字符串格式日期的处理
18 if type(start) == str:
19 start = datetime.strptime(start, '%Y-%m-%d').date()
20 if type(end) == str:
21 end = datetime.strptime(end, '%Y-%m-%d').date()
22 # 开始日期大,颠倒开始日期和结束日期
23 if start > end:
24 start, end = end, start
25 counts = 0
26 while True:
27 if start > end:
28 break
29 # 计算两个日期间的节假日和周末数
30 if is_workday(start) is False:
31 counts += 1
32 start += timedelta(days=1)
33 return counts
bug_time_summary.py 统计汇总时间(从数据库查询出数据后直接处理)
## bug_time_summary.py ##*****代码片段*****## mysql_l = deal_mysql(sys._getframe())
if len(mysql_l) > 0:
le = []
for i in mysql_l:
le.append(list(i))
for i in le:
# bug解决时间减去bug提交时间
ta = round(float((i[7] - i[6]).total_seconds() / 3600), 2)
# 两个时间之间的周末、节假日天数
tb = float(workday.workdays(i[6].date(), i[7].date()) * 24)
hour_sub = 0
if i[6].day != i[7].day and i[6].hour >= 17:
# 17点后提交的bug,计算需扣除的跨天小时数【8.5:计算方式自己动态调整,9点上班,考虑有人8点半来就修复bug了,所以取个8.5,提交bug分钟数舍弃计算,影响不大;另外17点之前提交的bug,不排除跨天时间】
hour_sub = 24 - i[6].hour + 8.5
# 最终结果
time_subtract = round(ta - tb - hour_sub, 2)
i.append(time_subtract)
end = []
name = ''
count = 0
avg_time = 0
for index, i in enumerate(le):
if index == 0:
name = i[5]
count = 1
avg_time = i[8]
else:
if i[5] == name:
count += 1
avg_time += i[8]
if index == len(le) - 1:
end.append([le[index][0], le[index][1], le[index][5], count, round(avg_time / count, 2)])
else:
end.append([le[index - 1][0], le[index - 1][1], le[index - 1][5], count, round(avg_time / count, 2)])
name = i[5]
count = 1
avg_time = i[8]
if index == len(le) - 1:
end.append([le[index][0], le[index][1], le[index][5], count, round(avg_time / count, 2)])
sum_p = 0
sum_time = 0
for i in end:
sum_p += i[3]
sum_time += i[4]*i[3]
avn = round(sum_time / sum_p, 2)
end = sorted(end, key=lambda x: x[3], reverse=True)
data = np.tile(end, 1)
d = data.T
# 获取列表合并算法
al = dt.find_same_column(d, 1)
# td 处理
td = deal_td(al)
# tr处理
tr = deal_tr(td)
s, h = deal_html(tr, avn)
##*****代码片段*****##
改进前:

改进后:

同样的详情表也可以这样处理~~
禅道统计BUG解决时长过滤节假日和跨天问题的更多相关文章
- 怎么解决禅道启动服务mysqlzt时的端口失败
打开Windows任务管理器 查看服务是否有MySQL正在运行,停止服务 启动mysqlzt服务 重新启动禅道
- Hexo添加字数统计、阅读时长
统计插件 配置 NexT 主题默认已经集成了文章[字数统计].[阅读时长]统计功能,如果我们需要使用,只需要在主题配置文件 _config.yml 中打开 wordcount 统计功能即可.如下所示: ...
- wamp服务下部署禅道或其它项目时访问缓慢的解决办法
原因其实很简单: WAMP服务默认是不支持外网访问的,如果公司内外网在一起就会引起缓慢甚至超时的问题,直接修改WAPM的配置文件让它可以访问外网即可解决问题. 解决的方法/步骤 1.解决办法: ...
- 使用mediainfo工具统计每个视频文件(媒体文件)播放时长
需求 1.运营那边需要统计大量视频文件的播放时长,并汇总记录到excel表中,问我有什么方法搞定 这边搜索了很多统计媒体文件时长的,主要有以下几种 1.使用java获取 2.使用python获取 3. ...
- 使用钉钉对接禅道的bug系统,实现禅道提的bug实时在钉钉提醒并艾特对应的开发人员处理
现在公司测试中有一个痛点是每次测试人员提完bug后,需要定期去提醒开发人员查看禅道的bug记录及修复bug. 导致测试人员在项目测试中不仅要测试整个软件,还要负起实时监督提醒功能的“保姆角色”,身心疲 ...
- windows 7 下,如何统计某文件夹下 视频总时长
由于项目需要,我需要给系统加权限,这真是一个让人头疼的问题,如果要每个业务方法都加上权限判断逻辑,那真的不敢想象是多么大的工作量,日后有变动的话,我会不会发疯? 所以我必须利用之前学到的AOP编程,在 ...
- Fragment时长统计那些事
注:本文同步发布于微信公众号:stringwu的互联网杂谈 frament时长统计那些事 页面停留时长作为应用统计的北极星指标里的重要指标之一,统计用户在某个页面的停留时长则变得很重要.而Fragme ...
- iNeuOS工业互联网操作系统,脚本化实现设备运行时长和效率计算与统计
目 录 1. 概述... 2 2. 实时采集开停状态... 2 3. 增加虚拟设备... 2 4. 脚本统计和计算设备运行时长... 4 5. ...
- python数据统计之禅道bug统计
背景 通过定期输出 每条产品的 BUG 情况,以此来反馈开发解决问题.测试跟进问题的情况:钉钉群推送提醒开发及时解决 以此我这边开始着手准备编写一个小工具,最终达到目的:自动定期发送统计报告,报告维度 ...
- 禅道Bug管理工具环境搭建
下载地址:http://sourceforge.net/projects/zentao/files/8.2/ZenTaoPMS.8.2.stable.exe/download 1.解压ZenTaoPM ...
随机推荐
- Sharding-JDBC源码解析与vivo的定制开发
作者:vivo IT 平台团队 - Xiong Huanxin Sharding-JDBC是在JDBC层提供服务的数据库中间件,在分库分表场景具有广泛应用.本文对Sharding-JDBC的解析.路由 ...
- DDD笔记
笔记来源于b站视频 1.系统"老化" 需求难:程序员和产品经理沟通困难,更改需求难 开发难:对于上前行代码的类,更改很难,只能用if-else 创新难:对于之前老的技术笔试SSH想 ...
- 如何使用疯狂URL获取抖音推流码地址(抖音推流码地址获取教程)
本节所用到的工具:疯狂URL.OBS推流工具 什么是推流地址? 平时我们如果是下载直播,叫拉流.但如果是你自己要直播,属于上传直播流数据,叫推流,即:把直播流数据推送到视频服务器,然后别人才能看到直播 ...
- 用户不在 sudoers 文件中。此事将被报告
在终端,进入root模式 vim /etc/sudoers 在 sudo (ALL:ALL) ALL下 添加 用户名 (ALL:ALL) ALL
- linux-debian-把用户加入root组
使用vim进入 /etc/sudoers 打开这个文件(或者 vi)也行 修改数据: 敲击键盘上个的 i 就可以键入字符了, 在root = ALL(ALL:ALL) ALL 的下面敲击 用户 ...
- day13-Servlet03
Servlet03 11.练习 快捷键-可以快速地在访问的文件件切换 ctrl+alt+向左箭头:回到上次访问的位置 ctrl+alt+向右箭头:回到下一步访问的位置 11.1CatServlet 首 ...
- 安装完exe版本jdk之后未配置java_home和path环境变量仍然可以在cmd中使用java命令原因解释
如题: 为何可以 打出Java -version的版本 ,因为jdk安装过程,拷贝了java\javac等几个命令到C:\windows\system32目录了. 如果使用javac -version ...
- Windows下写脚本无法运行在linux上?怎麽办?
Windows下写脚本无法运行在linux上?怎麽办? $'\r': command not found的解决方法 在Linux系统中,运行Shell脚本,出现了如下错误: one-more.sh: ...
- jQury(事件及其他方法)
一. jQuery 事件注册 单个事件注册 语法: element.事件(function(){}) $("div").click(function(){ 事件处理程序 }) 其他 ...
- 记录--Cesium+Vue实战教程——地图导航
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 项目效果 我们今天要实现的是一个路径规划的功能,有两个输入框.输入起点终点,然后查询,得到规划的路径,效果如下: 我们会用到以下库: Ax ...