Bug 13889: Add information about cron jobs to system log
authorMarc Véron <veron@veron.ch>
Sun, 22 Mar 2015 12:55:00 +0000 (13:55 +0100)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Mon, 4 May 2015 14:11:14 +0000 (11:11 -0300)
This patch adds information about cron jobs performed and make it viewable
under Home > Tools > Logs ("Browse system logs")

To test:

Apply patch
- Got to system preferences and set 'CronjobLog' to:  [Log] information from
  cron jobs.
- Run some cron jobs
- Go to Home > Tools > Logs
- Verify that you have a selection 'Cron jobs' in drop-down 'Module'. Select it
  with Action "All" and Submit.
- Output should show Date/time and info about Cron jobs

Rebased to work on top of Bug 6911 (conflict in viewlog.tt)  /MV

Rebased after applying patch for Bug 6911 /MV
Conflicts resolved:
misc/cronjobs/overdue_notices.pl
misc/cronjobs/cleanup_database.pl

Signed-off-by: Frederic Demians <f.demians@tamil.fr>
  - Merge both patches, and fix updatedatabase.pl
  - Works as described. Provide intersting feedback from cronjob scripts.

--
Modified version taking in account syspref CronJobLog. Handling simplified by introducing a convenience sub cronlogaction in C4/Log.pm /MV
Amended to take in account comments #11, #12, #13 /MV

http://bugs.koha-community.org/show_bug.cgi?id=13899

Signed-off-by: Mark Tompsett <mtompset@hotmail.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
30 files changed:
C4/Log.pm
installer/data/mysql/atomicupdate/bug_13889_add_cronjoblog_syspref.sql [new file with mode: 0644]
installer/data/mysql/sysprefs.sql
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref
koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt
misc/cronjobs/advance_notices.pl
misc/cronjobs/automatic_renewals.pl
misc/cronjobs/batch_anonymise.pl
misc/cronjobs/build_browser_and_cloud.pl
misc/cronjobs/cart_to_shelf.pl
misc/cronjobs/cleanup_database.pl
misc/cronjobs/cloud-kw.pl
misc/cronjobs/delete_expired_opac_registrations.pl
misc/cronjobs/delete_patrons.pl
misc/cronjobs/delete_unverified_opac_registrations.pl
misc/cronjobs/fines.pl
misc/cronjobs/gather_print_notices.pl
misc/cronjobs/holds/auto_unsuspend_holds.pl
misc/cronjobs/holds/build_holds_queue.pl
misc/cronjobs/holds/cancel_expired_holds.pl
misc/cronjobs/j2a.pl
misc/cronjobs/longoverdue.pl
misc/cronjobs/overdue_notices.pl
misc/cronjobs/process_message_queue.pl
misc/cronjobs/purge_suggestions.pl
misc/cronjobs/runreport.pl
misc/cronjobs/serialsUpdate.pl
misc/cronjobs/share_usage_with_koha_community.pl
misc/cronjobs/staticfines.pl
misc/cronjobs/update_totalissues.pl

index 160dbe9..b6f5163 100644 (file)
--- a/C4/Log.pm
+++ b/C4/Log.pm
@@ -30,11 +30,11 @@ use C4::Dates qw(format_date);
 use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
-       # set the version for version checking
+    # set the version for version checking
     $VERSION = 3.07.00.049;
-       require Exporter;
-       @ISA = qw(Exporter);
-       @EXPORT = qw(&logaction &GetLogStatus &displaylog &GetLogs);
+        require Exporter;
+        @ISA = qw(Exporter);
+        @EXPORT = qw(&logaction &cronlogaction &GetLogStatus &displaylog &GetLogs);
 }
 
 =head1 NAME
@@ -81,6 +81,20 @@ sub logaction {
     $sth->finish;
 }
 
+=item cronlogaction
+
+  &cronlogaction();
+
+Convenience routine to add a record into action_logs table from a cron job.
+
+=cut
+
+#'
+sub cronlogaction {
+    logaction( 'CRONJOBS', 'Run', 0, (caller(0))[1] ) if C4::Context->preference('CronjobLog');
+}
+
+
 =item GetLogStatus
 
   $status = GetLogStatus;
