X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=clearadm%2Flib%2FClearadmWeb.pm;h=54f164ec27a83a4d8da0618ca8b69ba16d3f8cab;hb=0c802537ec02d6cfea4c41b3138535c09a319489;hp=d44947386d9b5b8f0f64b9a194282d339edcc422;hpb=81cbd130706633b1c19ff59371c2ef61d80c562b;p=clearscm.git diff --git a/clearadm/lib/ClearadmWeb.pm b/clearadm/lib/ClearadmWeb.pm index d449473..54f164e 100644 --- a/clearadm/lib/ClearadmWeb.pm +++ b/clearadm/lib/ClearadmWeb.pm @@ -48,7 +48,7 @@ use strict; use base 'Exporter'; use CGI qw ( - :standard + :standard start_a end_a start_div @@ -73,6 +73,8 @@ use FindBin; use lib "$FindBin::Bin/../../lib"; use Clearadm; +use Clearcase::Vobs; +use Clearcase::Views; use DateUtils; use Display; use Utils; @@ -82,7 +84,7 @@ my $clearadm = Clearadm->new; our $APPNAME= 'Clearadm'; our $VERSION = '$Revision: 1.46 $'; ($VERSION) = ($VERSION =~ /\$Revision: (.*) /); - + our @EXPORT = qw ( autoScale displayError @@ -109,7 +111,9 @@ our @EXPORT = qw ( makeFilesystemDropdown makeIntervalDropdown makeNotificationDropdown + makeStoragePoolDropdown makeSystemDropdown + makeTagsDropdown makeTimeDropdown makeTaskDropdown setField @@ -121,25 +125,28 @@ our @PREDEFINED_ALERTS = ( ); our @PREDEFINED_NOTIFICATIONS = ( + 'Clearcase Storage', + 'Heartbeat', 'Loadavg', 'Filesystem', 'Scrub', - 'Heartbeat', 'System checkin', 'Update systems', ); our @PREDEFINED_TASKS = ( - 'Loadavg', + 'Clearcase Storage', 'Filesystem', + 'Loadavg', 'Scrub', 'System checkin', 'Update systems', ); our @PREDEFINED_SCHEDULES = ( - 'Loadavg', + 'Clearcase Storage', 'Filesystem', + 'Loadavg', 'Scrub', 'Update systems', ); @@ -160,74 +167,74 @@ our @PREDEFINED_MULTIPLIERS = ( sub dbug ($) { my ($msg) = @_; - + display font ({-class => 'error'}, '
DEBUG: '). $msg; - + return; } # dbug sub displayError ($) { my ($msg) = @_; - + display font ({-class => 'error'}, 'Error: ') . $msg; - + return } # displayError; sub setField ($;$) { my ($field, $label) = @_; - + $label ||= 'Unknown'; my $undef = font {-class => 'unknown'}, $label; - + return defined $field ? $field : $undef; } # setField sub setFields ($%) { my ($label, %rec) = @_; - + $rec{$_} = setField ($rec{$_}, $label) - foreach keys %rec; - + for keys %rec; + return %rec; } # setFields; sub dumpVars (%) { my (%vars) = @_; - - foreach (keys %vars) { + + for (keys %vars) { dbug "$_: $vars{$_}"; - } # foreach - + } # for + return; } # dumpVars sub graphError ($) { my ($msg) = @_; - + use GD; - + # Make the image fit the message. It seems that characters are ~ 7px wide. my $imageLength = length ($msg) * 7; - + my $errorImage = GD::Image->new ($imageLength, 20); # Allocate some colors my $white = $errorImage->colorAllocate (255, 255, 255); my $red = $errorImage->colorAllocate (255, 0, 0); - + # Allow the text to shine through $errorImage->transparent($white); $errorImage->interlaced('true'); - # Now put out the message + # Now put out the message $errorImage->string (gdMediumBoldFont, 0, 0, $msg, $red); # And return it print "Content-type: image/png\n\n"; print $errorImage->png; - + # Since we've "returned" the error in the form of an image, there's nothing # left for us to do so we can exit exit; @@ -235,159 +242,210 @@ sub graphError ($) { sub autoScale ($) { my ($amount) = @_; - + my $kbyte = 1024; my $meg = (1024 * $kbyte); my $gig = (1024 * $meg); - + my $size = $amount > $gig ? sprintf ('%.2f Gig', $amount / $gig) : $amount > $meg ? sprintf ('%.2f Meg', $amount / $meg) : sprintf ('%.2f Kbyte', $amount / $kbyte); - - return $size; + + return $size; } # autoScale sub _makeAlertlogSelection ($$) { my ($name, $default) = @_; - + $default ||= 'All'; my %values; $values{All} = 'All'; - + $values{$$_{$name}} = $$_{$name} - foreach ($clearadm->FindAlertlog); + for ($clearadm->FindAlertlog); my $dropdown = popup_menu { name => $name, class => 'dropdown', values => [sort keys %values], default => $default, - }; - + }; + return $dropdown; } # _makeAlertlogSelection sub _makeRunlogSelection ($$) { my ($name, $default) = @_; - + $default ||= 'All'; my @values = sort $clearadm->GetUniqueList ('runlog', $name); - + unshift @values, 'All'; - + my %values; - - foreach (@values) { + + for (@values) { unless ($_ eq '') { $values{$_} = $_; } else { $values{NULL} = ''; - } #if - } # foreach - + } #if + } # for + my $dropdown = popup_menu { name => $name, class => 'dropdown', values => \@values, default => $default, labels => \%values, - }; - + }; + return $dropdown; } # _makeRunlogSelection sub _makeRunlogSelectionNumeric ($$) { my ($name, $default) = @_; - + $default ||= 'All'; my @values = sort {$a <=> $b} $clearadm->GetUniqueList ('runlog', $name); - + unshift @values, 'All'; - + my $dropdown = popup_menu { name => $name, class => 'dropdown', values => [@values], default => $default, - }; - + }; + return $dropdown; } # _makeRunlogSelection sub makeAlertDropdown (;$$) { my ($label, $default) = @_; - + $label ||= ''; my @values; push @values, $$_{name} - foreach ($clearadm->FindAlert); - + for ($clearadm->FindAlert); + my $dropdown = "$label "; $dropdown .= popup_menu { name => 'alert', class => 'dropdown', values => [sort @values], default => $default, - }; - + }; + return $dropdown; } # makeAlertDropdown sub makeMultiplierDropdown (;$$) { my ($label, $default) = @_; - + $label ||= ''; - + my $dropdown = "$label "; $dropdown .= popup_menu { name => 'multiplier', class => 'dropdown', values => [sort @PREDEFINED_MULTIPLIERS], default => $default, - }; + }; return $dropdown; } # makeMultiplierDropdown sub makeNoMoreThanDropdown (;$$) { my ($label, $default) = @_; - + $label ||= ''; - + my $dropdown = "$label "; $dropdown .= popup_menu { name => 'nomorethan', class => 'dropdown', values => [sort @PREDEFINED_NOTMORETHAN], default => $default, - }; + }; return $dropdown; } # makeNoMorThanDropdown - + +sub makeTagsDropdown($$) { + my ($type, $tag) = @_; + + my $dropdown = ucfirst $type . ' '; + + if ($type eq 'vob') { + my $vobs = Clearcase::Vobs->new; + + $dropdown .= popup_menu { + name => 'tag', + class => 'dropdown', + values => [sort $vobs->vobs], + default => $tag, + }; + } else { + my $views = Clearcase::Views->new; + + $dropdown .= popup_menu { + name => 'tag', + class => 'dropdown', + values => [sort $views->views], + default => $tag, + }; + } # if + + return span {id => $type}, $dropdown; +} # makeTagsDropdown + +sub makeStoragePoolDropdown($$) { + my ($type, $tag) = @_; + + my @values; + + my $dropdown = 'Storage pool '; + + if ($type eq 'vob') { + push @values, qw(admin db cleartext derivedobj source total); + } else { + push @values, qw(admin db private total); + } # if + + $dropdown .= popup_menu { + name => 'storage', + class => 'dropdown', + values => \@values, + default => $tag, + }; + + return span {id => $type}, $dropdown; +} # makeStoragePoolsDropdown + sub makeFilesystemDropdown ($;$$$) { my ($system, $label, $default, $onchange) = @_; $label ||= ''; - + my %filesystems; - - foreach ($clearadm->FindFilesystem ($system)) { + + for ($clearadm->FindFilesystem ($system)) { my %filesystem = %{$_}; - + my $value = "$filesystem{filesystem} ($filesystem{mount})"; $filesystems{$filesystem{filesystem}} = $value; - } # foreach - + } # for + my $dropdown .= "$label "; $dropdown .= popup_menu { name => 'filesystem', @@ -397,15 +455,15 @@ sub makeFilesystemDropdown ($;$$$) { onChange => ($onchange) ? $onchange : '', default => $default, }; - - return span {id => 'filesystems'}, $dropdown; + + return span {id => 'filesystems'}, $dropdown; } # makeFilesystemDropdown sub makeIntervalDropdown (;$$$) { my ($label, $default, $onchange) = @_; - + $label ||= ''; - + my @intervals = ( 'Minute', 'Hour', @@ -415,7 +473,7 @@ sub makeIntervalDropdown (;$$$) { $default = ucfirst lc $default if $default; - + my $dropdown = "$label "; $dropdown .= popup_menu { name => 'scaling', @@ -425,49 +483,49 @@ sub makeIntervalDropdown (;$$$) { default => $default, onchange => $onchange, }; - - return span {id => 'scaling'}, $dropdown; + + return span {id => 'scaling'}, $dropdown; } # makeIntervalDropdown; sub makeNotificationDropdown (;$$) { my ($label, $default) = @_; - + $label ||= ''; my @values; - - push @values, $$_{name} - foreach ($clearadm->FindNotification); - + + push @values, $$_{name} + for ($clearadm->FindNotification); + my $dropdown = "$label "; $dropdown .= popup_menu { name => 'notification', class => 'dropdown', values => [sort @values], default => $default, - }; - + }; + return $dropdown; } # makeNotificationDropdown sub makeRestartableDropdown (;$$) { my ($label, $default) = @_; - + $label ||= ''; my @values = ( 'true', 'false', ); - + my $dropdown = "$label "; $dropdown .= popup_menu { name => 'restartable', class => 'dropdown', values => [@values], default => $default, - }; - + }; + return $dropdown; } # makeRestartableDropdown @@ -475,16 +533,16 @@ sub makeSystemDropdown (;$$$%) { my ($label, $default, $onchange, %systems) = @_; $label ||= ''; - - foreach ($clearadm->FindSystem) { + + for ($clearadm->FindSystem) { my %system = %{$_}; - + my $value = $system{name}; $value .= $system{alias} ? " ($system{alias})" : ''; $systems{$system{name}} = $value; - } # foreach - + } # for + my $systemDropdown .= "$label "; $systemDropdown .= popup_menu { name => 'system', @@ -494,28 +552,28 @@ sub makeSystemDropdown (;$$$%) { onchange => ($onchange) ? $onchange : '', default => $default, }; - + return span {id => 'systems'}, $systemDropdown; } # makeSystemDropdown sub makeTaskDropdown (;$$) { my ($label, $default) = @_; - + $label ||= ''; my @values; push @values, $$_{name} - foreach ($clearadm->FindTask); - + for ($clearadm->FindTask); + my $taskDropdown = "$label "; $taskDropdown .= popup_menu { name => 'task', class => 'dropdown', values => [sort @values], default => $default, - }; - + }; + return $taskDropdown; } # makeTaskDropdown @@ -532,27 +590,27 @@ sub makeTimeDropdown ($$$;$$$$$) { ) = @_; $label ||= ''; - + my @times; - + $name ||= lc $label; - + push @times, 'Earliest'; if ($table =~ /loadavg/i) { push @times, $$_{timestamp} - foreach ($clearadm->GetLoadavg ($system, undef, undef, undef, $interval)); + for ($clearadm->GetLoadavg ($system, undef, undef, undef, $interval)); } elsif ($table =~ /filesystem/i) { push @times, $$_{timestamp} - foreach ($clearadm->GetFS ($system, $filesystem, undef, undef, undef, $interval)); - } # if + for ($clearadm->GetFS ($system, $filesystem, undef, undef, undef, $interval)); + } # if push @times, 'Latest'; - + unless ($default) { $default = $name eq 'start' ? 'Earliest' : 'Latest'; } # unless - + my $timeDropdown = "$label "; $timeDropdown .= span {id => $elementID}, popup_menu { name => $name, @@ -560,8 +618,8 @@ sub makeTimeDropdown ($$$;$$$$$) { values => [@times], default => $default, }; - - return $timeDropdown; + + return $timeDropdown; } # makeTimeDropdown sub heading (;$$) { @@ -572,7 +630,7 @@ sub heading (;$$) { } else { $title = $APPNAME; } # if - + display header; display start_html { -title => $title, @@ -589,114 +647,77 @@ sub heading (;$$) { }, $title; return if $type; - + my $ieTableWrapStart = ''; my $ieTableWrapEnd = ''; - + # Menubar display div {id=>'mastheadlogo'}, h1 {class => 'title'}, $APPNAME; display start_div {class => 'menu'}; - + # Home display ul li a {href => '/clearadm'}, 'Home'; - + my @allSystems = $clearadm->FindSystem; - + # Systems display start_ul; display start_li; display a {href => 'systems.cgi'}, "Systems$ieTableWrapStart"; display start_ul; - foreach (@allSystems) { + for (sort @allSystems) { my %system = %{$_}; my $sysName = ucfirst $system{name}; $sysName .= " ($system{alias})" if $system{alias}; - + display li a { href => "systemdetails.cgi?system=$system{name}" }, ucfirst " $sysName"; - } # foreach + } # for display end_ul; display $ieTableWrapEnd; display end_li; display end_li; display end_ul; - + # Filesystems display start_ul; display start_li; display a {href => 'filesystems.cgi'}, "Filesystems$ieTableWrapStart"; display start_ul; - foreach (@allSystems) { + for (@allSystems) { my %system = %{$_}; my $sysName = ucfirst $system{name}; $sysName .= " ($system{alias})" if $system{alias}; - + display li a { href => "filesystems.cgi?system=$system{name}" }, ucfirst " $sysName"; - } # foreach + } # for display end_ul; display $ieTableWrapEnd; display end_li; display end_ul; - - # Servers - display start_ul; - display start_li; - display a {href => '#'}, "Servers$ieTableWrapStart"; - display start_ul {class => 'skinny'}; - display start_li; - display start_a {href => 'vobs.cgi'}; - display "VOB»$ieTableWrapStart"; - display start_ul; - display li a {href => "systemdetails.cgi?system=jupiter"}, ' Jupiter (defaria.com)'; - display end_ul; - display $ieTableWrapEnd; - display end_li; - - display start_li; - display start_a {href => 'views.cgi'}; - display "View»$ieTableWrapStart"; - display start_ul; - display li a {href => "systemdetails.cgi?system=earth"}, ' Earth'; - display li a {href => "systemdetails.cgi?system=mars"}, ' Mars'; - display end_ul; - display $ieTableWrapEnd; - display end_ul; - display $ieTableWrapEnd; - display end_li; - display end_ul; - + # Vobs display start_ul; display start_li; - display a {href => 'vobs.cgi'}, "VOBs$ieTableWrapStart"; - display start_ul; - display li a {href => '#'}, ' /vobs/clearscm'; - display li a {href => '#'}, ' /vobs/clearadm'; - display li a {href => '#'}, ' /vobs/test'; - display li a {href => '#'}, ' /vobs/test2'; - display end_ul; + display a {href => 'vobservers.cgi'}, "   VOBs$ieTableWrapStart"; display $ieTableWrapEnd; display end_li; - display end_ul; - + display end_ul; + # Views display start_ul; display start_li; - display a {href => 'views.cgi'}, "Views$ieTableWrapStart"; - display start_ul; - display li a {href => 'viewager.cgi'}, ' View Ager'; - display li a {href => '#'}, ' Releast View'; - display end_ul; + display a {href => 'viewager.cgi'}, "Views$ieTableWrapStart"; display $ieTableWrapEnd; display end_li; - display end_ul; + display end_ul; # Configure display start_ul; @@ -710,8 +731,8 @@ sub heading (;$$) { display end_ul; display $ieTableWrapEnd; display end_li; - display end_ul; - + display end_ul; + # Logs display start_ul; display start_li; @@ -722,8 +743,8 @@ sub heading (;$$) { display end_ul; display $ieTableWrapEnd; display end_li; - display end_ul; - + display end_ul; + # Help display start_ul; display start_li; @@ -735,15 +756,15 @@ sub heading (;$$) { display end_li; display end_ul; display end_div; - + display start_div {class => 'page'}; - + return; } # heading sub displayAlert (;$) { my ($alert) = @_; - + display start_table {cellspacing => 1}; display start_Tr; @@ -753,15 +774,15 @@ sub displayAlert (;$) { display th {class => 'labelCentered'}, 'Who'; display th {class => 'labelCentered'}, 'Category'; display end_Tr; - - foreach ($clearadm->FindAlert ($alert)) { + + for ($clearadm->FindAlert ($alert)) { my %alert = %{$_}; - + $alert{who} = setField $alert{who}, 'System Administrator'; - + display start_Tr; my $areYouSure = "Are you sure you want to delete the $alert{name} alert?"; - + my $actions = start_form { method => 'post', action => 'processalert.cgi', @@ -782,7 +803,7 @@ sub displayAlert (;$) { alt => 'Delete', value => 'Delete', title => 'Cannot delete predefined alert', - }; + }; $actions .= input { name => 'edit', disabled => 'true', @@ -812,10 +833,10 @@ sub displayAlert (;$) { }; } # if - display end_form; + display end_form; my $who = $alert{who}; - + if ($who =~ /^([a-zA-Z0-9._-]+)@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})$/) { $who = a {href => "mailto:$1\@$2"}, $who; } # if @@ -827,10 +848,10 @@ sub displayAlert (;$) { display td {class => 'data'}, (InArray $alert{name}, @PREDEFINED_ALERTS) ? 'Predefined' : 'User Defined'; display end_Tr; - } # foreach + } # for + + display end_table; - display end_table; - display p {class => 'center'}, a { href => 'processalert.cgi?action=Add', }, 'New alert ', img { @@ -843,18 +864,18 @@ sub displayAlert (;$) { sub displayAlertlog (%) { my (%opts) = @_; - + my $optsChanged; - + unless (($opts{oldalert} and $opts{alert} and $opts{oldalert} eq $opts{alert}) and ($opts{oldsystem} and $opts{system} and $opts{oldsystem} eq $opts{system}) and ($opts{oldnotification} and $opts{notification} and $opts{oldnotification} eq $opts{notification})) { - $optsChanged = 1; + $optsChanged = 1; } # unless - + my $condition; unless ($opts{id}) { @@ -881,7 +902,7 @@ sub displayAlertlog (%) { $opts{start} = 0; } # if - my $next = $opts{start} + $opts{page} < $total + my $next = $opts{start} + $opts{page} < $total ? $opts{start} + $opts{page} : $opts{start}; my $prev = $opts{start} - $opts{page} >= 0 @@ -896,14 +917,14 @@ sub displayAlertlog (%) { $opts .= " of $total"; display start_form { - method => 'post', + method => 'post', action => 'alertlog.cgi' }; # Hidden fields to pass along display input {name => 'prev', type => 'hidden', value => $prev}; display input {name => 'next', type => 'hidden', value => $next}; - + display input { name => 'oldalert', type => 'hidden', @@ -942,7 +963,7 @@ sub displayAlertlog (%) { disabled => 'disabled', }; } # unless - + $caption .= td {align => 'center'}, $opts; unless ($opts{id}) { @@ -1013,12 +1034,12 @@ sub displayAlertlog (%) { type => 'button', value => 'Clear All Events', onclick => "return AreYouSure('Are you sure you want to delete all alerts?');", - }; + }; display end_Tr; - + my $i = $opts{start}; - foreach ($clearadm->FindAlertlog ( + for ($clearadm->FindAlertlog ( $opts{alert}, $opts{system}, $opts{notification}, @@ -1026,10 +1047,10 @@ sub displayAlertlog (%) { $opts{page}, )) { my %alertlog = setFields 'N/A', %{$_}; - + display start_Tr; my %system = $clearadm->GetSystem ($alertlog{system}); - + display td {class => 'dataCentered'}, ++$i; display td {class => 'dataCentered'}, a { href => "deletealertlog.cgi?alertlogid=$alertlog{id}" @@ -1055,12 +1076,12 @@ sub displayAlertlog (%) { }, $alertlog{runlog}; display td {class => 'data'}, $alertlog{message}; display end_Tr; - } # foreach + } # for display end_form; - display end_table; - + display end_table; + return; } # displayAlertlog @@ -1068,7 +1089,7 @@ sub displayFilesystem ($) { my ($systemName) = @_; display start_table {cellspacing => 1, width => '98%'}; - + display start_Tr; display th {class => 'labelCentered'}, 'Action'; display th {class => 'labelCentered'}, 'Name'; @@ -1082,17 +1103,17 @@ sub displayFilesystem ($) { display th {class => 'labelCentered'}, 'Threshold'; display th {class => 'labelCentered'}, 'Usage'; display end_Tr; - - foreach ($clearadm->FindSystem ($systemName)) { + + for (sort { $a->{mount} cmp $b->{mount} } $clearadm->FindSystem ($systemName)) { my %system = %{$_}; - + %system = setFields ('N/A', %system); my $admin = ($system{email} !~ 'N/A') ? a {-href => "mailto:$system{email}"}, $system{admin} : $system{admin}; - - foreach ($clearadm->FindFilesystem ($system{name})) { + + for ($clearadm->FindFilesystem ($system{name})) { my %filesystem = %{$_}; my %fs = $clearadm->GetLatestFS ($system{name}, $filesystem{filesystem}); @@ -1101,9 +1122,9 @@ sub displayFilesystem ($) { my $used = autoScale $fs{used}; my $free = autoScale $fs{free}; - # TODO: Note that this percentages does not agree with df output. I'm not + # TODO: Note that this percentages does not agree with df output. I'm not # sure why. - my $usedPct = $fs{size} == 0 ? 0 + my $usedPct = $fs{size} == 0 ? 0 : sprintf ('%.0f', (($fs{reserve} + $fs{used}) / $fs{size} * 100)); @@ -1112,19 +1133,19 @@ sub displayFilesystem ($) { href => "systemdetails.cgi?system=$system{name}" }, $system{alias} : $system{alias}; - - my $class = $usedPct < $filesystem{threshold} + + my $class = $usedPct < $filesystem{threshold} ? 'data' : 'dataAlert'; - my $classRight = $usedPct < $filesystem{threshold} + my $classRight = $usedPct < $filesystem{threshold} ? 'dataRight' : 'dataRightAlert'; - my $classCentered = $usedPct < $filesystem{threshold} + my $classCentered = $usedPct < $filesystem{threshold} ? 'dataCentered' : 'dataCenteredAlert'; my $classRightTop = $usedPct < $filesystem{threshold} ? 'dataRightTop' - : 'dataRightAlertTop'; + : 'dataRightAlertTop'; display start_Tr; display start_td {class => 'dataCentered'}; @@ -1138,7 +1159,7 @@ sub displayFilesystem ($) { method => 'post', action => "processfilesystem.cgi", }; - + display input { type => 'hidden', name => 'system', @@ -1149,7 +1170,7 @@ sub displayFilesystem ($) { name => 'filesystem', value => $filesystem{filesystem}, }; - + display input { name => 'delete', type => 'image', @@ -1167,20 +1188,20 @@ sub displayFilesystem ($) { value => 'Edit', title => 'Edit', }; - + if ($filesystem{notification}) { display a { href => "alertlog.cgi?system=$filesystem{system}"}, img { src => 'alert.png', border => 0, alt => 'Alert!', - title => 'This filesystem has alerts', + title => 'This filesystem has alerts', }; - } # if - + } # if + display end_form; - - display end_td; + + display end_td; display td {class => $class}, a {-href => "systemdetails.cgi?system=$system{name}"}, $system{name}; display td {class => $class}, $alias; @@ -1189,11 +1210,11 @@ sub displayFilesystem ($) { display td {class => $class}, $filesystem{mount}; display td {class => $class}, $filesystem{fstype}; display td {class => $classCentered}, $filesystem{filesystemHist}; - display td {class => $classRightTop}, "$used ($usedPct%)
", + display td {class => $classRightTop}, "$used ($usedPct%)
", font {class => 'unknown'}, "$fs{timestamp}"; display td {class => $classRightTop}, "$filesystem{threshold}%"; display td {class => $class}, - a {href => + a {href => "plot.cgi?type=filesystem&system=$system{name}" . "&filesystem=$filesystem{filesystem}&scaling=Day&points=7" }, img { @@ -1202,17 +1223,17 @@ sub displayFilesystem ($) { border => 0, }; display end_Tr; - } # foreach - } # foreach + } # for + } # for display end_table; - + return; } # displayFilesystem sub displayNotification (;$) { my ($notification) = @_; - + display start_table {cellspacing => 1}; display start_Tr; @@ -1223,14 +1244,14 @@ sub displayNotification (;$) { display th {class => 'labelCentered'}, 'Not More Than'; display th {class => 'labelCentered'}, 'Category'; display end_Tr; - - foreach ($clearadm->FindNotification ($notification)) { + + for ($clearadm->FindNotification ($notification)) { my %notification= setFields 'N/A', %{$_}; - + display start_Tr; my $areYouSure = "Are you sure you want to delete the $notification{name} " . 'notification?'; - + my $actions = start_form { method => 'post', action => 'processnotification.cgi', @@ -1241,7 +1262,7 @@ sub displayNotification (;$) { type => 'hidden', value => $notification{name}, }; - + if (InArray $notification{name}, @PREDEFINED_NOTIFICATIONS) { $actions .= input { name => 'delete', @@ -1251,7 +1272,7 @@ sub displayNotification (;$) { alt => 'Delete', value => 'Delete', title => 'Cannot delete predefined notification', - }; + }; $actions .= input { name => 'edit', disabled => 'true', @@ -1280,8 +1301,8 @@ sub displayNotification (;$) { title => 'Edit', }; } # if - - display end_form; + + display end_form; display td {class => 'dataCentered'}, $actions; display td {class => 'data'}, $notification{name}; @@ -1291,15 +1312,15 @@ sub displayNotification (;$) { display td {class => 'data'}, $notification{cond}; display td {class => 'data'}, $notification{nomorethan}; display td {class => 'data'}, - (InArray $notification{name}, @PREDEFINED_NOTIFICATIONS) + (InArray $notification{name}, @PREDEFINED_NOTIFICATIONS) ? 'Predefined' : 'User Defined'; - + display end_Tr; - } # foreach + } # for display end_table; - + display p {class => 'center'}, a { href => 'processnotification.cgi?action=Add', }, 'New notification', img { @@ -1312,40 +1333,39 @@ sub displayNotification (;$) { sub displayRunlog (%) { my (%opts) = @_; - + my $optsChanged; - - unless (($opts{oldtask} and $opts{task} or - $opts{oldtask} eq $opts{task}) and - ($opts{oldsystem} and $opts{system} or - $opts{oldsystem} eq $opts{system}) and - ($opts{oldnot} and $opts{not} or - $opts{oldnot} eq $opts{not}) and - ($opts{oldstatus} and $opts{status} or - $opts{oldstatus} eq $opts{status})) { - $optsChanged = 1; - } # unless - - my $condition; + + for (qw(task system not status)) { + my $old = "old$_"; + if (($opts{$old} and $opts{$_}) and ($opts{$old} ne $opts{$_})) { + $optsChanged = 1; + last; + } # if + } # for + + my $condition = ''; unless ($opts{id}) { - $condition = "task like '%"; - $condition .= $opts{task} ? $opts{task} : ''; - $condition .= "%'"; - - if ($opts{system}) { + if ($opts{task} !~ /all/i) { + $condition = "task like '%"; + $condition .= $opts{task} ? $opts{task} : ''; + $condition .= "%'"; + } # if + + if ($opts{system} !~ /all/i) { if ($opts{system} eq '') { $condition .= ' and system is null'; undef $opts{system} } elsif ($opts{system} ne 'All') { - $condition .= " and system like '%$opts{system}%'";; + $condition .= " and system like '%$opts{system}%'";; } # if } # if - if (defined $opts{status}) { + if ($opts{status} !~ /all/i) { $condition .= ' and '; unless ($opts{not}) { - $condition .= "status=$opts{status}"; + $condition .= "status=$opts{status}"; } else { $condition .= "status<>$opts{status}"; } # unless @@ -1353,13 +1373,13 @@ sub displayRunlog (%) { } # unless my $total = $clearadm->Count ('runlog', $condition); - + $opts{start} = $opts{'nextArrow.x'} ? $opts{next} : $opts{prev}; $opts{start} ||= 0; $opts{start} = 0 if $optsChanged; - - my $next = $opts{start} + $opts{page} < $total + + my $next = $opts{start} + $opts{page} < $total ? $opts{start} + $opts{page} : $opts{start}; my $prev = $opts{start} - $opts{page} >= 0 @@ -1374,7 +1394,7 @@ sub displayRunlog (%) { $opts .= " of $total"; display start_form { - method => 'post', + method => 'post', action => 'runlog.cgi' }; @@ -1408,7 +1428,7 @@ sub displayRunlog (%) { disabled => 'disabled', }; } # unless - + $caption .= td {align => 'center'}, $opts; unless ($opts{id}) { @@ -1444,12 +1464,12 @@ sub displayRunlog (%) { display th {class => 'labelCentered'}, 'Status'; display th {class => 'labelCentered'}, 'Message'; display end_Tr; - + display start_Tr; $opts{not} ||= 'false'; display start_form { - method => 'post', + method => 'post', action => 'runlog.cgi' }; display td { @@ -1482,21 +1502,21 @@ sub displayRunlog (%) { type => 'submit', value => 'Update', }; - + display end_form; display end_Tr; my $i = $opts{start}; my $status; - - if (defined $opts{status}) { + + if ($opts{status}) { if ($opts{status} !~ /all/i) { $status = $opts{not} ne 'true' ? $opts{status} : "!$opts{status}"; } # if } # if - - foreach ($clearadm->FindRunlog ( + + for ($clearadm->FindRunlog ( $opts{task}, $opts{system}, $status, @@ -1505,8 +1525,8 @@ sub displayRunlog (%) { $opts{page}, )) { my %runlog = setFields 'N/A', %{$_}; - - my $class = $runlog{status} == 0 + + my $class = $runlog{status} == 0 ? 'data' : 'dataAlert'; my $classCentered = $runlog{status} == 0 @@ -1515,14 +1535,14 @@ sub displayRunlog (%) { my $classRight = $runlog{status} == 0 ? 'dataRight' : 'dataAlertRight'; - + display start_Tr; display td {class => 'dataCentered'}, ++$i; display td {class => 'dataCentered'}, $runlog{id}; display td {class => 'data'}, a { href => "tasks.cgi?task=$runlog{task}" }, $runlog{task}; - display td {class => 'data'}, $runlog{system} eq 'Localhost' + display td {class => 'data'}, $runlog{system} eq 'localhost' ? $runlog{system} : a { href => "systemdetails.cgi?system=$runlog{system}" @@ -1530,16 +1550,16 @@ sub displayRunlog (%) { display td {class => 'dataCentered'}, $runlog{started}; display td {class => 'dataCentered'}, $runlog{ended}; display td {class => $classRight}, $runlog{status}; - + my $message = $runlog{message}; $message =~ s/\r\n/
/g; - + display td {class => $class, width => '50%'}, $message; display end_Tr; - } # foreach + } # for display end_table; - + return; } # displayRunlog @@ -1555,14 +1575,14 @@ sub displaySchedule () { display th {class => 'labelCentered'}, 'Frequency'; display th {class => 'labelCentered'}, 'Category'; display end_Tr; - - foreach ($clearadm->FindSchedule) { + + for ($clearadm->FindSchedule) { my %schedule = setFields 'N/A', %{$_}; - + display start_Tr; my $areYouSure = "Are you sure you want to delete the $schedule{name} " . "schedule?"; - + my $actions = start_form { method => 'post', action => 'processschedule.cgi', @@ -1573,7 +1593,7 @@ sub displaySchedule () { type => 'hidden', value => $schedule{name}, }; - + if (InArray $schedule{name}, @PREDEFINED_SCHEDULES) { $actions .= input { name => 'delete', @@ -1583,7 +1603,7 @@ sub displaySchedule () { alt => 'Delete', value => 'Delete', title => 'Cannot delete predefined schedule', - }; + }; $actions .= input { name => 'edit', disabled => 'true', @@ -1612,9 +1632,9 @@ sub displaySchedule () { title => 'Edit', }; } # if - - display end_form; - + + display end_form; + display td {class => 'dataCentered'}, $actions; display td {class => 'dataCentered'}, checkbox { disabled => 'disabled', @@ -1629,15 +1649,15 @@ sub displaySchedule () { }, $schedule{notification}; display td {class => 'data'}, $schedule{frequency}; display td {class => 'data'}, - (InArray $schedule{name}, @PREDEFINED_SCHEDULES) - ? 'Predefined' - : 'User Defined'; - + (InArray $schedule{name}, @PREDEFINED_SCHEDULES) + ? 'Predefined' + : 'User Defined'; + display end_Tr; - } # foreach + } # for display end_table; - + display p {class => 'center'}, a { href => 'processschedule.cgi?action=Add', }, 'New schedule', img { @@ -1650,17 +1670,17 @@ sub displaySchedule () { sub displaySystem ($) { my ($systemName) = @_; - + my %system = $clearadm->GetSystem ($systemName); - + unless (%system) { displayError "Nothing known about system $systemName"; return; } # unless - + my $lastheardfromClass = 'dataCentered'; my $lastheardfromData = $system{lastheardfrom}; - + my %load = $clearadm->GetLatestLoadavg ($systemName); unless ($clearadm->SystemAlive (%system)) { @@ -1676,18 +1696,18 @@ sub displaySystem ($) { my $admin = ($system{email}) ? a {-href => "mailto:$system{email}"}, $system{admin} : $system{admin}; - + $system{alias} = setField $system{alias}, 'N/A'; $system{region} = setField $system{region}, 'N/A'; display start_table {cellspacing => 1}; - + display start_Tr; my $areYouSure = 'Are you sure you want to delete this system?\n' . "Doing so will remove all records related to $system{name}" . '\nincluding filesystem records and history as well as ' . 'loadavg history.'; - + my $actions = start_form { method => 'post', action => 'processsystem.cgi', @@ -1698,7 +1718,7 @@ sub displaySystem ($) { type => 'hidden', value => $system{name}, }; - + $actions .= input { name => 'delete', type => 'image', @@ -1719,18 +1739,18 @@ sub displaySystem ($) { $actions .= checkbox { disabled => 'disabled', checked => $system{active} eq 'true' ? 1 : 0, - }; - + }; + if ($system{notification}) { $actions .= a { href => "alertlog.cgi?system=$system{name}"}, img { src => 'alert.png', border => 0, alt => 'Alert!', - title => 'This system has alerts', + title => 'This system has alerts', }; } # if - + display th {class => 'label'}, "$actions Name:"; display end_form; display td {class => 'dataCentered', colspan => 2}, $system{name}; @@ -1741,12 +1761,12 @@ sub displaySystem ($) { display th {class => 'label', colspan => 2}, 'Type:'; display td {class => 'dataCentered'}, $system{type}; display end_Tr; - + display start_Tr; display th {class => 'label'}, 'OS Version:'; - display td {class => 'data', colspan => 10}, $system{os}; + display td {class => 'data', colspan => 10}, $system{os}; display end_Tr; - + display start_Tr; display th {class => 'label'}, 'Last Contacted:'; display td { @@ -1762,23 +1782,23 @@ sub displaySystem ($) { display td {class => 'dataCentered'}, $system{loadavgHist}; display th {class => 'label'}, 'Load Avg:'; display td {class => 'data'}, - a {href => + a {href => "plot.cgi?type=loadavg&system=$system{name}&scaling=Hour&points=24" }, img { src => "plotloadavg.cgi?system=$system{name}&tiny=1", border => 0, }; - + my $description = $system{description}; $description =~ s/\r\n/
/g; - + display start_Tr; display th {class => 'label'}, 'Description:'; - display td {class => 'data', colSpan => 10}, $description; + display td {class => 'data', colSpan => 10}, $description; display end_Tr; - + display end_table; - + display p {class => 'center'}, a { href => 'processsystem.cgi?action=Add', }, 'New system', img { @@ -1786,11 +1806,11 @@ sub displaySystem ($) { border => 0, }; - display h1 {class => 'center'}, + display h1 {class => 'center'}, 'Filesystem Details: ' . ucfirst $system{name}; - + display start_table {cellspacing => 1}; - + display start_Tr; display th {class => 'labelCentered'}, 'Action'; display th {class => 'labelCentered'}, 'Filesystem'; @@ -1803,32 +1823,32 @@ sub displaySystem ($) { display th {class => 'labelCentered'}, 'Threshold'; display th {class => 'labelCentered'}, 'History'; display th {class => 'labelCentered'}, 'Usage'; - display end_Tr; - - foreach ($clearadm->FindFilesystem ($system{name})) { + display end_Tr; + + for ($clearadm->FindFilesystem ($system{name})) { my %filesystem = %{$_}; - + my %fs = $clearadm->GetLatestFS ( - $filesystem{system}, + $filesystem{system}, $filesystem{filesystem} ); - + my $size = autoScale $fs{size}; my $used = autoScale $fs{used}; - my $free = autoScale $fs{free}; + my $free = autoScale $fs{free}; - # TODO: Note that this percentages does not agree with df output. I'm not + # TODO: Note that this percentages does not agree with df output. I'm not # sure why. - my $usedPct = $fs{size} == 0 ? 0 + my $usedPct = $fs{size} == 0 ? 0 : sprintf ('%.0f', (($fs{reserve} + $fs{used}) / $fs{size} * 100)); - - my $class = $usedPct < $filesystem{threshold} + + my $class = $usedPct < $filesystem{threshold} ? 'data' : 'dataAlert'; my $classCentered = $class . 'Centered'; my $classRight = $class . 'Right'; - + display start_Tr; display start_td {class => 'data'}; @@ -1841,7 +1861,7 @@ sub displaySystem ($) { method => 'post', action => 'processfilesystem.cgi', }; - + display input { type => 'hidden', name => 'system', @@ -1852,7 +1872,7 @@ sub displaySystem ($) { name => 'filesystem', value => $filesystem{filesystem}, }; - + display input { name => 'delete', type => 'image', @@ -1870,18 +1890,18 @@ sub displaySystem ($) { value => 'Edit', title => 'Edit', }; - + if ($filesystem{notification}) { display a { href => "alertlog.cgi?system=$filesystem{system}"}, img { src => 'alert.png', border => 0, alt => 'Alert!', - title => 'This filesystem has alerts', + title => 'This filesystem has alerts', }; - } # if + } # if - display end_form; + display end_form; display td {class => $class}, $filesystem{filesystem}; display td {class => $classCentered}, $filesystem{fstype}; display td {class => $class}, $filesystem{mount}; @@ -1891,8 +1911,8 @@ sub displaySystem ($) { display td {class => $classRight}, "$usedPct%"; display td {class => $classRight}, "$filesystem{threshold}%"; display td {class => $classCentered}, $filesystem{filesystemHist}; - display td {class => $classCentered}, - a {href => + display td {class => $classCentered}, + a {href => "plot.cgi?type=filesystem&system=$system{name}" . "&filesystem=$filesystem{filesystem}" . "&scaling=Day&points=7" @@ -1903,16 +1923,16 @@ sub displaySystem ($) { border => 0, }; display end_Tr; - } # foreach + } # for display end_table; - + return; } # displaySystem sub displayTask (;$) { my ($task) = @_; - + display start_table {cellspacing => 1, width => '98%'}; display start_Tr; @@ -1924,16 +1944,16 @@ sub displayTask (;$) { display th {class => 'labelCentered'}, 'Restartable'; display th {class => 'labelCentered'}, 'Category'; display end_Tr; - - foreach ($clearadm->FindTask ($task)) { + + for ($clearadm->FindTask ($task)) { my %task = %{$_}; - + $task{system} = 'All Systems' unless $task{system}; - + display start_Tr; my $areYouSure = "Are you sure you want to delete the $task{name} task?"; - + my $actions = start_form { method => 'post', action => 'processtask.cgi', @@ -1954,7 +1974,7 @@ sub displayTask (;$) { alt => 'Delete', value => 'Delete', title => 'Cannot delete predefined task', - }; + }; $actions .= input { name => 'edit', disabled => 'true', @@ -1984,34 +2004,34 @@ sub displayTask (;$) { }; } # if - display end_form; + display end_form; display td {class => 'dataCentered'}, $actions; display td {class => 'data'}, $task{name}; - display td {class => 'data'}, $task{system}; + display td {class => 'data'}, $task{system}; display td {class => 'data'}, $task{description}; display td {class => 'data'}, $task{command}; display td {class => 'dataCentered'}, $task{restartable}; - display td {class => 'data'}, + display td {class => 'data'}, (InArray $task{name}, @PREDEFINED_TASKS) ? 'Predefined' : 'User Defined'; display end_Tr; - } # foreach + } # for + + display end_table; - display end_table; - display p {class => 'center'}, a { href => 'processtask.cgi?action=Add', }, 'New task', img { src => 'add.png', border => 0, }; - + return; } # DisplayAlerts sub editAlert (;$) { my ($alert) = @_; - + display start_form ( -method => 'post', -action => 'processalert.cgi', @@ -2022,10 +2042,10 @@ sub editAlert (;$) { if ($alert) { %alert = $clearadm->GetAlert ($alert); - + return - unless %alert; - + unless %alert; + display input { name => 'oldname', type => 'hidden', @@ -2034,21 +2054,21 @@ sub editAlert (;$) { } else { $alert= ''; } # if - + display input { name => 'action', type => 'hidden', value => 'Post', }; - + display start_table {cellspacing => 1}; - + display start_Tr; display th {class => 'labelCentered'}, 'Name'; display th {class => 'labelCentered'}, 'Type'; display th {class => 'labelCentered'}, 'Who'; display end_Tr; - + display start_Tr; display td { class => 'data', @@ -2080,26 +2100,26 @@ sub editAlert (;$) { }; display end_Tr; display end_table; - + display '
'; display p submit ({value => $alert ? 'Update' : 'Add'}), reset; display '
'; - + display end_form; - + return; } # editAlert sub editFilesystem ($$) { my ($system, $filesystem) = @_; - + display start_form ( -method => 'post', -action => 'processfilesystem.cgi', ); display start_table {width => '800px', cellspacing => 1}; - + display start_Tr; display th {class => 'labelCentered'}, 'Filesystem'; display th {class => 'labelCentered'}, 'Type'; @@ -2110,11 +2130,11 @@ sub editFilesystem ($$) { display th {class => 'labelCentered'}, 'Used %'; display th {class => 'labelCentered'}, 'History'; display th {class => 'labelCentered'}, 'Threshold'; - display end_Tr; - + display end_Tr; + my %filesystem = $clearadm->GetFilesystem ($system, $filesystem); my %fs = $clearadm->GetLatestFS ($system, $filesystem); - + display input { name => 'action', type => 'hidden', @@ -2124,13 +2144,13 @@ sub editFilesystem ($$) { name => 'system', type => 'hidden', value => $filesystem{system}, - }; + }; display input { name => 'filesystem', type => 'hidden', value => $filesystem{filesystem}, - } ; - + } ; + my $size = autoScale $fs{size}; my $used = autoScale $fs{used}; my $free = autoScale $fs{free}; @@ -2142,11 +2162,11 @@ sub editFilesystem ($$) { display td {class => 'dataRight'}, $size; display td {class => 'dataRight'}, $used; display td {class => 'dataRight'}, $free; - # TODO: Note that this percentages does not agree with df output. I'm not + # TODO: Note that this percentages does not agree with df output. I'm not # sure why. display td {class => 'dataCentered'}, sprintf ('%.0f%%', (($fs{reserve} + $fs{used}) / $fs{size} * 100)); - + my $historyDropdown = popup_menu { name => 'filesystemHist', class => 'dropdown', @@ -2166,34 +2186,34 @@ sub editFilesystem ($$) { ], default => $system ? $filesystem{filesystemHist} : '6 months', }; - + display td { class => 'dataRight', - }, $historyDropdown; - + }, $historyDropdown; + my $thresholdDropdown = popup_menu { name => 'threshold', class => 'dropdown', values => [1 .. 100], default => $filesystem{threshold}, - }; + }; display td {class => 'dataCentered'}, $thresholdDropdown . '%'; display end_Tr; - - display end_table; - + + display end_table; + display '
'; display p submit ({value => 'Update'}), reset; display '
'; - + display end_form; - + return; } # editFilesytem sub editNotification (;$) { my ($notification) = @_; - + display start_form ( -method => 'post', -action => 'processnotification.cgi', @@ -2204,10 +2224,10 @@ sub editNotification (;$) { if ($notification) { %notification = $clearadm->GetNotification ($notification); - + return - unless %notification; - + unless %notification; + display input { name => 'oldname', type => 'hidden', @@ -2216,22 +2236,22 @@ sub editNotification (;$) { } else { $notification = ''; } # if - + display input { name => 'action', type => 'hidden', value => 'Post', }; - + display start_table {cellspacing => 1}; - + display start_Tr; display th {class => 'labelCentered'}, 'Name'; display th {class => 'labelCentered'}, 'Alert'; display th {class => 'labelCentered'}, 'Condition'; display th {class => 'labelCentered'}, 'Not More Than'; display end_Tr; - + display start_Tr; display td { class => 'data', @@ -2243,13 +2263,13 @@ sub editNotification (;$) { type => 'text', value => $notification ? $notification{name} : '', }; - + display td { class => 'dataCentered', - }, makeAlertDropdown undef, $notification{alert} + }, makeAlertDropdown undef, $notification{alert} ? $notification{alert} : 'Email admin'; - + display td { class => 'data', }, input { @@ -2263,22 +2283,22 @@ sub editNotification (;$) { display td { class => 'dataCentered', }, makeNoMoreThanDropdown undef, $notification{nomorethan}; - + display end_Tr; display end_table; - + display '
'; display p submit ({value => $notification ? 'Update' : 'Add'}), reset; display '
'; - + display end_form; - + return; } # editNotification sub editSchedule (;$) { my ($schedule) = @_; - + display start_form ( -method => 'post', -action => 'processschedule.cgi', @@ -2289,10 +2309,10 @@ sub editSchedule (;$) { if ($schedule) { %schedule = $clearadm->GetSchedule ($schedule); - + return - unless %schedule; - + unless %schedule; + display input { name => 'oldname', type => 'hidden', @@ -2301,15 +2321,15 @@ sub editSchedule (;$) { } else { $schedule = ''; } # if - + display input { name => 'action', type => 'hidden', value => 'Post', }; - + display start_table {cellspacing => 1}; - + display start_Tr; display th {class => 'labelCentered'}, 'Active'; display th {class => 'labelCentered'}, 'Name'; @@ -2317,7 +2337,7 @@ sub editSchedule (;$) { display th {class => 'labelCentered'}, 'Notification'; display th {class => 'labelCentered'}, 'Frequency'; display end_Tr; - + display start_Tr; display td { class => 'dataCentered', @@ -2339,21 +2359,21 @@ sub editSchedule (;$) { }; display td { class => 'dataCentered', - }, makeTaskDropdown undef, $schedule{task}; + }, makeTaskDropdown undef, $schedule{task}; display td { class => 'dataCentered', - }, makeNotificationDropdown undef, $schedule{notification}; - + }, makeNotificationDropdown undef, $schedule{notification}; + my $nbr = 5; my $multiplier = 'minutes'; - + if ($schedule{frequency} =~ /(\d+)\s(\S+)/ ) { $nbr = $1; $multiplier = $2; - + $multiplier .= 's' if $nbr == 1; } # if - + display td { class => 'data', }, input { @@ -2363,25 +2383,25 @@ sub editSchedule (;$) { size => 1, type => 'text', value => $nbr, - }, + }, ' ', makeMultiplierDropdown undef, $multiplier; - + display end_Tr; display end_table; - + display '
'; display p submit ({value => $schedule ? 'Update' : 'Add'}), reset; display '
'; - + display end_form; - + return; } # editSchedule sub editSystem (;$) { my ($system) = @_; - + display start_form ( -method => 'post', -action => 'processsystem.cgi', @@ -2389,13 +2409,13 @@ sub editSystem (;$) { ); my %system; - + if ($system) { %system = $clearadm->GetSystem ($system); - + return unless %system; - + display input { name => 'name', type => 'hidden', @@ -2404,15 +2424,15 @@ sub editSystem (;$) { } else { $system = ''; } # if - + display input { name => 'action', type => 'hidden', value => 'Post', }; - + display start_table {cellspacing => 1}; - + display start_Tr; display th {class => 'label'}, checkbox ({ name => 'active', @@ -2420,7 +2440,7 @@ sub editSystem (;$) { checked => $system{active} eq 'false' ? 0 : 1, label => '', }) . ' Name: '; - + if ($system) { display td {class => 'data'}, $system{name}; } else { @@ -2434,7 +2454,7 @@ sub editSystem (;$) { type => 'text', }; } # if - + display th {class => 'label'}, 'Alias:'; display td { class => 'data', @@ -2456,24 +2476,24 @@ sub editSystem (;$) { name => 'port', size => 4, type => 'text', - value => $system + value => $system ? $system{port} : $Clearadm::CLEAROPTS{CLEARADM_PORT}, }; - + my $systemTypeDropdown = popup_menu { name => 'type', class => 'dropdown', values => ['Unix', 'Linux', 'Windows'], default => $system ? $system{type} : 'Linux', }; - + display th {class => 'label'}, 'Type:'; display td { class => 'dataRight', }, $systemTypeDropdown; display end_Tr; - + display start_Tr; display th {class => 'label'}, 'Admin:'; display td { @@ -2507,11 +2527,11 @@ sub editSystem (;$) { name => 'loadavgThreshold', size => 3, type => 'text', - value => $system + value => $system ? $system{loadavgThreshold} : $Clearadm::CLEAROPTS{CLEARADM_LOADAVG_THRESHOLD}, }; - + my $historyDropdown = popup_menu { name => 'loadavgHist', class => 'dropdown', @@ -2531,15 +2551,15 @@ sub editSystem (;$) { ], default => $system ? $system{loadavgHist} : '6 months', }; - + display th {class => 'label'}, 'History:'; display td { class => 'dataRight', - }, $historyDropdown; - + }, $historyDropdown; + my $description = $system ? $system{description} : ''; $description =~ s/\r\n/
/g; - + display start_Tr; display th {class => 'label'}, 'Description:'; display td { @@ -2554,19 +2574,19 @@ sub editSystem (;$) { }; display end_Tr; display end_table; - + display '
'; display p submit ({value => $system ? 'Update' : 'Add'}), reset; display '
'; - + display end_form; - + return; } # editSystem sub editTask (;$) { my ($task) = @_; - + display start_form ( -method => 'post', -action => 'processtask.cgi', @@ -2577,10 +2597,10 @@ sub editTask (;$) { if ($task) { %task = $clearadm->GetTask ($task); - + return unless %task; - + display input { name => 'oldname', type => 'hidden', @@ -2589,15 +2609,15 @@ sub editTask (;$) { } else { $task = ''; } # if - + display input { name => 'action', type => 'hidden', value => 'Post', }; - + display start_table {cellspacing => 1}; - + display start_Tr; display th {class => 'labelCentered'}, 'Name'; display th {class => 'labelCentered'}, 'System'; @@ -2605,7 +2625,7 @@ sub editTask (;$) { display th {class => 'labelCentered'}, 'Command'; display th {class => 'labelCentered'}, 'Restartable'; display end_Tr; - + display start_Tr; display td { class => 'data', @@ -2619,14 +2639,13 @@ sub editTask (;$) { }; my $systemDropdown = makeSystemDropdown ( undef, - $task{system} ? $task{system} : 'All Systems', + $task{system} ? $task{system} : 'localhost', undef, ( - 'All systems' => undef, - 'Localhost' => 'Localhost', + 'localhost' => 'localhost', ), ); - - display td {class => 'data'}, $systemDropdown; + + display td {class => 'data'}, $systemDropdown; display td { class => 'data', @@ -2638,7 +2657,7 @@ sub editTask (;$) { type => 'text', value => $task ? $task{description} : '', }; - + display td { class => 'data', }, input { @@ -2653,50 +2672,50 @@ sub editTask (;$) { display td { class => 'dataCentered', }, makeRestartableDropdown undef, $task{restartable}; - + display end_Tr; display end_table; - + display '
'; display p submit ({value => $task ? 'Update' : 'Add'}), reset; display '
'; - + display end_form; - + return; } # editTask sub footing () { my $clearscm = a {-href => 'http://clearscm.com'}, 'ClearSCM, Inc.'; - + # Figure out which script by using CLEARADM_BASE. - my $script = basename (url {-absolute => 1}); + my $script = basename (url {-absolute => 1}); $script = 'index.cgi' if $script eq 'clearadm'; my $scriptFullPath = "$Clearadm::CLEAROPTS{CLEARADM_BASE}/$script"; - - my ($year, $mon, $mday, $hour, $min, $sec) = + + my ($year, $mon, $mday, $hour, $min, $sec) = ymdhms ((stat ($scriptFullPath))[9]); my $dateModified = "$mon/$mday/$year @ $hour:$min"; - + $script = a { -href => "http://clearscm.com/php/scm_man.php?file=clearadm/$script" }, $script; - + display end_div; - + display start_div {-class => 'copyright'}; display "$script: Last modified: $dateModified"; display br "Copyright © $year, $clearscm - All rights reserved"; display end_div; - + print end_html; - + return; } # footing - + 1; =pod @@ -2725,13 +2744,13 @@ L =head2 ClearSCM Perl Modules -=begin man +=begin man Clearadm DateUtils Display Utils - + =end man =begin html