When working ALU IMS Patch team, we need to static the SU duration to add it to the patch report, the duration time alway is hard work, so I write the follow tool to auto do this work.

 #!/usr/bin/python2.6
import re,datetime
file_name='/home/alzhong/logs/qtat1/R2860.01.13/sim-applycommitrollback-bld1.log'
file=open(file_name,'r')
acnum=[];time_res=[];lnum=0
def trans_time(time):
t1=datetime.datetime.strptime(time,'%y/%m/%d %H:%M:%S')
return t1
for (num,line) in enumerate(file): if(re.search(r'^(.*)BEGINNING SIM PROCEDURE(.*)$',line)):
m=re.search(r'^(.*)BEGINNING SIM PROCEDURE(.*)$',line)
print 'Step %d:'%(lnum), m.group(0);lnum+=1
acnum.append(trans_time(line[0:17]))
elif(re.search(r'^(.*)CP_W(.*)$', line)):
m=re.search(r'^(.*)CP_W(.*)$', line)
print 'Step %d:'%(lnum), m.group(0);lnum+=1
acnum.append(trans_time(line[0:17]))
elif(re.search(r"^(.*)VERIFY_S(.*)$", line)):
m=re.search(r"^(.*)VERIFY_S(.*)$", line)
print 'Step %d:'%(lnum), m.group(0);lnum+=1
acnum.append(trans_time(line[0:17]))
elif(re.search(r"^(.*)--action commit(.*)$",line)):
m=re.search(r"^(.*)--action commit(.*)$",line)
print 'Step %d:'%(lnum), m.group(0);lnum+=1
acnum.append(trans_time(line[0:17]))
elif(re.search(r"^(.*)COMPLETED SIM PROCEDURE(.*)$",line)):
m=re.search(r"^(.*)COMPLETED SIM PROCEDURE(.*)$",line)
print 'Step %d:'%(lnum), m.group(0);lnum+=1
acnum.append(trans_time(line[0:17]))
elif(re.search(r"^(.*)RESUMING SIM PROCEDURE(.*)$",line)):
m=re.search(r"^(.*)RESUMING SIM PROCEDURE(.*)$",line)
print 'Step %d:'%(lnum), m.group(0);lnum+=1
acnum.append(trans_time(line[0:17])) file.close()
if(re.search(r"^(.*)backout(.*)$",file_name)):
time_res.append((acnum[2]-acnum[0]).seconds/60)
time_res.append((acnum[4]-acnum[3]).seconds/60)
time_res.append((acnum[6]-acnum[5]).seconds/60)
time_res.append(((acnum[8]-acnum[7])+(acnum[10]-acnum[9])+(acnum[13]-acnum[11])).seconds/60)
print "\n3). sim --proc update --action apply to \"CP_WARNING\" %s mins" %(time_res[0])
print "4). sim --proc update --action resume to \"VERIFY_SOFTWARE\" %s mins"%(time_res[1])
print "5). sim --proc update --action resume to \"COMMIT\" %s mins"%(time_res[2])
print "8). Backout from RXX to RXX %s mins"%(time_res[3])
elif(re.search(r"^(.*)rollback(.*)$",file_name)):
time_res.append((acnum[2]-acnum[0]).seconds/60)
time_res.append((acnum[4]-acnum[3]).seconds/60)
time_res.append((acnum[6]-acnum[5]).seconds/60)
time_res.append((acnum[8]-acnum[7]).seconds/60)
time_res.append(((acnum[10]-acnum[9])+(acnum[12]-acnum[11])+(acnum[15]-acnum[13])).seconds/60)
print "\n3). sim --proc update --action apply to \"CP_WARNING\" %s mins" %(time_res[0])
print "4). sim --proc update --action resume to \"VERIFY_SOFTWARE\" %s mins"%(time_res[1])
print "5). sim --proc update --action resume to \"COMMIT\" %s mins"%(time_res[2])
print "6). sim --proc update --action commit to end of Patch %s mins"%(time_res[3])
print "8). Rollback from RXX to RXX %s mins" %(time_res[4])
if __name__ == '__main__':
pass

The output of the script as follows:

