|
|
| version 1.23, 2018/01/26 13:05:27 | version 1.24, 2018/02/06 14:31:06 |
|---|---|
| Line 2 | Line 2 |
| ############################################################################### | ############################################################################### |
| # $Log$ | # $Log$ |
| # Revision 1.24 2018/02/06 14:31:06 nick | |
| # A status report is now generated in JSON that can easily be scanned so that | |
| # I can be alerted when there are failures that I miss if I don't read the | |
| # comics that day. | |
| # | |
| # Revision 1.23 2018/01/26 13:05:27 nick | # Revision 1.23 2018/01/26 13:05:27 nick |
| # Added a new config option to remove all newline from the resulting index.html | # Added a new config option to remove all newline from the resulting index.html |
| # file. This allows for easier parsing for certain comics. I then updated | # file. This allows for easier parsing for certain comics. I then updated |
| Line 42 use File::Path; | Line 47 use File::Path; |
| use Data::Dumper; | use Data::Dumper; |
| use Pod::Usage; | use Pod::Usage; |
| use Getopt::Long; | use Getopt::Long; |
| use JSON::Create 'create_json'; | |
| use Date::Calc qw/Date_to_Text_Long Today Day_of_Week Day_of_Week_to_Text/; | use Date::Calc qw/Date_to_Text_Long Today Day_of_Week Day_of_Week_to_Text/; |
| ## | ## |
| Line 51 use Date::Calc qw/Date_to_Text_Long Toda | Line 56 use Date::Calc qw/Date_to_Text_Long Toda |
| my $ver = '$Id$'; | my $ver = '$Id$'; |
| my $comicFile = "comics.conf"; | my $comicFile = "comics.conf"; |
| my $comicConfigVer = "Unknown"; | my $comicConfigVer = "Unknown"; |
| my $reportFile = "/home/httpd/html/daily/comics/status_report.json"; | |
| my %comics = &readComicConfig ( $comicFile ); | my %comics = &readComicConfig ( $comicFile ); |
| my %opts = &fetchOptions( ); | my %opts = &fetchOptions( ); |
| my $days_ago = $opts{'days'} || 0; | my $days_ago = $opts{'days'} || 0; |
| Line 113 foreach my $comic ( sort keys %comics ) | Line 119 foreach my $comic ( sort keys %comics ) |
| &writeFooter( \%dates ); | &writeFooter( \%dates ); |
| print STDOUT "Status written to $reportFile.\n" | |
| if (&writeStatusReportJSON(\%comics, $reportFile)); | |
| $DATE=`date`; chomp( $DATE ); | $DATE=`date`; chomp( $DATE ); |
| print STDOUT "Completed comic fetch at $DATE\n"; | print STDOUT "Completed comic fetch at $DATE\n"; |
| Line 159 sub readComicConfig ($$) { | Line 168 sub readComicConfig ($$) { |
| open FILEN, "<$comicFile"; | open FILEN, "<$comicFile"; |
| while (<FILEN>) { | while (<FILEN>) { |
| #if ($_ =~ m/^#.* \$Id$/) { | #if ($_ =~ m/^#.* \$[Ii][Dd]: fetch.pl.new,v 1.23 2018/01/26 13:05:27 nick Exp $/) { |
| if ($_ =~ m/^#.* \$Id$$/) { | if ($_ =~ m/^#.* \$[Ii][dD]: .*,v\ (.*)\ \d{4}\/.*\$$/) { |
| $comicConfigVer = $1; | $comicConfigVer = $1; |
| } | } |
| if ( ( $_ !~ m/^#/ ) && ( $_ =~ m/,.*,/) ){ | if ( ( $_ !~ m/^#/ ) && ( $_ =~ m/,.*,/) ){ |
| Line 189 sub readComicConfig ($$) { | Line 198 sub readComicConfig ($$) { |
| } | } |
| ####################################################################### | ####################################################################### |
| ####################################################################### | |
| sub writeStatusReportJSON ($$) { | |
| my ( $comicsRef, $filename ) = @_; | |
| my %comics = %$comicsRef; | |
| my %json = ('date' => $DATE, 'comics' => []); | |
| my $totalErrors = 0; | |
| foreach my $comic (sort keys %comics) { | |
| next unless $comics{$comic}{'fullName'}; | |
| if ($comics{$comic}{'error'}) { | |
| my %error = ('comicName' => "$comics{$comic}{'fullName'}", | |
| 'error' => "$comics{$comic}{'error'}", | |
| 'status' => "Error"); | |
| push $json{'comics'}, \%error; | |
| $totalErrors += 1; | |
| } else { | |
| my %status = ('comicName' => "$comics{$comic}{'fullName'}", | |
| 'error' => 0, | |
| 'status' => "Successfull"); | |
| push $json{'comics'}, \%status; | |
| } | |
| } | |
| $json{'totalErrors'} = $totalErrors; | |
| open SR, ">$filename" or die ("ERROR: Failed to create status report: $!\n"); | |
| print SR create_json (\%json); | |
| close(SR); | |
| } | |
| ####################################################################### | |
| ####################################################################### | ####################################################################### |
| sub writeComic ($$) { | sub writeComic ($$) { |
| my ( $comics, $comic, $date ) = @_; | my ( $comics, $comic, $date ) = @_; |