-#!/usr/bin/perl -w
-package main;
-use POSIX;
-use strict;
-
-
-#get date info
-my ($SEC, $MIN, $HOUR, $DAY,$MONTH,$YEAR) = (localtime(time))[0,1,2,3,4,5,6];
-$YEAR+=1900;
-$MONTH++;
-if ($DAY < 10) {
- $DAY = "0".$DAY;
-}
-if ($MONTH < 10) {
- $MONTH = "0".$MONTH;
-}
-
-my $posF = "/tmp/eg_stats_position.log";
-my $statsF = "/var/log/evergreen/prod/$YEAR/$MONTH/$DAY/eg_stats.log";
-my $pos;
-my $loc;
-my $status = 0; #status is OK!
-my $info = "";
-
-#if it exists open it and get the current position
-#if not set the current position to 0
-if (-e $posF) {
- open(DATA, "<$posF");
- my @values = <DATA>;
- if (@values != 2) { #make sure the array is the correct size
- $pos = 0;
- } else {
- chomp($loc = $values[0]);
- if ($loc ne $statsF) { #check to see that we are in the correct file
- $pos = 0;
- } else {
- chomp($pos = $values[1]);
- #check to see if $pos is a valid positive integer(or 0), if not set to 0
- if (!( $pos =~ /^\d+$/ )) {
- $pos = 0;
- }
- }
- }
- close DATA;
-} else {
- $pos = 0;
-}
-#parse the file and output for Nagios if necessary
-if (-e $statsF) {
- open(DATA, "<$statsF");
- seek DATA, $pos, 0;
- while(<DATA>) {
- my($line) = $_;
- chomp($line);
- #check for lost controller first
- if (($line =~ m/listener count: 0/) || ($line =~ m/controller count: 0/) || ($line =~ m/master count: 0/)){
- if ($line =~ m/listener count: 0/) {
- $info = $info."Lost a listener: $line - ";
- }
- if ($line =~ m/master count: 0/) {
- $info = $info."Lost a master: $line - ";
- }
- if ($line =~ m/controller count: 0/) {
- $info = $info."Lost a controller: $line - ";
- }
- $status = 2;
- }
- #now check for drone ratio
- if ($line =~ m/SERVICE/) {
- my ($count) = $line =~ /drone count: (\d+\/\d+)/i;
- my $ratio = eval($count);
- my $pct = ceil($ratio * 100);
- if ($ratio >= 0.75) {
- $info = $info."Drone count is $pct % - $line - ";
- $status = 1;
- }
- if ($ratio >= 0.9) {
- $info = $info."Drone count is $pct % - $line - ";
- $status = 2;
- }
- }
-
- }
- $pos = tell DATA;
- close DATA;
-} else {
- $pos = 0;
-}
-
-#update position info
-open(DATA, ">$posF");
-print DATA "$statsF\n$pos\n";
-close DATA;
-
-if ($info eq "") {
- $info = "EG-STATS-COLLECTOR STATUS: OK!";
-}
-
-print $info;
-exit $status;
+#!/usr/bin/perl -w\r
+package main;\r
+use POSIX;\r
+use strict;\r
+\r
+\r
+#get date info\r
+my ($SEC, $MIN, $HOUR, $DAY,$MONTH,$YEAR) = (localtime(time))[0,1,2,3,4,5,6];\r
+$YEAR+=1900;\r
+$MONTH++;\r
+if ($DAY < 10) {\r
+ $DAY = "0".$DAY;\r
+}\r
+if ($MONTH < 10) {\r
+ $MONTH = "0".$MONTH;\r
+}\r
+\r
+my $posF = "/tmp/eg_stats_position.log";\r
+use Time::Piece;\r
+my $logdate = Time::Piece->new->strftime('%Y/%m/%d');\r
+# print $logdate;\r
+my $loghour = Time::Piece->new->strftime('%H');\r
+# print $loghour;\r
+my $statsF = "/var/log/evergreen/prod/$logdate/eg_stats.$loghour.log";\r
+my $pos; \r
+my $loc;\r
+my $status = 0; #status is OK!\r
+my $info = "";\r
+\r
+#if it exists open it and get the current position\r
+#if not set the current position to 0\r
+\r
+\r
+if (-e $posF) {\r
+ open(DATA, "<$posF");\r
+ my @values = <DATA>;\r
+ if (@values != 2) { #make sure the array is the correct size\r
+ $pos = 0;\r
+ } else {\r
+ chomp($loc = $values[0]);\r
+ if ($loc ne $statsF) { #check to see that we are in the correct file\r
+ $pos = 0;\r
+ } else {\r
+ chomp($pos = $values[1]); \r
+ #check to see if $pos is a valid positive integer(or 0), if not set to 0\r
+ if (!( $pos =~ /^\d+$/ )) { \r
+ $pos = 0;\r
+ }\r
+ }\r
+ }\r
+ close DATA;\r
+} else {\r
+ $pos = 0;\r
+}\r
+\r
+#parse the file and output for Nagios if necessary\r
+if (-e $statsF) {\r
+ open(DATA, "<$statsF");\r
+ seek DATA, $pos, 0;\r
+ while(<DATA>) {\r
+ my($line) = $_;\r
+ chomp($line);\r
+ #check for lost controller first\r
+ if (($line =~ m/listener count: 0/) || ($line =~ m/controller count: 0/) || ($line =~ m/master count: 0/)){\r
+ if ($line =~ m/listener count: 0/) {\r
+ $info = $info."Lost a listener: $line - ";\r
+ }\r
+ if ($line =~ m/master count: 0/) {\r
+ $info = $info."Lost a master: $line - ";\r
+ }\r
+ if ($line =~ m/controller count: 0/) {\r
+ $info = $info."Lost a controller: $line - ";\r
+ }\r
+ $status = 2;\r
+ } \r
+ #now check for drone ratio\r
+ if ($line =~ m/SERVICE/) {\r
+ my ($count) = $line =~ /drone count: (\d+\/\d+)/i;\r
+ my $ratio = eval($count);\r
+ my $pct = ceil($ratio * 100);\r
+ if ($ratio >= 0.75) {\r
+ $info = $info."Drone count is $pct % - $line - ";\r
+ $status = 1;\r
+ }\r
+ if ($ratio >= 0.9) {\r
+ $info = $info."Drone count is $pct % - $line - "; \r
+ $status = 2;\r
+ } \r
+ }\r
+ \r
+ }\r
+ $pos = tell DATA;\r
+ close DATA;\r
+} else {\r
+ $pos = 0;\r
+}\r
+\r
+#update position info\r
+open(DATA, ">$posF");\r
+print DATA "$statsF\n$pos\n";\r
+close DATA;\r
+\r
+if ($info eq "") {\r
+ $info = "EG-STATS-COLLECTOR STATUS: OK!";\r
+}\r
+\r
+# NEW: make state "WARN, logfile does not exist"\r
+unless (-e $statsF) {\r
+ $status = 1;\r
+ $info = "EG-STATS-COLLECTOR STATUS: WARN, current logfile not found.";\r
+ #$info = "EG-STATS-COLLECTOR STATUS: WARN; '$statsF' not found.";\r
+}\r
+\r
+\r
+print $info;\r
+print "";\r
+exit $status;\r
+\r