<lsslogin1-alzhong>/home/alzhong/tools: ls
simt
<lsslogin1-alzhong>/home/alzhong/tools: ./simt
Step 0: 14/06/16 12:31:32 BEGINNING SIM PROCEDURE 'update apply' type=hot ...
Step 1: 14/06/16 13:18:42 RESUMING SIM PROCEDURE 'update apply' type=hot ...
Step 2: 14/06/16 13:30:43 SIM0317 PAUSE_REQUEST: (PROCEDURE) [PAUSE(CP_WARNING): Use 'sim --proc update --action resume' to continue...] (update:1435)
Step 3: 14/06/16 13:43:40 RESUMING SIM PROCEDURE 'update apply' type=hot ...
Step 4: 14/06/16 13:47:49 SIM0343 PAUSE_REQUEST: (PROCEDURE) [PAUSE(VERIFY_SOFTWARE): Use 'sim --proc update --action resume' to continue...] (update:1634)
Step 5: 14/06/16 13:54:26 RESUMING SIM PROCEDURE 'update apply' type=hot ...
Step 6: 14/06/16 14:25:41 SIM0496 PAUSE_REQUEST: (COMMIT) [PAUSE(COMMIT): Use 'sim --proc update --action commit' to continue...] (update:2579)
Step 7: 14/06/16 14:41:51 RESUMING SIM PROCEDURE 'update commit' type=hot ...
Step 8: 14/06/16 15:18:34 COMPLETED SIM PROCEDURE 'update commit' type=hot
Step 9: 14/06/16 15:31:35 BEGINNING SIM PROCEDURE 'update rollback' type=hot level=9999 ...
Step 10: 14/06/16 15:47:34 SIM0091 PAUSE_REQUEST: (PROCEDURE) [PAUSE(CP_WARNING): Use 'sim --proc update --action resume' to continue...] (update_rlbk:421)
Step 11: 14/06/16 15:53:30 RESUMING SIM PROCEDURE 'update rollback' type=hot level=9999 ...
Step 12: 14/06/16 16:02:03 SIM0135 PAUSE_REQUEST: (PROCEDURE) [PAUSE(VERIFY_SOFTWARE): Use 'sim --proc update --action resume' to continue...] (update_rlbk:564)
Step 13: 14/06/16 16:04:22 RESUMING SIM PROCEDURE 'update rollback' type=hot level=9999 ...
Step 14: 14/06/16 16:09:42 RESUMING SIM PROCEDURE 'update rollback' type=hot level=9999 ...
Step 15: 14/06/16 16:26:56 COMPLETED SIM PROCEDURE 'update rollback' type=hot level=9999 3). sim --proc update --action apply to "CP_WARNING" 59 mins
4). sim --proc update --action resume to "VERIFY_SOFTWARE" 4 mins
5). sim --proc update --action resume to "COMMIT" 31 mins
6). sim --proc update --action commit to end of Patch 36 mins
8). Rollback from RXX to RXX 47 mins

A python tool to static sim.log duration time的更多相关文章

  1. Python Tool Visual Studio简单使用

    由于一直在做.NET的开发,一直用的IDE是VS系列的,所以想用VS也能开发Python,刚好微软提供一个插件PTVS(Python Tool Visual Studio)专门应用于Python开发的 ...

  2. Cppcheck - A tool for static C/C++ code analysis

    cppcheck是一个个检测源码的工具,对编译工具的一个补充,mark Cppcheck - A tool for static C/C++ code analysis Syntax: cppchec ...

  3. Python的logging,记录log的包

    最近在做自动化测试时,想给他加上日志,所以用到logging的模块,以下是python增加log的几种方式 一.python代码配置方式(当然还有一种是可以多模块通用的一个python代码设置,这个网 ...

  4. Python OOP(2)-static method,class method and instance method

    静态方法(Static Method): 一种简单函数,符合以下要求: 1.嵌套在类中. 2.没有self参数. 特点: 1.类调用.实例调用,静态方法都不会接受自动的self参数. 2.会记录所有实 ...

  5. python脚本攻略之log日志

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  6. python django 访问static静态文件

    settings 文件配置: STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'),)PROJEC ...

  7. python 中 logging 模块的 log 函数以及坑

    记录下吧,一个日志的函数,但有个坑是在调用函数时需要先将函数实例化为一个变量,否则进入某个循环时会多次刷新日志: """ 日志模块 """ ...

  8. python的logging,将log保存到文件

    import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(line ...

  9. pythonのdjango 在控制台用log打印操作日志

    在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_loggers': False, ' ...

随机推荐

  1. 【JavaScript回顾】继承

    组合继承 组合继承(combination inheritance),有时候也叫做伪经典继承,指的是将原型链和借用构造函数的 技术组合到一块,从而发挥二者之长的一种继承模式.其背后的思路是使用原型链实 ...

  2. C#中CookieContainer获取里面cookie值异常:InvokeMember("m_domainTable") FieldAccessException

    1.可能是主机提供商的 安全问题. Their hosts works in medium trustsecurity, and ASProxy needs a full trust security ...

  3. 用C#编程的建议

    1.如果可能尽量使用接口来编程       .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类.然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更 ...

  4. 最新的SqlHelper 类

    最新的SqlHelper 类 摘自:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html using System; using S ...

  5. 关于WPF绘图中的path.data在后台重新赋值的语法

    //XAML语法 <Path Name="path_M" Fill="LawnGreen" Data="M 0 0 L 100 0 L 100 ...

  6. 【Asphyre引擎】Asphyre时隔3年,更名为PXL,全平台支持!

    ps:回忆日志 新版本10月初就推出了,我第一时间(10.2日更新,我当天就看到了)下载下来.发现部分Demo需要XE8才能编译通过,又去下载了一个XE8.折腾完已经深夜,只是粗粗的把Demo都编译了 ...

  7. gcd和拓展gcd算法

    gcd算法是用来求两个数最大公约数的算法,他是依靠辗转相除(中国好像叫辗转相减)法来求两个数的最大公约数,别的地方也有很多介绍不做过多赘述,主要提供代码供自己参考. gcd(int a,int b) ...

  8. H5调用Android播放视频

    webView.loadUrl("http://10.0.2.2:8080/assets/RealNetJSCallJavaActivity.htm"); js调用的Java文件中 ...

  9. playframework中多附件上传注意事项

    playframework中多附件上传注意事项 2013年09月24日 play 暂无评论 //play版本问题 经确认,1.0.3.2版本下控制器中方法参数  List<File> fi ...

  10. JSDoc那些事

    几天工作上需要文档化一些Javascript东西,所以在找一些JS文档化工具,以下分析几种工具. 1.JSDoc-toolkit 一开始还想用这个工具,但后来在解析生成文档时候,出现了很严重的错误,还 ...