# S550ESS.def: Collects Oracle Essbase Information # $Id: S550ESS.def,v 1.8 2009/08/08 09:50:04 mschenke Exp $ # ARCS: $Header: /u02/webapps/workbench/cvs/RDA_4/src/scripting/lib/modules/S550ESS.def,v 1.8 2009/08/08 09:50:04 mschenke Exp $ # # Change History # 20090808 DEM Increase code robustness for missing tools. =head1 NAME S550ESS - Collects Oracle Essbase Information =head1 DESCRIPTION This module collects information for Oracle Essbase. The following reports can be generated and are regrouped under C: =cut echo tput('bold'),'Processing ESS module ...',tput('off') # Initialization var $HYPERION_HOME = getSetting('ESS_HOME',getEnv('HYPERION_HOME','')) var $ARBORPATH = getSetting('ESS_ARBORPATH',getEnv('ARBORPATH','')) var $HOST = getSetting('ESS_HOST','LOCAL') var $USERID = getSetting('ESS_USER') var $APPNAME = getSetting('ESS_APPNAME') var $DBNAME = getSetting('ESS_DBNAME') var $TAIL = getSetting('RDA_TAIL',1000) var $AGE = getSetting('ESS_AGE',15) var $TOC = '%TOC%' var $TOP = '[[#Top][Back to top]]' pretoc '1:Oracle Essbase' # Adjust directories if $HYPERION_HOME var $HYPERION_HOME = catDir($HYPERION_HOME) if $ARBORPATH var $ARBORPATH = catDir($ARBORPATH) if testDir('d',catDir($ARBORPATH,upDir(),'EssbaseServer')) {var $SERVER_DIR = lastDir() if testDir('d',catDir($ARBORPATH,upDir(),'EssbaseClient')) var $CLIENT_DIR = lastDir() } elsif testDir('d',catDir($ARBORPATH,upDir(),'EssbaseClient')) var $CLIENT_DIR = lastDir() else var $SERVER_DIR = $ARBORPATH # Load the common macros run library() macro fmt_bit {var ($val,$flg) = @arg var @bit = ('---','--x','-w-','-wx','r--','r-x','rw-','rwx',\ '--S','--s','-wS','-ws','r-S','r-s','rwS','rws') if $flg incr $val,8 return $bit[$val] } macro fmt_mode {var ($mod) = @arg return concat(substr("?pc?d?b?-?l?s???",expr('&',expr('>>',$mod,12),15), 1),\ fmt_bit(expr('&',expr('>>',$mod,6),7),expr('&',$mod,2048)),\ fmt_bit(expr('&',expr('>>',$mod,3),7),expr('&',$mod,1024)),\ fmt_bit(expr('&',$mod,7), expr('&',$mod,512))) } =head2 env - Environment Variables Collects environment variables. =cut debug ' Inside ESS module, getting environment variables' report env prefix {write '---+!! Essbase Environment Variables' write '|*Variable*|*Value*|' } loop $key ('ARBORPATH',\ 'PATH',\ 'HYPERION_HOME',\ 'ESSLANG',\ cond(isUnix(),\ check(getOsName(),'hpux',list('SHLIB_PATH','LD_LIBRARY_PATH'),\ getSetting('RDA_SHLIB')),\ list())) write '|',$key,'|',getEnv($key),' |' if isCreated(true) toc '2:[[',getFile(),'][rda_report][Environment Variables]]' =head2 config - Configuration Parameters Collects Oracle Essbase configuration parameters from F<$ARBORPATH/bin/essbase.cfg> file or F file. =cut if testDir('d',$ARBORPATH) {if testFile('r',catFile($SERVER_DIR,'bin','essbase.cfg')) {debug ' Inside ESS module, getting configuration parameters' report config var $fil = lastFile() prefix {write '---+!! Configuration Parameters' write '---## Information Taken from ',$fil write '|*Parameter*|*Value*|' } var $pat = '^((agent|server)threads|dyncalccachemaxsize|\ net(delay|retrycount)|serverport(begin|end))' loop $lin (grepFile($fil,$pat,'i')) {var ($key,@arr) = split('\s+',$lin) write '|',$key,' |',$arr[-1],' |' } if isCreated(true) toc '2:[[',getFile(),'][rda_report][Configuration Parameters]]' } =head2 startup - Startup Script Collects Oracle Essbase startup script. =cut debug ' Inside ESS module, getting startup script' var ($fil) = grepDir(catDir($SERVER_DIR,'bin'),\ '^startEssbase\.(sh|bat)$','p') if testFile('r',$fil) {report startup prefix {write '---+!! Startup Script' write '---## Information Taken from ',$fil } call writeFile($fil) if isCreated(true) toc '2:[[',getFile(),'][rda_report][Startup Script]]' } =head2 libtyp - Library Types Collects library file types from F or F directory. On UNIX, the collection depends on F command. =cut if $SERVER_DIR {debug ' Inside ESS module, getting library types' report libtyp var $dir = catDir($SERVER_DIR,'bin') if isUnix() {prefix {write '---+!! Shared Library Types' write '---## From ',$dir write '|*File*|*Type*|*Modified*|*Size*|*Mode*|' } var $pat = check(getOsName(),'aix','\.(a|so)$','\.(sl|so)$') loop $fil (grepDir($dir,$pat,'p')) {var ($lin) = command(concat('file ',$fil)) var @sta = getStat($fil) var ($fil,$ver) = split('\:\s+',$lin,2) write '|',basename($fil),' |',$ver,' |',\ getLastModify($fil,'%d-%b-%Y %H:%M:%S'),' | ',\ getSize($fil),'|',fmt_mode($sta[2]),' |' } } elsif isWindows() {prefix {write '---+!! Executable and Library Version Information' write $TOC } loop $fil (grepDir($dir,'\.(dll|exe)$','ip')) {write '---+ Version Information from ',basename($fil) call statFile('p',$fil) write '%BR%' var %inf = getVersionInfo($fil) loop $key (keys(%inf)) write '|*',replace($key,'\012',' ',true),' *|',\ replace($inf{$key},'\012','%BR%',true),' |' write $TOP } } if isCreated(true) toc '2:[[',getFile(),'][rda_report][Library Types]]' } =head2 clnlibtyp - Client Library Types Collects library file types from F directory. On UNIX, the collection depends on F command. =cut if $CLIENT_DIR {debug ' Inside ESS module, getting library types' report clnlibtyp var $dir = catDir($CLIENT_DIR,'bin') if isUnix() {prefix {write '---+!! Client Shared Library Types' write '---## From ',$dir write '|*File*|*Type*|*Modified*|*Size*|*Mode*|' } var $pat = check(getOsName(),'aix','\.(a|so)$','\.(sl|so)$') loop $fil (grepDir($dir,$pat,'p')) {var ($lin) = command(concat('file ',$fil)) var ($fil,$ver) = split('\:\s+',$lin,2) write '|',basename($fil),' |',$ver,' |',\ getLastModify($fil,'%d-%b-%Y %H:%M:%S'),' | ',\ getSize($fil),'|',statFile($fil),' |' } } elsif isWindows() {prefix {write '---+!! Client Executable and Library Version Information' write $TOC } loop $fil (grepDir($dir,'\.(dll|exe)$','ip')) {write '---+ Version Information from ',basename($fil) call statFile('p',$fil) write '%BR%' var %inf = getVersionInfo($fil) loop $key (keys(%inf)) write '|*',replace($key,'\012',' ',true),' *|',\ replace($inf{$key},'\012','%BR%',true),' |' write $TOP } } if isCreated(true) toc '2:[[',getFile(),'][rda_report][Client Library Types]]' } # Set the enviroment variables for getting the database information if getSetting('RDA_SHLIB') {var $slk = last var $slp = setEnv($slk,join(':',catDir($SERVER_DIR,'bin'),\ getEnv($slk,undef,true))) } var $ess = setEnv('ESSLANG','English_UnitedStates.UTF-8@Binary') var $arb = setEnv('ARBORPATH',$SERVER_DIR) =head2 dbinfo - Essbase Database Information Collects Oracle Essbase database information. For batch/cron execution, you can encode the password in the setup file using the pseudo user C. =cut debug ' Inside ESS module, getting Essbase database information' if getSetting('SQL_PASSWORD_ESSBASE_USER') var ($pwd) = unpack('u',last) else var $pwd = askPassword('Enter password for Oracle Essbase: ') var $out = getTemp('out') var $cmd = catFile($SERVER_DIR,'bin','ESSCMD') if testFile('fx',$cmd) {if isUnix() {output P,concat(lastCommand(),' > ',quote($out,'x')) write 'LOGIN "',join('" "',$HOST,$USERID,$pwd),'";' if $APPNAME {write 'GETAPPINFO "',$APPNAME,'";' write 'GETAPPSTATE "',$APPNAME,'";' } else {write 'GETAPPINFO;' write 'GETAPPSTATE;' } if and($APPNAME,$DBNAME) {write 'GETDBINFO "',$APPNAME,'" "',$DBNAME,'";' write 'GETDBSTATE "',$APPNAME,'" "',$DBNAME,'";' } else {write 'GETDBINFO;' write 'GETDBSTATE;' } if and($APPNAME,$DBNAME) {write 'GETDBSTATS;' write $APPNAME write $DBNAME } write 'EXIT;' close report dbinfo prefix {write '---+!! Essbase Database Information' write ' * Environment variables have been set as following for getting \ the database information' write ' * ARBORPATH set to ',getEnv('ARBORPATH',undef,true) write ' * ESSLANG set to ',getEnv('ESSLANG',undef, true) write ' * ',$slk,' set to ',getEnv($slk,undef,true) } call writeFile($out) call unlinkTemp('out') } elsif isWindows() {var $cmd = lastCommand() var $tmp = createTemp('job','.SCR',true) call writeTemp('job','LOGIN "',join('" "',$HOST,$USERID,$pwd),'";') if $APPNAME {call writeTemp('job','GETAPPINFO "',$APPNAME,'";') call writeTemp('job','GETAPPSTATE "',$APPNAME,'";') } else {call writeTemp('job','GETAPPINFO;') call writeTemp('job','GETAPPSTATE;') } if and($APPNAME,$DBNAME) {call writeTemp('job','GETDBINFO "',$APPNAME,'" "',$DBNAME,'";') call writeTemp('job','GETDBSTATE "',$APPNAME,'" "',$DBNAME,'";') } else {call writeTemp('job','GETDBINFO;') call writeTemp('job','GETDBSTATE;') } if and($APPNAME,$DBNAME) {call writeTemp('job','GETDBSTATS;') call writeTemp('job',$APPNAME) call writeTemp('job',$DBNAME) } call writeTemp('job','EXIT;') call closeTemp('job') report dbinfo prefix {write '---+!! Essbase Database Information' write ' * Environment variables have been set as following for getting \ the database information' write ' * ARBORPATH set to ',getEnv('ARBORPATH',undef,true) write ' * ESSLANG set to ',getEnv('ESSLANG',undef, true) write ' * ',$slk,' set to ',getEnv($slk,undef,true) } call writeCommand(concat($cmd,' ',quote($tmp,'x'))) call unlinkTemp('job') } if isCreated(true) toc '2:[[',getFile(),'][rda_report][Essbase Database Information]]' } =head2 secfile - Security File Exports the security file. =cut debug ' Inside ESS module, getting Security File' var $cmd = catFile($SERVER_DIR,'bin','essmsh') if testFile('fx',$cmd) {var $sec = getTemp('sec') output P,lastCommand() write 'LOGIN "',join('" "',$USERID,$pwd),'";' write 'Export security_file to data_file "',$sec,'";' write 'Exit;' report secfile prefix {write '---+!! Essbase Security File' write ' * Environment variables have been set as following for getting \ the security file' write ' * ARBORPATH set to ',getEnv('ARBORPATH',undef,true) write ' * ESSLANG set to ',getEnv('ESSLANG',undef, true) write ' * ',$slk,' set to ',getEnv($slk,undef,true) } call writeFile($sec) call unlinkTemp('sec') if isCreated(true) toc '2:[[',getFile(),'][rda_report][Security File]]' # Restore the initial environment if $slk call setEnv(last,$slp) call setEnv('ESSLANG',$ess) call setEnv('ARBORPATH',$arb) } } =head2 diskspace - Disk Space Collects free space on the Oracle Essbase database volume. =cut debug ' Inside ESS module, getting diskspace' report diskspace prefix write '---+!! Disk Free on Hyperion Home Volume' if or(isUnix(),compare('eq',getOsName(),'cygwin')) {if grepCommand(concat('df -k ',quote($HYPERION_HOME,'x')),'\s\d+%\s','f') {var ($val) = match(last,'^.*\s(\d+)\s+\d+%\s') var $val = int(expr('/',$val,1024)) write '|*Free Disk Space (in MiB)*| ',$val,'|' } } elsif isWindows() {if grepCommand(concat('dir ",',$HYPERION_HOME,'"'),' bytes free\s*$','f') {var $val = replace(field('\s+',2,last),',','',true) var $val = int(expr('/',$val,1048576)) write '|*Free Disk Space (in MiB)*| ',$val,'|' } } elsif isVms() call writeCommand('show dev d/mount/unit=byte') if isCreated(true) {write $TOP toc '2:[[',getFile(),'][rda_report][Disk Space]]' } =head2 applog - Application Log Collects F<$HYPERION_HOME/AnalyticServices/app/appname/appname.log> file. =cut if $APPNAME {debug ' Inside HFM module, gathering application log file' report applog call tail_file(catDir($HYPERION_HOME,'AnalyticServices','app',$APPNAME,\ concat($APPNAME,'.log')),$TAIL) if isCreated() toc '2:[[',getFile(),'][rda_report][Application Log]]' } =head2 Other Log Files Collects other log files. =cut pretoc '2:Other Log Files' debug ' Inside HPL module, getting other log files' var $opt = concat('rm',$AGE) call sort_files(3,$TAIL,grepDir(catDir($HYPERION_HOME,'logs'),'\.log$',$opt)) =begin credits =over 10 =item RDA 4.16: Satheesh Naraginti, Sudev Alampalli, Torben Hein. =item RDA 4.17: Nancy Dailey, Jack Zhang. =back =end credits =head1 COPYRIGHT NOTICE Copyright (c) 2002-2009, 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