+
记录工作中使用Python 解决问题的愉快经历,兼聊组织开发过程, LiterateProgramming 之Leo 应用
Contents
怎么的? --任务提出
任务的由来
工作中管理部门开发的CVS仓库部门CVS状态
- 部门在调整了项目组后,重新架构了部门的开发环境,处于中心地位的CVS进行了精心安排
- 专门开发了 CVSmana 管理页面来统一快速的安排CVS和对应的用户的SSH 验证密匙
- 以便,可以针对增长的项目快速进行CVS分配!
- 全部运行在 FreeBSD 5.3-RELEASE-p2-DELPHIJ 中的 CVS 1.11.17-FreeBSD
当前邮件技术部 各项目组的专用CVS仓库分布
- 专门开发了 CVSmana 管理页面来统一快速的安排CVS和对应的用户的SSH 验证密匙
项目组 |
系统目录 |
说明 |
原先的CVS |
/cvs/root/cvsroot |
现在仅仅作为备份,不建议继续在其上进行开发管理 |
运营维护项目组 |
/cvs/root/runmanage |
|
Webmail产品组 |
/cvs/root/webmail] |
|
MTA产品组 |
/cvs/root/MTA |
|
Interface产品组 |
/cvs/root/sinaInterface |
|
Index产品组 |
/cvs/root/sinaIndex |
|
测试管理中心 |
/cvs/root/scm |
|
强力系统组 |
/cvs/root/sinasys |
|
- 而且通过 CVSup 每周自动同步到专用的备份机器中
- 本来想就仅仅让研发中心可以接触备份的CVS服务器就好的,还是按照原来的工作方式来统计嘛!
但是!!!
每周统计需求
研发中心,的每周开发活动统计,面对如此多的仓库,手工来分析就痛苦了!
- 经过反复交流,最终确定了周CVS活动统计的指标性数据为:
- 每周总更新文件数目
- 每周总更新修改次数
- 并且要抽查,备份相应文件
其中的"更新"指CVS中 文件提交,增加文件,执行tag命令
- 仅仅是确定需求,就花费了不少时间, 中间变换了多种统计辅助方法,但是都是Python 来快速组织实现,并进行运行的!
8过!确认后,快速解决为简单的一个汇报XML文件!
-- 点击展开各CVS中各模块的更新情况,并有查阅,下载链接!
-- ZoomQuiet [2005-01-05 09:55:53]
怎么样! --四处尝试
如何快速实现这样的自动分析汇报呢?
照猫画虎!是也乎!哈哈哈!
Contents
系统工具尝试
- 开始想通过 FreeBSD 中的 find,awk,sed 什么的功能来自个儿组合一个分析方案
一定时期内被更新的文件
- 反复尝试后得到:
# find /path/to/my/CVS -mtime -7 -type f | wc -l | awk '{print $1}'
输出统计数目- 那未 Python 组织自动分析所有CVS:
/modifiles.py -- 执行脚本
执行结果: /statcvs.xml
- 页面解析效果:
- 但是如何统计CVS操作的次数?通过对比 CVSROOT/History 记录行数?!
最终发现发现--太麻烦!也不好定制-- 放弃
statcvs-xml 尝试
后来统一在 statcvs-xml 的JAVA分析工具上!
- 但是依然麻烦!
- 虽然有完善的图表汇报,但是,只能针对模块进行分析,
StatCvs-XML 0.9.4 代码活动--分析效果
- 而且只能先 生成log 文件再进行分析!然而log 文件,又要在 check out 模块代码后才能够生成!
Quickstart -- 应用的说明
- 最后还是在Python 的帮助下自动将各模块的分析页面进行汇总:
形成可积累的XML汇报文件
- 虽然,问题没有完全解决,但是解析XML的XSL模板却是个愉快的体验!
/weeklystat.py -- 分析脚本
/weeklystat.xml -- 记录文档
/weeklystat.xsl -- 解析模板
history 分析!
- 最后还是回想交流需求时,提到的原先CVS统计处理是:
每周记录CVSROOT中的 history 文件的行数,对比得到本周的CVS操作次数来估计更新数量!
- 嗯嗯!当然的有 limodou 的先期尝试:
- 获得类似的CVS分析成果
- 哈哈哈!得来全不费工夫!
根据具体情况加入设置文件的支持组织为/cvsanalyser.py
- 只要在系统的任何地方可以运行Python脚本,
设置/cvsanalyser.conf 文件就可以自动分析CVS活动了!
- 说白了,就是:
- 模拟原先的统计活动,使用Python 来快速实现:
- 自动的从所有CVS仓库中取出 history 文件
- 根据时间限定来过滤出有效的操作记录
- 统计这些记录中的更新次数和文件
- 组织汇报为XML文件,并根据ViewCVS站点的链接,组合出下载,查阅地址!
文学编程!
- 以上的源代码,可以看到有很多 的注释!
-- 等等!类似的已经泄露了天机!是 Leo 编辑管理的!
LeoEnvironment -- Leo 文学编程环境!
ZoomQuiet [2005-01-05 09:56:01]
怎么来? --实现与部属
如何来实现这样的自动统计?
布署步骤
- 安装Python 环境!
- ViewCVS和自动分析脚本都需要 Python....
还有 elementtree -- Python 中精巧的XML 支持包
- 安装 ViewCVS !
- 因为查阅,下载链接指向的是基于 你CVS的ViewCVS站点链接!
- 安装cvsanalyser
- 就几个文件,可以从CVS 中检出,也可以本地下载:
- 放置到随便哪个目录,KO!
- 设置 cvsanalyser:
- 就几项:
- cvsroot = 你的CVS仓库的系统路径
- time = 时间区间,以天为单位
- cvs = CVS仓库列表 用空格 划分
- viewcvs = 你的CVS的ViewCVS 站点
- xml = 想要将统计结果输出到哪个XML文件(此文件应该事先有一个初始文件,以便追加引水结果)
- 就几项:
- 运行:
#python cvsanalyser.py
- 一切正常话,看到一些运行反馈后,XML文件就生成好了!
- 只要 .ico;.css;.xsl 文件和xml 文件在同一目录,直接从浏览器中打开XML 文件就可以看到完善的统计汇报了!
- 自动运行:
- FreeBSD 中当然是 cron 守护,Win32 中也差不多都是计划任务了
类似:
# 可以在 /etc/crontab 中追加 # Zoomq 050105 cvsanalyser run 13 5 * * 5 root python cvsanalyser.py # 表示每周三 05:13 执行 python cvsanalyser.py 以root 用户的身份
-- 当然,如果路径不合,需要使用绝对路径!- 反正都是一样的运行命令
- 不过,提醒的是:
- cvsanalyser.py 中,有一行现在还需要设置:
- {{{# 必须正确指定配置文件路径在此
- self.cfg.read("/home/zoomq/share/statcvs/cvsanalyser.conf") }}}
- 要指定设置文件的具体路径
- 好了!以上!感谢Python 可以令我快速的实现,任何想法!
Todo
- 进一步参数化脚本,可以在各种系统中正常运行
- 优化设置文件的读取,不再需要定制脚本本身
ZoomQuiet [2005-01-05 09:56:12]
怎么了? --反馈与交流
也想这样来自动分析你的CVS?那未,设置中有什么问题,请在此讨论
-- ZoomQuiet (2005-01-05)