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. Python入门笔记(5):对象

    一.学习目录 1.pyhton对象 2.python类型 3.类型操作符与内建函数 4.类型工厂函数 5.不支持类型 二.思考 1.Python解释执行原理? 2.Python对象机制? 3.Pyth ...

  2. c#开发工具软件集合

    visual studio 2015(自带Nuget) Resharper de4dot dnspy ILMergeGui Git 大漠插件3.1233 天使插件v4.019 Navicat_Prem ...

  3. kFreeBsd 国内开源镜像站汇总

    从http://bbs.chinaunix.net/archiver/tid-3756178.html这里抽取了debian源中支撑kfreebsd架构的源. 中科大: http://debian.u ...

  4. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  5. JMS学习(二)- JMS Message Model 组成介绍及消息头详解

    一.前言 从本文起依次详细介绍JMS中的一些重要的概念,主要参考了官方的JMS1.1的文档,该文档很老了,是02年的,那年,JAVA还没有被Oracle收购..本文主要介绍Message及其相关概念, ...

  6. Java多线程--wait(),notify(),notifyAll()的用法

    忙等待没有对运行等待线程的 CPU 进行有效的利用(而且忙等待消耗cpu过于恐怖,请慎用),除非平均等待时间非常短.否则,让等待线程进入睡眠或者非运行状态更为明智,直到它接收到它等待的信号. Java ...

  7. EffectiveJava——复合优先于继承

    继承时实现代码重用的重要手段,但它并非永远是完成这项工作的最佳工具,不恰当的使用会导致程序变得很脆弱,当然,在同一个程序员的控制下,使用继承会变的非常安全.想到了很有名的一句话,你永远不知道你的用户是 ...

  8. 关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案

    不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改” 解决方法:  打开SQL SERVER 2008 工具-->选项- ...

  9. [.NET] SQL数据总笔数查询

    [.NET] SQL数据总笔数查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

  10. SharePoint 2013 新功能探索 之 列表等级设置

    一.列表等级及赞功能 ,在SharePoint 2010 中,对列表的等级设定,需要一定时间才能看到,现在可以实时同步,评分人数也能显示出来 等级分为两类 赞和星级评定