diff options
author | Petter Reinholdtsen <pere@hungry.com> | 2006-08-26 09:49:59 +0000 |
---|---|---|
committer | Petter Reinholdtsen <pere@hungry.com> | 2006-08-26 09:49:59 +0000 |
commit | 28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb (patch) | |
tree | 1e20a8fd262efc828d0a97920bdb2d7d81aa0820 | |
parent | d4eb01b361e7910a2e64346665dffeda2f8d76be (diff) | |
download | sitesummary-28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb.tar.gz sitesummary-28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb.tar.bz2 sitesummary-28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb.tar.xz |
The system is now operational.
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | SiteSummary.pm | 118 | ||||
-rwxr-xr-x | collect.d/siteinfo | 6 | ||||
-rw-r--r-- | debian/changelog | 2 | ||||
-rw-r--r-- | debian/sitesummary-client.init | 2 | ||||
-rw-r--r-- | debian/sitesummary-client.install | 2 | ||||
-rw-r--r-- | debian/sitesummary.dirs | 1 | ||||
-rw-r--r-- | debian/sitesummary.install | 2 | ||||
-rwxr-xr-x | kernelversion-summary | 28 | ||||
-rwxr-xr-x | site-summary | 28 | ||||
-rwxr-xr-x | sitecontact-summary | 28 | ||||
-rw-r--r-- | sitesummary-client | 2 | ||||
-rw-r--r-- | sitesummary-collector.cgi | 10 |
13 files changed, 230 insertions, 7 deletions
@@ -6,7 +6,9 @@ datadir = $(prefix)/share cgibindir = $(libdir)/cgi-bin libdir = $(prefix)/lib pkgdatadir = $(datadir)/sitesummary +pkgdir = $(libdir)/sitesummary collectordir = $(libdir)/sitesummary/collect.d +perldir = $(libdir)/perl5 INSTALL = install INSTALL_DATA = $(INSTALL) -m 644 @@ -23,6 +25,12 @@ install-server: $(INSTALL) -d $(DESTDIR)$(cgibindir) $(INSTALL) sitesummary-collector.cgi $(DESTDIR)$(cgibindir) + $(INSTALL) -d $(DESTDIR)$(perldir) + $(INSTALL) -d $(DESTDIR)$(pkgdir) + $(INSTALL_DATA) SiteSummary.pm $(DESTDIR)$(perldir) + $(INSTALL) sitecontact-summary $(DESTDIR)$(pkgdir) + $(INSTALL) kernelversion-summary $(DESTDIR)$(pkgdir) + install-client: $(INSTALL) -d $(DESTDIR)$(sbindir) $(INSTALL) sitesummary-client sitesummary-upload $(DESTDIR)$(sbindir) diff --git a/SiteSummary.pm b/SiteSummary.pm new file mode 100644 index 0000000..fefb947 --- /dev/null +++ b/SiteSummary.pm @@ -0,0 +1,118 @@ +# +# Support library for scripts parsing the sitesummary files. +# + +package SiteSummary; +require Exporter; + +our $VERSION = 0.01; +our @ISA = qw(Exporter); +our @EXPORT = qw( + for_all_hosts + get_filepath_current + get_site + get_sitecontact + get_linux_kernel_ver + ); + +my $pwd = "/var/lib/sitesummary/entries"; # Path to the entries + +sub get_filepath_current { + my ($hostid, $file) = @_; + return "$pwd/$hostid$file"; +} + +# +# Return the site string +# +sub get_site { + my $hostid = shift; + my $path = get_filepath_current($hostid, "/siteinfo/site"); + my $site; + if (open (FILE, $path)) { + while(<FILE>) { + chomp; + s/\#.+$//; + next if (/^\s*$/); + $site = $_; + } + close(FILE); + return $site; + } else { + return undef; + } +} + +# +# Return list with the mail addresses listed in sitecontact. +# +sub get_sitecontact { + my $hostid = shift; + my $path = get_filepath_current($hostid, "/siteinfo/sitecontact"); + my @addr = (); + if (open (FILE, $path)) { + while(<FILE>) { + chomp; + s/\#.+$//; + next if (/^\s*$/); + push(@addr, split(/,\s*/, $_)); + } + close(FILE); + return @addr; + } else { + return undef; + } +} + +# +# Return Linux kernel version for the machines using Linux. +# +sub get_linux_kernel_ver { + my $hostid = shift; + my $path = get_filepath_current($hostid, "/system/uname-smr"); + my $kver; + if (open (FILE, $path)) { + while(<FILE>) { + chomp; + s/\#.+$//; + next if (/^\s*$/); + my @f = (split(/\s+/, $_)); + $kver = $f[1] if ("Linux" eq $f[0]); + } + close(FILE); + return $kver; + } else { + return undef; + } +} + +sub for_all_hosts { + my $callback = shift; + + if ( ! -d $pwd ) { + print STDERR "error: Missing $pwd directory.\n"; + return undef; + } + opendir(DIR, $pwd) or die "$!: $pwd\nDied"; + my $count = 0; + foreach (readdir(DIR)) { + chomp; + next if m/^$/ || m/^.$/ || m/^..$/; + my $hostid = $_; + if ( -d "$pwd/$hostid" ) { + $count ++ if ($callback->($hostid)); + } else { + print STDERR "warning: Junk in filelog: $pwd/$hostid\n"; + } + } + closedir(DIR); + return $count; +} + +1; + +######################################################################## +# Local Variables: +# mode: perl +# End: +######################################################################## diff --git a/collect.d/siteinfo b/collect.d/siteinfo index e7254e7..e17e2e0 100755 --- a/collect.d/siteinfo +++ b/collect.d/siteinfo @@ -2,13 +2,13 @@ # site = location # sitegroup = sublocation -# sitecontact = email to site contact +# sitecontact = comma-separated list of emails to site contacts # hostclass = type of host (server, workstation, laptop, etc) mkdir siteinfo && cd siteinfo for filename in site sitegroup sitecontact hostclass ; do - file=/etc/sitecollector/$filename + file=/etc/sitesummary/$filename if [ -f $file ] ; then - cp $file siteinfo/$filename + cp $file $filename fi done diff --git a/debian/changelog b/debian/changelog index 13e5406..91609fe 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -sitesummary (0.0.1) UNRELEASED; urgency=low +sitesummary (0.0.0) UNRELEASED; urgency=low * Initial release. diff --git a/debian/sitesummary-client.init b/debian/sitesummary-client.init index 77b5906..3d42d7e 100644 --- a/debian/sitesummary-client.init +++ b/debian/sitesummary-client.init @@ -19,7 +19,7 @@ test -x $CLIENT || exit 0 case "$1" in start) - ( sleep 300 ; nice $CLIENT ) & + ( sleep 300 ; nice $CLIENT ) < /dev/null > /dev/null 2>&1 & ;; stop|reload|force-reload|restart) ;; diff --git a/debian/sitesummary-client.install b/debian/sitesummary-client.install index 23b8220..23e99ce 100644 --- a/debian/sitesummary-client.install +++ b/debian/sitesummary-client.install @@ -1,3 +1,3 @@ debian/tmp/usr/sbin -debian/tmp/usr/lib/sitesummary +debian/tmp/usr/lib/sitesummary/collect.d debian/tmp/usr/share/sitesummary/config diff --git a/debian/sitesummary.dirs b/debian/sitesummary.dirs new file mode 100644 index 0000000..4491828 --- /dev/null +++ b/debian/sitesummary.dirs @@ -0,0 +1 @@ +/var/lib/sitesummary diff --git a/debian/sitesummary.install b/debian/sitesummary.install index 38a4239..5ca6a13 100644 --- a/debian/sitesummary.install +++ b/debian/sitesummary.install @@ -1 +1,3 @@ debian/tmp/usr/lib/cgi-bin +debian/tmp/usr/lib/sitesummary/*-summary +debian/tmp/usr/lib/perl5 diff --git a/kernelversion-summary b/kernelversion-summary new file mode 100755 index 0000000..0298004 --- /dev/null +++ b/kernelversion-summary @@ -0,0 +1,28 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use SiteSummary; + +my %kernelvers; + +for_all_hosts(\&handle_host); + +print_summary(); + +sub handle_host { + my $hostid = shift; + #print "$hostid\n"; + for my $kver (get_linux_kernel_ver($hostid)) { + $kver = "" unless defined $kver; + $kernelvers{$kver}++; + } +} + +sub print_summary { + printf(" %-20s %5s\n", "kernel", "count"); + for my $kver (sort keys %kernelvers) { + printf(" %-20s %5d\n", $kver, $kernelvers{$kver}); + } +} diff --git a/site-summary b/site-summary new file mode 100755 index 0000000..4d0f5e0 --- /dev/null +++ b/site-summary @@ -0,0 +1,28 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use SiteSummary; + +my %sites; + +for_all_hosts(\&handle_host); + +print_summary(); + +sub handle_host { + my $hostid = shift; + #print "$hostid\n"; + for my $site (get_site($hostid)) { + $site = "" unless defined $site; + $sites{$site}++; + } +} + +sub print_summary { + printf(" %-20s %5s\n", "site", "count"); + for my $site (sort keys %sites) { + printf(" %-20s %5d\n", $site, $sites{$site}); + } +} diff --git a/sitecontact-summary b/sitecontact-summary new file mode 100755 index 0000000..2639b00 --- /dev/null +++ b/sitecontact-summary @@ -0,0 +1,28 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use SiteSummary; + +my %sitecontacts; + +for_all_hosts(\&handle_host); + +print_summary(); + +sub handle_host { + my $hostid = shift; + #print "$hostid\n"; + for my $sitecontact (get_sitecontact($hostid)) { + $sitecontact = "" unless defined $sitecontact; + $sitecontacts{$sitecontact}++; + } +} + +sub print_summary { + printf(" %-20s %5s\n", "contact", "count"); + for my $sitecontact (sort keys %sitecontacts) { + printf(" %-20s %5d\n", $sitecontact, $sitecontacts{$sitecontact}); + } +} diff --git a/sitesummary-client b/sitesummary-client index 67c4cce..6a7c7c4 100644 --- a/sitesummary-client +++ b/sitesummary-client @@ -7,6 +7,8 @@ set -e +PATH=/sbin:/usr/sbin:/bin:/usr/bin + # Make sure to store files in a ramfs backed # storage area on diskless clients, so use /tmp/. tmpdir=/tmp/sitesummary-$$ diff --git a/sitesummary-collector.cgi b/sitesummary-collector.cgi index bf98d81..be640b4 100644 --- a/sitesummary-collector.cgi +++ b/sitesummary-collector.cgi @@ -12,6 +12,7 @@ use POSIX qw(strftime); use Socket; my $basedir = "/var/lib/sitesummary"; +my $handlerdir = "/usr/lib/sitesummary/handler.d"; $ENV{PATH} = "/bin:/usr/bin"; @@ -105,9 +106,16 @@ sub process_entry { #print STDERR "MAC: $eth0mac\n"; my $newdir = "$basedir/entries/ether-$eth0mac"; - `rm -r $newdir` if ( -d $newdir ); + my $status = "new"; + if ( -d $newdir ) { + `rm -r $newdir`; + my $status = "update"; + } rename $dirname, $newdir || die; + for my $handler (<$handlerdir/*>) { + `$handler $newdir $status`; + } } sub get_peerinfo { |