X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=aptcheck%2Faptcheck.pl;h=b6353002b7b7128cc8c18268fe2442db7ea7aabd;hb=12ca199577b3174589205147fe1b2365d231ab85;hp=2dac01abd5ab355bd2efde5739224563e38b1fa7;hpb=90e817a4e409512818d48db9abbaa55f11b3abf6;p=git-tools-moved-to-github.git diff --git a/aptcheck/aptcheck.pl b/aptcheck/aptcheck.pl index 2dac01a..b635300 100755 --- a/aptcheck/aptcheck.pl +++ b/aptcheck/aptcheck.pl @@ -21,14 +21,12 @@ # 15-Aug-2011 Heikki: Adding a total in the headline, for nagiosgrapher # 21-May-2012 Heikki: Added a date since when a package has been pending # 31-May-2012 Heikki: Pointing to the new wiki +# 01-Jan-2013 Heikki: Get hosts from nagios-us as well. # # TODO: Assumes that we release our restricted packages for all versions # and architectures at the same time. Gets only the highest version from # all, and reports anything less than this. Good enough for now. # -# TODO: Get the dates from ls --full-time /var/cache/apt/archives/ -# and display next to the packages, so we can see how long they have -# been lingering. Boldface them if older than some limit #### Init use strict; @@ -52,10 +50,15 @@ my %hostcomments = ( # I could use a hard-coded list, but I would forget to maintain it. # Nagios knows most of our hosts. It even knows which are worth # checking, they have a command to check apts! +print "Getting hostlist from nagios\n" if $debug; +my $hostlist1 = `ssh nagios grep -l Apt /etc/nagios3/indexdata-conf.d/*.cfg` + or die "Could not get host list from nagios (dk)"; -my $hostlist = `ssh nagios grep -l Apt /etc/nagios3/indexdata-conf.d/*.cfg` - or die "Could not get host list"; +print "Getting hostlist from nagios-us\n" if $debug; +my $hostlist2 = `ssh nagios-us grep -l Apt /etc/nagios3/indexdata-conf.d/*.cfg` + or die "Could not get host list from nagios (dk)"; +my $hostlist = $hostlist1 . $hostlist2; print "Got list:\n$hostlist\n" if $debug>2; ###### Get list of packages that can be manually maintained @@ -123,6 +126,8 @@ my %newdates; # To be written in the new version of the file my $datefilename = "aptcheck.data"; my $dateoldfilename = "aptcheck.old"; my $thisdate = "*"; # indicates really old stuff +my $warndate; # Older than this will be boldfaced + if ( -f $datefilename ) { print "Reading dates from $datefilename\n" if $debug; open F, $datefilename or die "Could not open date file $datefilename: $!"; @@ -136,6 +141,9 @@ if ( -f $datefilename ) { close F; $thisdate = `date +%F`; chomp($thisdate); + $warndate = `date +%F -d "30 days ago"` ; ; + chomp($warndate); + print "Dates: now: '$thisdate' warn: '$warndate'\n" if $debug; } else { print "No datefile $datefilename found, starting from scratch\n"; } @@ -143,7 +151,8 @@ if ( -f $datefilename ) { my $table = "\n"; -for my $hline ( split("\n",$hostlist) ) { +#for my $hline ( split("\n",$hostlist) ) { +for my $hline ( sort( split("\n",$hostlist) ) ) { next unless ( $hline =~ /\/([a-z0-9-]+)\.cfg$/ ); my $H = $1; next if ($H =~ /^commands/ ); @@ -211,7 +220,12 @@ for my $hline ( split("\n",$hostlist) ) { } else { $newdates{$datekey} = $thisdate; } - $det .= ""; + my $dispdate = $newdates{$datekey}; + # if ( $dispdate lt $warndate ) { + if ( 0 ) { # manual packages don't need to be highlighted + $dispdate = "$dispdate !"; + } + $det .= ""; $det .= "\n"; my $key = "$restrname"; if ( !$summary{$key} ) { @@ -264,7 +278,11 @@ for my $hline ( split("\n",$hostlist) ) { } else { $newdates{$datekey} = $thisdate; } - $det .= ""; + my $dispdate = $newdates{$datekey}; + if ( ( $dispdate lt $warndate ) && ( $src =~ /Security/) ) { + $dispdate = "$dispdate !"; + } + $det .= ""; $det .= "\n"; } @@ -297,14 +315,18 @@ for my $hline ( split("\n",$hostlist) ) { $table .= "
" . $newdates{$datekey} . "" . $dispdate . "
" . $newdates{$datekey} . "" . $dispdate . "
\n"; # Save the date file -`mv -f $datefilename $dateoldfilename`; -open F, ">$datefilename" or die "Could not open date file $datefilename for writing"; -for my $k (sort(keys(%newdates)) ) { - print F "$k " . $newdates{$k}. "\n"; - print "date for '$k' '" . $newdates{$k}. "'\n" if $debug; +if ( ! $debug ) { + `mv -f $datefilename $dateoldfilename`; + open F, ">$datefilename" or die "Could not open date file $datefilename for writing"; + for my $k (sort(keys(%newdates)) ) { + print F "$k " . $newdates{$k}. "\n"; + print "date for '$k' '" . $newdates{$k}. "'\n" if $debug; + } + close F + or die "Could not close date file $datefilename: $!"; +} else { + print "Not updating the date file, this is a debug run\n"; } -close F - or die "Could not close date file $datefilename: $!"; # Page header my $outfile = "/tmp/aptcheck.html"; @@ -422,6 +444,9 @@ if ( 1 ) { } print F "\n"; +print F "

" . ( $sectot + $owntot + $mantot + $normtot ) . + " packages pending ($sectot critical) \n"; + # Graph #my $secs = 60*60*24 * 7 * 2; # 2 weeks in secods #my $secs = "1m"; # one month, let nagios do the math @@ -458,8 +483,6 @@ for my $P ( sort(keys(%summary)) ) { } print F "\n"; -print F "

Packages marked with * are from the time before started to " . - "track package dates \n"; print F "

Produced " . `date`. " on " . `hostname` . " by " . `whoami` . "
\n";