ASNMTAP
view release on metacpan or search on metacpan
applications/htmlroot/cgi-bin/moderator/generateCollectorDaemonSchedulingReport.pl view on Meta::CPAN
use DBI;
use Time::Local;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use ASNMTAP::Asnmtap::Applications::CGI v3.002.003;
use ASNMTAP::Asnmtap::Applications::CGI qw(:APPLICATIONS :CGI :MODERATOR :REPORTS :DBREADONLY :DBTABLES);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use lib ( "$CHARTDIRECTORLIB" );
use perlchartdir;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use vars qw($PROGNAME);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$PROGNAME = "generateCollectorDaemonSchedulingReport.pl";
my $prgtext = "Collector Daemon Scheduling Report";
my $version = do { my @r = (q$Revision: 3.002.003$ =~ /\d+/g); sprintf "%d."."%03d" x $#r, @r }; # must be all on one line or MakeMaker will get confused.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
my ($rv, $dbh, $sth, $sql, $debugMessage, $errorMessage, $dbiErrorCode, $dbiErrorString, $applicationTitle);
my ($background, $forGround, $axisColor, $numberOfLabels, $chartTitle);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
my ($localYear, $localMonth, $currentYear, $currentMonth, $currentDay, $currentHour, $currentMin) = ((localtime)[5], (localtime)[4], ((localtime)[5] + 1900), ((localtime)[4] + 1), (localtime)[3,2,1]);
my $currentSec = 0;
# URL Access Parameters
my $cgi = new CGI;
my $pagedir = (defined $cgi->param('pagedir')) ? $cgi->param('pagedir') : '<NIHIL>'; $pagedir =~ s/\+/ /g;
my $pageset = (defined $cgi->param('pageset')) ? $cgi->param('pageset') : 'moderator'; $pageset =~ s/\+/ /g;
my $debug = (defined $cgi->param('debug')) ? $cgi->param('debug') : 'F';
my $sessionID = (defined $cgi->param('CGISESSID')) ? $cgi->param('CGISESSID') : '';
my $CcatalogID = (defined $cgi->param('catalogID')) ? $cgi->param('catalogID') : $CATALOGID;
my $CcollectorDaemon = (defined $cgi->param('collectorDaemon')) ? $cgi->param('collectorDaemon') : 'test';
my $sqlEndDate = (defined $cgi->param('sqlEndDate')) ? $cgi->param('sqlEndDate') : timelocal($currentSec, $currentMin, $currentHour, $currentDay, $localMonth, $localYear);
my $sqlPeriode = (defined $cgi->param('sqlPeriode')) ? $cgi->param('sqlPeriode') : 3600;
my $width = (defined $cgi->param('width')) ? $cgi->param('width') : 1000;
my $xOffset = (defined $cgi->param('xOffset')) ? $cgi->param('xOffset') : 300;
my $yOffset = (defined $cgi->param('yOffset')) ? $cgi->param('yOffset') : 42;
my $labelOffset = (defined $cgi->param('labelOffset')) ? $cgi->param('labelOffset') : 32;
my $AreaBOffset = (defined $cgi->param('AreaBOffset')) ? $cgi->param('AreaBOffset') : 78;
my $hightMin = (defined $cgi->param('hightMin')) ? $cgi->param('hightMin') : 195;
my $currentTimeslot = (defined $cgi->param('currentTimeslot')) ? $cgi->param('currentTimeslot') : 'off';
my $pf = (defined $cgi->param('pf')) ? $cgi->param('pf') : 'off';
my $sqlStartDate = $sqlEndDate - $sqlPeriode;
my $step = 60;
# Chart Parameters
my $hight = $yOffset + $AreaBOffset + 2;
# Use yellow as the color for the timeslot schedule
my $noTestColor = $COLORSRRD{'NO TEST'};
my $offlineColor = $COLORSRRD{OFFLINE};
my $timeslotColor = $COLORSRRD{UNKNOWN};
# set: colors
if ($pf eq 'on') {
$background = 0xF7F7F7;
$forGround = 0x000000;
$axisColor = 0x0C0C0C;
} else {
$background = 0x000000;
$forGround = 0xF7F7F7;
$axisColor = 0x0000FF;
}
$chartTitle = "$prgtext for '$CcollectorDaemon' from '$CcatalogID'";
my (%uKeys, @stepValue, @labels, @colors, @colorsCrontab, @colorsTimeslot, @dataPoints, @startDate, @endDate, @actualStartDate, @actualEndDate, @crontabStartDate, @crontabEndDate, @crontabEndTimeslot);
my $masterOrSlave = '<NIHIL>';
$masterOrSlave = 'master' if (-s "$APPLICATIONPATH/master/asnmtap-collector.sh");
$masterOrSlave = 'slave' if (-s "$APPLICATIONPATH/slave/asnmtap-collector.sh");
$rv = ($masterOrSlave eq '<NIHIL>') ? 0 : 1;
if ( $rv ) {
# open connection to database and query data
$dbh = DBI->connect("DBI:mysql:$DATABASE:$SERVERNAMEREADONLY:$SERVERPORTREADONLY", "$SERVERUSERREADONLY", "$SERVERPASSREADONLY" ) or ($rv, $errorMessage, $dbiErrorCode, $dbiErrorString) = error_trap_DBI("Cannot connect to the database", $debug, '',...
if ( $dbh and $rv ) {
my $uKeysSqlWhere = '';
$sql = "select SQL_NO_CACHE $SERVERTABLCRONTABS.collectorDaemon, $SERVERTABLCRONTABS.uKey, $SERVERTABLCRONTABS.lineNumber, $SERVERTABLCRONTABS.minute, $SERVERTABLCRONTABS.hour, $SERVERTABLCRONTABS.dayOfTheMonth, $SERVERTABLCRONTABS.monthOfTheYear...
($rv, $errorMessage, $dbiErrorCode, $dbiErrorString, $hight, $numberOfLabels) = get_sql_crontab_scheduling_report_data ($dbh, $sql, $rv, $errorMessage, $dbiErrorCode, $dbiErrorString, $sessionID, $hight, $hightMin, \%uKeys, \@labels, \@stepValue,...
if ( $rv ) {
my ($uKey, $startDate, $startTime, $endDate, $endTime, $status, $timeslot, $step);
$uKeysSqlWhere = "AND ($uKeysSqlWhere)" if ($uKeysSqlWhere);
$sql = "SELECT SQL_NO_CACHE $SERVERTABLEVENTS.uKey, $SERVERTABLEVENTS.startDate, $SERVERTABLEVENTS.startTime, $SERVERTABLEVENTS.endDate, $SERVERTABLEVENTS.endTime, $SERVERTABLEVENTS.status, $SERVERTABLEVENTS.timeslot, $SERVERTABLEVENTS.step FRO...
$sth = $dbh->prepare( $sql ) or ($rv, $errorMessage, $dbiErrorCode, $dbiErrorString) = error_trap_DBI("", "Cannot dbh->prepare: $sql", $debug, '', "", '', "", 0, '', $sessionID);
$sth->execute() or ($rv, $errorMessage, $dbiErrorCode, $dbiErrorString) = error_trap_DBI("", "Cannot sth->execute: $sql", $debug, '', "", '', "", 0, '', $sessionID) if $rv;
$sth->bind_columns( \$uKey, \$startDate, \$startTime, \$endDate, \$endTime, \$status, \$timeslot, \$step ) or ($rv, $errorMessage, $dbiErrorCode, $dbiErrorString) = error_trap_DBI("", "Cannot sth->bind_columns: $sql", $debug, '', "", '', "", 0,...
if ( $rv ) {
if ( $sth->rows ) {
while( $sth->fetch() ) {
# the color for each bar
push (@colors, (($status eq 'NO TEST') ? $noTestColor : (($status eq 'OFFLINE') ? $offlineColor : $timeslotColor)));
# the data points for each test result matching the corresponding label
push (@dataPoints, $uKeys{$uKey}->{numberOfLabel});
# the timeslot start dates and end dates for the tasks
push (@startDate, perlchartdir::chartTime2((($timeslot >= $sqlStartDate) ? $timeslot : $sqlStartDate)));
push (@endDate, perlchartdir::chartTime2((($timeslot + $step >= $sqlEndDate) ? $sqlEndDate : $timeslot + $step)));
# the actual start dates and end dates for the tasks up to now
my ($startYear, $startMonth, $startDay) = split (/-/, $startDate);
my ($startHour, $startMin, $startSec) = split (/:/, $startTime);
push (@actualStartDate, perlchartdir::chartTime($startYear, $startMonth, $startDay, $startHour, $startMin, $startSec));
my ($endYear, $endMonth, $endDay) = split (/-/, $endDate);
my ($endHour, $endMin, $endSec) = split (/:/, $endTime);
push (@actualEndDate, perlchartdir::chartTime($endYear, $endMonth, $endDay, $endHour, $endMin, $endSec));
# set initial values
push (@colorsCrontab, $timeslotColor);
push (@colorsTimeslot, $timeslotColor);
push (@crontabStartDate, perlchartdir::chartTime2($sqlEndDate));
push (@crontabEndDate, perlchartdir::chartTime2($sqlEndDate));
push (@crontabEndTimeslot, perlchartdir::chartTime2($sqlEndDate));
}
} else {
$hight = $hightMin; $rv = 0; $errorMessage = "NO DATA FOR THIS PERIOD";
}
$sth->finish() or ($rv, $errorMessage, $dbiErrorCode, $dbiErrorString) = error_trap_DBI("", "Cannot sth->finish", $debug, '', "", '', "", 0, '', $sessionID);
}
}
$dbh->disconnect or ($rv, $errorMessage, $dbiErrorCode, $dbiErrorString) = error_trap_DBI("Sorry, the database was unable to disconnect", $debug, '', "", '', "", '', 0, '', $sessionID);
}
if ( $rv ) {
CURRENTDATE: for (my $currentDate = $sqlEndDate - $sqlPeriode; $currentDate < $sqlEndDate; $currentDate += $step) {
my ($mon, $mday, $hour, $min, $wday) = ((localtime($currentDate))[4]+1, (localtime($currentDate))[3,2,1,6]);
UKEY: foreach my $uKey (keys %uKeys) {
my $collectorDaemon = $uKeys{$uKey}->{collectorDaemon} if ($uKeys{$uKey}->{collectorDaemon} !~ /\|/);
unless ( defined $collectorDaemon ) {
$hight = $hightMin; $rv = 0; $errorMessage = "'$uKey' from '$CcatalogID' into more then one Collector Daemon available: '". $uKeys{$uKey}->{collectorDaemon} ."'";
last CURRENTDATE;
} else {
my $noOFFLINE = $uKeys{$uKey}->{noOffline} if ($uKeys{$uKey}->{noOffline} !~ /\|/);
unless ( defined $noOFFLINE ) {
$hight = $hightMin; $rv = 0; $errorMessage = "For '$uKey' from '$CcatalogID' is there more then one noOffline type available: '". $uKeys{$uKey}->{noOffline} ."'";
last CURRENTDATE;
} else {
my $insertStatus;
foreach my $lineNumber (keys %{$uKeys{$uKey}{lineNumbers}}) {
my $tmin = $uKeys{$uKey}->{lineNumbers}->{$lineNumber}->{minute};
my $thour = $uKeys{$uKey}->{lineNumbers}->{$lineNumber}->{hour};
my $tmday = $uKeys{$uKey}->{lineNumbers}->{$lineNumber}->{dayOfTheMonth};
my $tmon = $uKeys{$uKey}->{lineNumbers}->{$lineNumber}->{monthOfTheYear};
my $twday = $uKeys{$uKey}->{lineNumbers}->{$lineNumber}->{dayOfTheWeek};
( run in 1.625 second using v1.01-cache-2.11-cpan-39bf76dae61 )