diff --git a/installer/data/mysql/atomicupdate/bug_13889_add_cronjoblog_syspref.sql b/installer/data/mysql/atomicupdate/bug_13889_add_cronjoblog_syspref.sql
new file mode 100644 (file)
index 0000000..524fbac
--- /dev/null
@@ -0,0 +1 @@
+INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo');
index d4c6409..f371193 100644 (file)
@@ -92,6 +92,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
 ('CoceProviders', NULL, 'aws,gb,ol', 'Coce providers', 'multiple'),
 ('COinSinOPACResults','1','','If ON, use COinS in OPAC search results page.  NOTE: this can slow down search response time significantly','YesNo'),
 ('ConfirmFutureHolds','0','','Number of days for confirming future holds','Integer'),
+('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo'),
 ('CurrencyFormat','US','US|FR','Determines the display format of currencies. eg: \'36000\' is displayed as \'360 000,00\'  in \'FR\' or \'360,000.00\'  in \'US\'.','Choice'),
 ('dateformat','us','metric|us|iso','Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd)','Choice'),
 ('DebugLevel','2','0|1|2','Define the level of debugging information sent to the browser when errors are encountered (set to 0 in production). 0=none, 1=some, 2=most','Choice'),
index b6f22d0..73f76c2 100644 (file)
@@ -47,3 +47,9 @@ Logging:
               on: Log
               off: "Don't log"
         - when serials are added, deleted or changed.
+    -
+        - pref: CronjobLog
+          choices:
+              on: Log
+              off: "Don't log"
+        - information from cron jobs.
index 6215ccd..41414a2 100644 (file)
@@ -26,6 +26,7 @@
 [%        CASE 'LETTER'       %]Letter
 [%        CASE 'FINES'        %]Fines
 [%        CASE 'SYSTEMPREFERENCE' %]System prefs
+[%        CASE 'CRONJOBS' %]Cron jobs
 [%        CASE %][% module %]
 [%    END %]
 [% END %]
@@ -76,7 +77,7 @@
                                     [% ELSE %]
                                         <option value="">All</option>
                                     [% END %]
-                                    [% FOREACH modx IN [ 'CATALOGUING' 'AUTHORITIES' 'MEMBERS' 'ACQUISITIONS' 'SERIAL' 'CIRCULATION' 'LETTER' 'FINES' 'SYSTEMPREFERENCE' ] %]
+                                    [% FOREACH modx IN [ 'CATALOGUING' 'AUTHORITIES' 'MEMBERS' 'ACQUISITIONS' 'SERIAL' 'CIRCULATION' 'LETTER' 'FINES' 'SYSTEMPREFERENCE' 'CRONJOBS' ] %]
                                         [% IF modules.grep(modx).size %]
                                             <option value="[% modx %]" selected="selected">[% PROCESS translate_log_module module=modx %]</option>
                                         [% ELSE %]
index 028af5c..16800f0 100755 (executable)
@@ -56,6 +56,7 @@ use C4::Members;
 use C4::Members::Messaging;
 use C4::Overdues;
 use Koha::DateUtils;
+use C4::Log;
 
 =head1 NAME
 
@@ -199,6 +200,9 @@ END_WARN
 unless ($confirm) {
      pod2usage(1);
 }
+
+cronlogaction();
+
 # The fields that will be substituted into <<items.content>>
 my @item_content_fields = split(/,/,$itemscontent);
 
index f96e00c..73aad5f 100755 (executable)
@@ -44,6 +44,9 @@ use Modern::Perl;
 
 use C4::Circulation;
 use C4::Context;
+use C4::Log;
+
+cronlogaction();
 
 my $dbh = C4::Context->dbh;
 my ( $borrowernumber, $itemnumber, $branch, $ok, $error );
index b2678ca..3ce77d4 100755 (executable)
@@ -37,6 +37,7 @@ use Date::Calc qw(
   Add_Delta_Days
 );
 use Getopt::Long;
