#!/opt/perl5/bin/perl # # This perl script displays on a single, self-refreshing web page # the most important parameters of multiply sap systems. By taking a # look at this page, most of the problems can be noticed # immediately. The displayed data: # system status(up/down) # user number per app. server # session number per app. server # average response time per app. server # number of active locks # number of update entries # number of abap dumps (today) # number of error messages in the system log (today) # # The web page gets refreshed once every three minutes. # The perl script uses SAP's rfc2abap to submit # the data collector abap (the source code: pr# 93b is in a # unix text file) in the different systems. A cpic type user # has to exist in those systems to run the abap. # The script was used to monitor 14 SAP systems parallel. # print "Content-type:text/html\n\n"; use CGI; print "<HTML><BODY style=\"font-size: small\">"; print "<META http-equiv=\"refresh\" content=\"180;URL=sysmon.cgi\">"; # # Print out the time of the last screen refresh # $datum = `date`; @f = split /\s/, $datum; print "@f[3] @f[1] @f[2] @f[5]<BR><HR><BR>"; # # Print a main header # print "<table border=\"1\" width=\"900\" height=\"28\" bgcolor=\"#0000FF\""; print "cellspacing=\"0\"<tr>"; print "<td width=\"614\" align=\"center\"><strong><font color=\"#FFFFFF\">"; print "SYSTEM DEPENDENT DATA</font></strong></td>"; print "<td width=\"386\" align=\"center\"><strong><font color=\"#FFFFFF\">"; print "INSTANCE DEPENDENT DATA</font></strong></td>"; print "</tr></table>"; # # Print the column headings # @h=("SYSTEM","STATUS","SYSLOG ERRORS TODAY","ABAPDUMPS TODAY","LOCKS","UPDATE EN TRIES","INSTANCE","USERS","SESSIONS","AVERAGE D. RESPONSE TIME"); print "<table border=\"1\" width=\"900\" height=\"28\" cellspacing=\"0\""; print "<tr>"; for ($x = 0; $x < @h; $x++) { print "<td width=\"75\" bgcolor=\"#00FFFF\" align=\"center\">"; print "<small><small><small>@h[$x]</small></small></small></td>"; } print "</tr>"; # # List of the systems to be monitored(SID, client, host, system number) # This portion of the script has to be customized # @s = ( ["DEV", "090", "host1", "00"], ["PRD", "100", "host2", "01"], ["QAS", "110", "host3", "02"], ["EDU", "120", "host4", "03"] ); # # Loop on the SAP systems # for $k ( @s ) { # # Check, that the sysytem is available # $stat = `./sapinfo -3 -h@$k[2] -s@$k[3] -g@$k[2] -xsapgw@$k[3] 2>/dev/null`; if ($stat =~ /SAP/) { # # Get the data from the SAP system # Customize the username and password # $data = `./rfc2abap -d@$k[0] -uusername -ppassword -c@$k[1] -h@$k[2] -s@$k[3] -g@$k[2] -xsapgw@$k[3] -f zpoplog|grep -v Connected`; } else { # # When the system is down: # $data = "Q AAA - - - - - - - - &"; } $sid = @$k[0]; @d = split /\s/, $data; for ($x = 0; $x < @d; $x++) { if (@d[$x] eq "Q") { # Begin of table row print "<tr>"; } elsif (@d[$x] eq "@") { # Empty cell print "<td width=\"100\"></td>"; } # End of table row elsif (@d[$x] eq "&") { print "</tr>"; } else { if ($x eq 2) { # Set the status cell's color and text if (@d[1] eq $sid){ $stat = "UP"; $color = "#00FF00"; } else { $stat = "DOWN"; $color = "#FF0000"; } # Print the status cell print "<td width=\"100\" bgcolor=$color align=\"center\">"; print "<small><small><small>$stat</small></small></small></td>"; } if ($x eq 1) { $string = $sid; } else { $string = @d[$x]; } # Print a regular cell print "<td width=\"100\" bgcolor=\"#FFFFFF\" align=\"center\">"; print "<small><small><small>$string</small></small></small></td>"; } } } print "</table>"; print "</BODY></HTML>";