2016年1月17日 星期日 小雨
周六花了半天时间写了个抓取统计bugzilla上bug个数的程序,在SAE上跑。
原因:客户要去我们每天统计bug,发日报,汇报TOP问题进展。而我们的bug分布在两个不同的bug系统上,每次还要统计待修改的、待回归验证的、已关闭的和总数。每次都耗费不少时间,既然如此,不如写段程序干这样的工作,用图表呈现让客户满意,顺便也是写code自娱。
这个程序比较简单,我没有草稿,脑子想一想,只是不断地迭代开发,大概的开发过程:
-
先走本地写一个Python脚本,登录bugzilla系统,用正则统计出各种bug数量的个数。
-
把这个脚本迁移到SAE上,发现也能跑,看print出来的日志是OK的,也就安心了。我用到了LWPCookieJar(),在SAE上没有报错。
-
写Model,筹划如何存储。我一般用kvdb,不同日期不同属性的数据用逗号分号冒号这样区分开来。存的时候拼装好,用到时候通过split分隔开来。一般来说,这些不重要的数据,我都会只存365天,超过的话会先进先出的,这样数据库不会被爆掉。另外,写kvdb这样的都是我之前封装好的成熟函数。
[code] class BugNum: @staticmethod def add_bn(project,data): MAX_LEN = 365 nt = datetime.utcnow() + timedelta(hours=+8) hour= nt.hour mins= nt.minute nowtime = nt.strftime(’%m/%d’) #today = nt.strftime(’%Y%m%d')
#记录每天的实时数据,只记录一次,每天17:00 cron #格式,每天数据用冒号分开,每组数据用逗号分开,bug严重程度用逗号分开 #日期;open;fix;close:日期;open;fix;close #01/16;12,34,56,78;12,34,56,78;12,34,56,78:01/17;12,34,56,78;12,34,56,78;12,34,56,78 k = ‘bn_%s’ % (str(project)) obj = getkv(str(k))
if obj: myset = obj.split(’:’) length = len(myset) #当天每小时cron更新一次 if nowtime in obj: if length > 1: obj = ‘%s:%s;%s’ % (’:’.join(myset[:-1]),nowtime,data) else: obj = ‘%s;%s’ % (nowtime,data) else: if length > MAX_LEN: obj = ‘%s:%s,%s’ % (’:’.join(myset[1:]),nowtime,data) else: obj = ‘%s:%s;%s’ % (obj,nowtime,data) else: obj = ‘%s;%s’ % (nowtime,data) if not setkv(str(k),obj): print ‘[KVDB] set %s Err’ % (k)
[/code]
-
增加写数据存储接口,测试接口可用。
-
写表格函数,测试model存的数据可用,前端用bootstrap的表格。
-
用highcharts画曲线,highcharts很赞。
-
对新增model写函数,使得管理员也可以直接修改数据。(我对我之前写的kvdb管理钱不够满意)。
-
写cron,每天8点到晚上23点,每个整点调用一次爬数据。
只贴了model的代码,因为我觉得比较重要。不贴其他代码了,没什么技术含量,只是稍微总结一下开发过程,我写的时候都是凭着直觉写下去的,还算比较顺利。看来以后这种统计曲线或者每天签到的程序,我已经驾轻就熟了。
最后,为了保持自己对编程和blog的热爱,我觉得以后每周至少写一篇博客和写一段实用的程序。
...