+use C4::Log;
 
 sub usage {
     print STDERR <<USAGE;
@@ -66,6 +67,8 @@ if ( !$days  ) {
     usage(1);
 }
 
+cronlogaction();
+
 my ($year,$month,$day) = Today();
 my ($newyear,$newmonth,$newday) = Add_Delta_Days ($year,$month,$day,(-1)*$days);
 my $formatdate = sprintf "%4d-%02d-%02d",$newyear,$newmonth,$newday;
index d3ead43..1c74744 100755 (executable)
@@ -18,6 +18,8 @@ use Time::HiRes qw(gettimeofday);
 use ZOOM;
 use MARC::File::USMARC;
 use Getopt::Long;
+use C4::Log;
+
 my ( $input_marc_file, $number) = ('',0);
 my ($version, $confirm,$test_parameter,$field,$batch,$max_digits,$cloud_tag);
 GetOptions(
@@ -60,6 +62,8 @@ my $browser_subfield = $2;
 warn "browser : $browser_tag / $browser_subfield" unless $batch;
 die "no cloud or browser field/subfield defined : nothing to do !" unless $browser_tag or $cloud_tag;
 
+cronlogaction();
+
 my $dbh = C4::Context->dbh;
 
 my $i=0;
index b7ea13a..965f7dd 100755 (executable)
@@ -29,6 +29,7 @@ use strict;
 use warnings;
 
 use C4::Items qw/ CartToShelf /;
+use C4::Log;
 
 BEGIN {
 
@@ -63,6 +64,8 @@ unless ($hours) {
     die "ERROR: No --hours (-h) option defined";
 }
 
+cronlogaction();
+
 my $query = "SELECT itemnumber FROM items WHERE location = 'CART' AND TIMESTAMPDIFF(HOUR, items.timestamp, NOW() ) > ?";
 my $sth = C4::Context->dbh->prepare($query);
 $sth->execute($hours);
index 5cfc366..cd92dc4 100755 (executable)
@@ -36,10 +36,9 @@ BEGIN {
 
 use C4::Context;
 use C4::Dates;
-
 use C4::Search;
-
 use Getopt::Long;
+use C4::Log;
 
 sub usage {
     print STDERR <<USAGE;
@@ -132,6 +131,8 @@ if ($pDebarments && $allDebarments) {
     usage(1);
 }
 
+cronlogaction();
+
 my $dbh = C4::Context->dbh();
 my $sth;
 my $sth2;
index 9e12e58..82ce25f 100755 (executable)
@@ -26,7 +26,7 @@ use YAML::Syck;
 use Pod::Usage;
 use Getopt::Long;
 use C4::Context;
-
+use C4::Log;
 
 my $verbose     = 0;
 my $help        = 0;
@@ -44,6 +44,7 @@ sub usage {
 
 usage() if $help || !$conf;          
 
+cronlogaction();
 
 my @clouds;
 print "Reading configuration file: $conf\n" if $verbose;
index 4d96d8a..44cc9da 100755 (executable)
@@ -30,6 +30,7 @@ BEGIN {
 
 use C4::Context;
 use C4::Members qw/ DelMember /;
+use C4::Log;
 
 my $help;
 my $confirm;
@@ -63,6 +64,8 @@ if ( $help || !$confirm ) {
     exit;
 }
 
+cronlogaction();
+
 # Delete accounts that haven't been upgraded from the 'temporary' category code
 my $delay =
   C4::Context->preference('PatronSelfRegistrationExpireTemporaryAccountsDelay');
index a1463b1..6c1a489 100755 (executable)
@@ -8,6 +8,7 @@ use Getopt::Long;
 use C4::Members;
 use C4::VirtualShelves;
 use Koha::DateUtils;
+use C4::Log;
 
 my ( $help, $verbose, $not_borrowed_since, $expired_before, $category_code,
     $branchcode, $confirm );
@@ -36,6 +37,8 @@ unless ( $not_borrowed_since or $expired_before or $category_code or $branchcode
     exit;
 }
 
+cronlogaction();
+
 my $members = GetBorrowersToExpunge(
     {
         not_borrowered_since => $not_borrowed_since,
index c270731..1a7e700 100755 (executable)
@@ -30,6 +30,7 @@ BEGIN {
 
 use C4::Context;
 use C4::Members qw/ DelMember /;
+use C4::Log;
 
 my $help;
 my $confirm;
@@ -59,6 +60,8 @@ if ( $help || !$confirm ) {
     exit;
 }
 
+cronlogaction();
+
 my $dbh = C4::Context->dbh;
 
 $dbh->do( "
index 72cb5cc..75d3fbb 100755 (executable)
@@ -38,6 +38,7 @@ use File::Spec;
 
 use Koha::Calendar;
 use Koha::DateUtils;
+use C4::Log;
 
 my $help;
 my $verbose;
@@ -70,6 +71,8 @@ if ($help) {
     exit;
 }
 
+cronlogaction();
+
 my @borrower_fields =
   qw(cardnumber categorycode surname firstname email phone address citystate);
 my @item_fields  = qw(itemnumber barcode date_due);
index 46610d0..ad4c409 100755 (executable)
@@ -36,6 +36,7 @@ use C4::Letters;
 use C4::Templates;
 use File::Spec;
 use Getopt::Long;
+use C4::Log;
 
 sub usage {
     print STDERR <<USAGE;
@@ -65,6 +66,8 @@ if ( !$output_directory || !-d $output_directory || !-w $output_directory ) {
     usage(1);
 }
 
+cronlogaction();
+
 my $today        = C4::Dates->new();
 my @all_messages = @{ GetPrintMessages() };
 exit unless (@all_messages);
index 7116b4c..d17dfb5 100755 (executable)
@@ -30,5 +30,8 @@ BEGIN {
 # cancel all expired hold requests
 
 use C4::Reserves;
+use C4::Log;
+
+cronlogaction();
 
 AutoUnsuspendReserves();
index 9ec9825..be50de7 100755 (executable)
@@ -16,6 +16,9 @@ BEGIN {
 }
 
 use C4::HoldsQueue qw(CreateQueue);
+use C4::Log;
+
+cronlogaction();
 
 CreateQueue();
 
index da85d4b..f721553 100755 (executable)
@@ -30,5 +30,8 @@ BEGIN {
 # cancel all expired hold requests
 
 use C4::Reserves;
+use C4::Log;
+
+cronlogaction();
 
 CancelExpiredReserves();
index 32f18ac..4000b6a 100755 (executable)
@@ -32,6 +32,7 @@ use C4::Context;
 use C4::Members;
 use Getopt::Long;
 use Pod::Usage;
+use C4::Log;
 
 =head1 NAME
 
@@ -126,6 +127,8 @@ if(not $fromcat && $tocat) { #make sure we've specified the info we need.
                exit;
 }
 
+cronlogaction();
+
 my $dbh=C4::Context->dbh;
 my @branches = C4::Branch::GetBranches();
 #get today's date, format it and subtract upperagelimit
index b60ed23..8edbcf8 100755 (executable)
@@ -37,6 +37,7 @@ use C4::Context;
 use C4::Items;
 use C4::Circulation qw/LostItem/;
 use Getopt::Long;
+use C4::Log;
 
 my  $lost;  #  key=lost value,  value=num days.
 my ($charge, $verbose, $confirm, $quiet);
@@ -129,6 +130,8 @@ unless ($confirm) {
     print "### TEST MODE -- NO ACTIONS TAKEN ###\n";
 }
 
+cronlogaction();
+
 # In my opinion, this line is safe SQL to have outside the API. --atz
 our $bounds_sth = C4::Context->dbh->prepare("SELECT DATE_SUB(CURDATE(), INTERVAL ? DAY)");
 
index 6e30fa2..7068d3d 100755 (executable)
@@ -43,11 +43,10 @@ use C4::Debug;
 use C4::Letters;
 use C4::Overdues qw(GetFine GetOverdueMessageTransportTypes);
 use C4::Budgets qw(GetCurrency);
-use Koha::DateUtils;
-
 use Koha::Borrower::Debarments qw(AddUniqueDebarment);
 use Koha::DateUtils;
 use Koha::Calendar;
+use C4::Log;
 
 =head1 NAME
 
@@ -316,6 +315,8 @@ GetOptions(
 pod2usage(1) if $help;
 pod2usage( -verbose => 2 ) if $man;
 
+cronlogaction();
+
 if ( defined $csvfilename && $csvfilename =~ /^-/ ) {
     warn qq(using "$csvfilename" as filename, that seems odd);
 }
index 2523122..3325c8a 100755 (executable)
@@ -26,6 +26,7 @@ BEGIN {
     eval { require "$FindBin::Bin/../kohalib.pl" };
 }
 use C4::Letters;
+use C4::Log;
 use Getopt::Long;
 
 my $username = undef;
@@ -60,5 +61,7 @@ ENDUSAGE
 
 die $usage if $help;
 
+cronlogaction();
+
 C4::Letters::SendQueuedMessages( { verbose => $verbose, username => $username, password => $password, method => $method } );
 
index 55ea0e7..ee3da2e 100755 (executable)
@@ -32,6 +32,7 @@ BEGIN {
 use Getopt::Long;
 use Pod::Usage;
 use C4::Suggestions;
+use C4::Log;
 
 my ($help, $days);
 
@@ -55,6 +56,7 @@ EOF
 }
 
 if($days){
+    cronlogaction();
     DelSuggestionsOlderThan($days);
 }
 
index 1842f2b..5cc000d 100755 (executable)
@@ -24,6 +24,7 @@ use warnings;
 use C4::Reports::Guided; # 0.12
 use C4::Context;
 use Koha::Email;
+use C4::Log;
 
 use Getopt::Long qw(:config auto_help auto_version);
 use Pod::Usage;
@@ -189,6 +190,8 @@ pod2usage( -verbose => 2 ) if ($man);
 pod2usage( -verbose => 2 ) if ($help and $verbose);
 pod2usage(1) if $help;
 
+cronlogaction();
+
 unless ($format) {
     $verbose and print STDERR "No format specified, assuming 'text'\n";
     $format = 'text';
index ff26ce9..fedf064 100755 (executable)
@@ -32,6 +32,7 @@ use C4::Context;
 use C4::Dates qw/format_date format_date_in_iso/;
 use C4::Debug;
 use C4::Serials;
+use C4::Log;
 
 use Date::Calc qw/Date_to_Days check_date/;
 use Getopt::Long;
@@ -77,6 +78,8 @@ GetOptions(
 pod2usage(1) if $help;
 pod2usage( -verbose => 2 ) if $man;
 
+cronlogaction();
+
 $verbose and !$confirm and print "### Database will not be modified ###\n";
 
 if ( $note && $nonote ) {
index b26300b..c4353d8 100755 (executable)
@@ -7,6 +7,7 @@ use Getopt::Long;
 
 use C4::Context;
 use C4::UsageStats;
+use C4::Log;
 use POSIX qw(strftime);
 
 my ( $help, $verbose, $force );
@@ -30,6 +31,8 @@ If your library wants to share their usage statistics with the Koha community, y
     exit 1;
 }
 
+cronlogaction();
+
 my $need_update = ($force ? 1 : C4::UsageStats::NeedUpdate() );
 
 if ($need_update) {
index 1d45806..1309c8b 100755 (executable)
@@ -43,6 +43,7 @@ use C4::Overdues;
 use C4::Calendar qw();    # don't need any exports from Calendar
 use C4::Biblio;
 use C4::Debug;            # supplying $debug and $cgi_debug
+use C4::Log;
 use Getopt::Long;
 use List::MoreUtils qw/none/;
 use Koha::DateUtils;
@@ -90,6 +91,8 @@ This script has the following parameters :
 ENDUSAGE
 die $usage if $help;
 
+cronlogaction();
+
 my $dbh = C4::Context->dbh;
 
 # Processing categories
index 764faf4..affa2a7 100755 (executable)
@@ -32,6 +32,7 @@ use Getopt::Long;
 use Pod::Usage;
 use C4::Context;
 use C4::Biblio;
+use C4::Log;
 use DateTime;
 use DateTime::Format::MySQL;
 use Time::HiRes qw/time/;
@@ -94,6 +95,8 @@ if ( not $result or $want_help ) {
     usage();
 }
 
+cronlogaction();
+
 my $dbh = C4::Context->dbh;
 $dbh->{AutoCommit} = 0;