# TSTevent.def: Extracts Event Log Information # $Id: TSTevent.def,v 1.6 2008/02/25 17:32:56 mschenke Exp $ # ARCS: $Header: /home/cvs/repository/RDA_4/src/scripting/lib/modules/TSTevent.def,v 1.6 2008/02/25 17:32:56 mschenke Exp $ # # Change History # 20080225 MSC Change the copyright notice. =head1 NAME TSTevent - Extracts Event Log Information =head1 DESCRIPTION -T event or -T event:Collect Produces an overview of the data collection execution duration, including the tools and test modules execution. -T event:Setup Produces an overview of the data collection setup duration. In some cases, data collection duration time can include the setup time, particularly for tasks performed before the creation of the report directory. =cut echo tput('bold'),'Processing the event log ...',tput('off') # Initialisation var (%fix,%mod,%tst) = ('CFG',1,'END',1,'INI',1,'LOAD',1,'RDSP',1) # Analyze the arguments var ($flg,@log) = (true) if getSetting('TST_ARGS') {loop $opt (split(',',last)) {if match($opt,'^C(ollect)?$',true) var $flg = true elsif match($opt,'^S(etup)?$',true) var $flg = false else var @log = (@log,grepDir($opt,'^RDA\.log$','ir')) } } if !scalar(@log) var @log = (catFile(getSetting('RPT_DIRECTORY'),'RDA.log')) # Define the parsing macros macro debug {debug @arg return 0 } macro add_collect {var ($lin) = @arg var $cfg = field('\|',1,$lin) call addDataValue('CFG',$cfg,'evt',$lin) call setDataValue('CFG',$cfg,'flg',false) return -1 } macro add_setup {var ($lin) = @arg var ($tim,$cfg) = split('\|',$lin,3) if getDataValue('CFG',$cfg,'flg') call setDataValue('CFG',$cfg,'beg',$tim) return -1 } macro beg_session {var ($nam,$lin) = @arg var ($tim,$cfg) = split('\|',$lin,3) call end_session($nam,$cfg) call setDataValue('CFG',$cfg,'ref',$tim) call setDataValue('CFG',$cfg,'beg',$tim) call setDataValue('CFG',$cfg,'flg',true) return -1 } macro end_session {var ($nam,$cfg) = @arg import %mod,%tst keep %mod,%tst if getDataValue('CFG',$cfg,'beg') {var $beg = last var $key = join('|',$nam,$cfg,nvl(getDataValue('CFG',$cfg,'ref'),$beg)) var ($dur,$prv,$off) = parse_time($beg,0,0) if getDataValue('CFG',$cfg,'evt') {loop $evt (last) {var ($tim,undef,undef,$mod) = split('\|',$evt,5) var ($dur,$prv,$off) = parse_time($tim,$prv,$off) if match($mod,'^S\d{3}(.*)',true) {var $mod = uc(last) incr $mod{$mod} call setDataValue('RPT',$key,$mod,$dur) } elsif match($mod,'^(TL|TST)(.*)',true) {var (undef,$mod) = (last) incr $tst{$mod} call setDataValue('TST',$key,$mod,$dur) } } if getDataValue('CFG',$cfg,'db') call setDataValue('DB',$key,true) } } call deleteData('CFG',$cfg) return -1 } macro parse_time {var ($tim,$prv,$off) = @arg var $nxt = $off incr $nxt,expr('*',substr($tim,9,2),3600) incr $nxt,expr('*',substr($tim,11,2),60) incr $nxt,substr($tim,13,2) var $dur = $nxt decr $dur,$prv if expr('<',$dur,0) {var $dlt = cond(expr('>',$dur,-3600),$dur,-86400) decr $dur,$dlt decr $nxt,$dlt decr $off,$dlt } return ($dur,$nxt,$off) } # Define the parsing directives call parseVar($lin) call parsePattern('TOP',\ '^\d{8}_\d{6}\|',\ cond(compare('ne',$cur,substr($lin,0,8)),\ debug(assign($cur,substr($lin,0,8))),\ 0),\ '.?',-1) if $flg call parsePattern('TOP',\ '^(.*?\|){2}C\|',\ add_collect($lin),\ '^(.*?\|){2}S\|',\ add_setup($lin),\ '^(.*?\|){2}b\|',\ beg_session($nam,$lin),\ '^(.*?\|){2}e\|',\ end_session($nam,field('\|',1,$lin)),\ '\|s\|S000INI\|DB\|.*\|No database access ',\ code(setDataValue('CFG',field('\|',1,$lin),'db',true),\ 0)) else call parsePattern('TOP',\ '^\d{8}_\d{6}\|[^\|]*\|S\|',\ code(addDataValue('CFG',field('\|',1,$lin),'evt',$lin),\ 0),\ '^\d{8}_\d{6}\|[^\|]*\|b\|',\ beg_session($nam,$lin),\ '^\d{8}_\d{6}\|[^\|]*\|e\|',\ end_session($nam,field('\|',1,$lin))) # Parse the event logs loop $log (@log) {next !createBuffer('LOG','R',$log) debug ' Inside TSTevent, parsing ',$log,' ...' var ($cur,$nam) = ('00000000',dirname($log)) call parse('LOG') loop $cfg (getDataKeys('CFG')) call end_session($nam,$cfg) call deleteBuffer('LOG') } # Produce the report call purge('O','EVENT_log',0) report EVENT_log var @mod = keys(%mod) if $flg {debug ' Inside TSTevent, producing the data collection overview ...' prefix {write '---+ Data Collection Duration' write '|*Directory*|*Setup*|*Start*| *Db* | *',join('*| *',@mod),\ '*| *Fixed*| *Total*|' } loop $run (getDataKeys('RPT')) {var ($fix,$tot,@rpt) = () loop $mod (@mod) {var $val = getDataValue('RPT',$run,$mod) if defined($val) {if $fix{$mod} incr $fix,$val incr $tot,$val } var @rpt = (@rpt,nvl($val,'')) } write '|',$run,'| ',cond(getDataValue('DB',$run),'N','Y'),' | ',\ join('| ',@rpt),'| ',$fix,'| ',$tot,'|' } debug ' Inside TSTevent, producing the tool/test module overview ...' prefix {write '---+ Tool/Test Module Duration' write '|*Directory*|*Setup*|*Start*| *',join('*| *',keys(%tst)),'*|' } loop $run (getDataKeys('TST')) {var @rpt = () loop $mod (keys(%tst)) {var $val = getDataValue('TST',$run,$mod) var @rpt = (@rpt,nvl($val,'')) } write '|',$run,'| ',join('| ',@rpt),'|' } } else {debug ' Inside TSTevent, producing the module setup overview ...' prefix {write '---+ Module Setup Duration' write '|*Directory*|*Setup*|*Start*| *',join('*| *',@mod),'*| *Total*|' } loop $run (getDataKeys('RPT')) {var ($tot,@rpt) = () loop $mod (@mod) {var $val = getDataValue('RPT',$run,$mod) if defined($val) incr $tot,$val var @rpt = (@rpt,nvl($val,'')) } write '|',$run,'| ',join('| ',@rpt),'| ',$tot,'|' } } if isCreated(true) echo renderFile() =head1 COPYRIGHT NOTICE Copyright (c) 2002-2008, Oracle. All rights reserved. =head1 TRADEMARK NOTICE Oracle, JD Edwards, PeopleSoft, and Siebel are registered trademarks of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. =cut