日志分析统计的工具。

统计每个人在cvs库上的操作,统计出某天某人提交了几个文件,删除了几个文件之类的。她们一开始找的是一个开源的cvs日志查看工具,是python写的一个cgi页面,执行效果大概如下图:


但是这个界面用起来不是很称心。使用不方便,且无统计功能等。于是她们找了我,希望我能按她们的要求进行修改。

python,最大的优势是方便,而且跨平台(因为有很多个cvs配置库,有win,有linux,有I386,有X64)。不过不写成cgi的方式了,没意义。而是直接以脚本方式执行。

完成后,大概功能如下:



  1. 可以指定要查询的cvs账号,或者默认查询全部用户
  2. 可以排除要查询的cvs账号,如系统管理员cvsroot账号等
  3. 可以指定要统计的日期begin_date,end_date
  4. 可以指定要统计的操作类型,如Checkout,RTag,Update,Commit,Addition等
  5. 如果配置成crontab来执行,也可以指定脚本的统计周期,即:统计当天之前的n天数据
  6. 可以显示统计结果,每个账号在指定日期内某个操作所影响的文件数量
  7. 可以将统计详细结果保存成csv文件,里面包含详细的操作记录,并对csv文件进行zip压缩
  8. 可以配置邮件信息,将统计结果和详细操作记录文件发送到指定的电子邮箱。



这样,在完成该脚本后,她们可以配置个crontab,这样,就可以不用每天手动执行脚本了。她们每天只需要做的就是收一下邮件,看看邮件内容。如果发现有异常记录,再找相关的人员进行核实就可以了,极大的减轻了工作量。

smtplib.SMTPAuthenticationError: (535, ’5.7.0 authentication failed’)

上网搜了不少的文章,感觉都是针对旧版本的python的,而我用的是2.7版本。因为有些文章说要改某某源码,我检查python源码后,发现源码早已不是那样了。

最后,发现可以改smtplib.py文件,将preferred_auths = [AUTH_CRAM_MD5, AUTH_PLAIN, AUTH_LOGIN] 改成 preferred_auths = [AUTH_LOGIN,AUTH_CRAM_MD5, AUTH_PLAIN]即可。因为有些esmtp服务器认证方式比较特殊,对AUTH_CRAM_MD5的支持好像有些问题。

再后来,认真研究了一下smtplib.py文件后,发现可以不用改这个文件的源码了,可以直接在代码里指定认证方式。代码如下:

smtp = smtplib.SMTP()
 #set debug level .
 #smtp.set_debuglevel(1)
 smtp.connect(server)
 #smtp.docmd( “EHLO server” )
 smtp.ehlo();
smtp.esmtp_features["auth"] = ‘LOGIN’ #这里对认证方式进行指定
smtp.login(user, passwd)
 smtp.sendmail(strFrom, toAdd, msgRoot.as_string())
 smtp.quit()


 

 

 

 

哥们,多谢你发的代码!

我在CVS服务器上用了一下, COPY到history文件所在目录。设置好ini文件,运行程序,但是报错。

$ ./GetHistory.py
: bad interpreter: No such file or directory

我在 if __name__==”__main__”: 这句后面添加一个print 调试,结果并没有执行到这里。能帮忙看看吗?

另外,邮件设置里好像没有端口设置,很多SMTP,比如gmail,都要用加密的tls 或者ssl了,这个该怎么设?

再次感谢!

 

 

 

 


  •  

     

     

     

    : bad interpreter: No such file or directory

    这个错误,一般是文件格式问题吧,你用UE之类的工具把文件转成unix格式的再试试看。有些ftp工具上传的时候会改格式,用bin方式上传比较好。或者看下你自己主机上的python解释器的安装路径。

    写工具的时候本意是只在我们自己内网使用的,用的是内网的邮箱,所以没考虑端口配置等。你可以google一下“python 邮件 gmail”,修改函数sendEmail和相关配置即可。

     

     

     

     


    •  

       

       

       

      非常感谢!dos2unix 一下以后,解决。SMTP问题也搞定了。

      smtp.connect(server)—> smtp.connect(server,587)

      smtp.ehlo() 之后添加一句
      smtp.starttls()

       

       

       

       

  1.  

     

     

     

    有一个问题,不能设定针对 branch tag 来统计,不知道有没有办法解决?

     

     

     

     



  2.  

     

     

     

    I’ll immediately grab your rss feed as I can not to find your email subscription hyperlink or e-newsletter service. Do you have any? Kindly allow me understand in order that I may subscribe. Thanks.