edimusrex has asked for the wisdom of the Perl Monks concerning the following question:
For some reason my logic isn't working. This is a nagios script I have written and the status output works as planned, but what I would like it to do is print out the list of domains and the days remaining until they expire. I had it coded differantly before without the fork but wanted to increase the performance. My issue now is the hash is empty upon completion. Seems like it has to do with the fork but not sure why. Here's what I got so far
#!/usr/bin/perl use warnings; use strict; use POSIX qw(strftime); use Time::Piece; use Cwd qw( abs_path ); use File::Basename; use File::Basename qw( dirname ); use LWP::Simple; use Parallel::ForkManager; use Date::Calc qw (Delta_Days); use Data::Dumper; my $pm = new Parallel::ForkManager(5); my $domains = dirname(abs_path($0)).'/domains.txt'; my %domainList; my $flag = 0; my $date = strftime "%Y-%m-%d", localtime; my %month = ( 'jan'=>'01','feb'=>'02','mar'=>'03','apr'=>'04','may'=>' +05','jun'=>'06','jul'=>'07','aug'=>'08','sep'=>'09','oct'=>'10','nov' +=>'11','dec'=>'12' ); open my $fh, $domains or die "CRIT: Unable to open $domains: $!\n"; while( my $domainName = <$fh> ) { chomp $domainName; print $domainName."\n"; $pm->start and next; my $expDate = `jwhois -n -h whois.crsnic.net $domainName | grep Ex +piration | awk '{print \$3}'`; print $expDate; my $diff = &dateDiff($expDate); if ($diff < 28 and $diff > 14) { $flag = 1; } elsif ($diff <= 14) { $flag = 2; } $domainList{$domainName} = $diff; exit($diff); $pm->finish; } close $fh; $pm->wait_all_children; print Dumper(\%domainList); if ($flag == 2){ my $status = "CRIT: There are Domains Expiring Soon. Please Resol +ve"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 2; } elsif ($flag == 1){ my $status = "WARN: There are Domains Expiring within a month. Pl +ease Resolve"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 1; } else { my $status = "OK: Domains Look good"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 0; } sub dateDiff { my $ex = shift; chomp $ex; my($day,$mon,$year) = split("-",$ex); my ($tyear,$tmon,$tday) = split("-",$date); print "$tyear, $tmon, $tday, $year, $month{$mon}, $day\n"; my $remaining_days = Delta_Days($tyear, $tmon, $tday, $year, $mont +h{$mon}, $day); return $remaining_days; }
As always any help is greatly appreciated
As you see I print out the hash just to test but it's always empty. I am sure I am missing something simple here
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Creating a hash within a fork
by choroba (Cardinal) on Jun 04, 2015 at 17:06 UTC | |
by edimusrex (Monk) on Jun 04, 2015 at 17:10 UTC | |
by sierpinski (Chaplain) on Jun 04, 2015 at 17:40 UTC | |
|
Re: Creating a hash within a fork
by edimusrex (Monk) on Jun 04, 2015 at 17:05 UTC | |
by BrowserUk (Patriarch) on Jun 04, 2015 at 19:43 UTC | |
by marioroy (Prior) on Jun 05, 2015 at 01:43 UTC | |
|
Re: Creating a hash within a fork
by marioroy (Prior) on Jun 05, 2015 at 03:00 UTC | |
|
Re: Creating a hash within a fork
by marioroy (Prior) on Jun 05, 2015 at 02:19 UTC | |
by marioroy (Prior) on Jun 05, 2015 at 02:43 UTC | |
by edimusrex (Monk) on Jun 05, 2015 at 21:02 UTC | |
|
Re: Creating a hash within a fork
by jeffa (Bishop) on Jun 04, 2015 at 17:43 UTC | |
by edimusrex (Monk) on Jun 04, 2015 at 20:07 UTC |