[cisco-stats] Added new tool checkSyslogForReboot
authorMaximilian Wilhelm <max@rfc2324.org>
Fri, 18 Jul 2008 23:15:05 +0000 (01:15 +0200)
committerMaximilian Wilhelm <max@rfc2324.org>
Fri, 18 Jul 2008 23:15:05 +0000 (01:15 +0200)
  checkSyslogForReboot will check a list of syslog files containg cisco
  device logs for signs of device reboots and print out all device
  reboots including the timestamp of the log entry.

Signed-off-by: Maximilian Wilhelm <max@rfc2324.org>

cisco-stats/checkSyslogForReboot [new file with mode: 0755]

diff --git a/cisco-stats/checkSyslogForReboot b/cisco-stats/checkSyslogForReboot
new file mode 100755 (executable)
index 0000000..3426fec
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/perl -WT
+#
+# Check the list of logfiles for signs of device reboots, that is compare the
+# syslog entry counter of a line with the latter one. If the latter on is
+# grather than the current one, the device might have been rebootet.
+#
+# Maximilian Wilhelm <max@rfc2324.org>
+#  --  Sat 19 Jul 2008 12:37:17 AM CEST
+#
+
+use strict;
+
+if (! @ARGV) {
+       die "Usage: $0 logfile1 [logfile2 [...]]\n";
+}
+
+foreach my $file (@ARGV) {
+       if (! -f $file) {
+               warn "Error: Logfile \"$file\" does not exists or is not a file. Skipping...\n";
+               next;
+       }
+
+       print "Checking file \"$file\"...\n";
+       if (! open (LOGFILE, '<', $file)) {
+               warn "Error: Could not open file \"$file\": $!. Skipping\n";
+               next;
+       }
+
+
+       my $last_id = undef;
+       while (my $line = <LOGFILE>) {
+#              Jul 19 00:15:13 192.168.23.42 1124: Jul 19 00:15:11: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/5, changed state to down
+               if ($line =~ m/^([A-Za-z]+ [[:space:]][0-9]+ [0-9:]+) ([0-9.]+) ([0-9]+):.*/) {
+                       my ($timestamp, $ip, $line_id) = ($1, $2, $3);
+
+                       if (defined $last_id && $last_id > $line_id) {
+                               print "  Device $ip rebooted around $timestamp\n";
+                       }
+
+                       $last_id = $line_id;
+               }
+       }
+
+       if (! close (LOGFILE)) {
+               warn "Error while closing logfile \"$file\": $!\n";
+       }
+
+       print "\n";
+}