aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetter Reinholdtsen <pere@hungry.com>2006-08-26 09:49:59 +0000
committerPetter Reinholdtsen <pere@hungry.com>2006-08-26 09:49:59 +0000
commit28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb (patch)
tree1e20a8fd262efc828d0a97920bdb2d7d81aa0820
parentd4eb01b361e7910a2e64346665dffeda2f8d76be (diff)
downloadsitesummary-28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb.tar.gz
sitesummary-28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb.tar.bz2
sitesummary-28c12356ac2e3c2578dc0b330ed6bb1245a8eeeb.tar.xz
The system is now operational.
-rw-r--r--Makefile8
-rw-r--r--SiteSummary.pm118
-rwxr-xr-xcollect.d/siteinfo6
-rw-r--r--debian/changelog2
-rw-r--r--debian/sitesummary-client.init2
-rw-r--r--debian/sitesummary-client.install2
-rw-r--r--debian/sitesummary.dirs1
-rw-r--r--debian/sitesummary.install2
-rwxr-xr-xkernelversion-summary28
-rwxr-xr-xsite-summary28
-rwxr-xr-xsitecontact-summary28
-rw-r--r--sitesummary-client2
-rw-r--r--sitesummary-collector.cgi10
13 files changed, 230 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 6b511b3..4b9b7c9 100644
--- a/Makefile
+++ b/Makefile
@@ -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 {