]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/support-scripts/fine_generator.pl
LP1818288 WS Option to pre-fetch record holds
[working/Evergreen.git] / Open-ILS / src / support-scripts / fine_generator.pl
1 #!/usr/bin/perl
2 # ---------------------------------------------------------------------
3 # Fine generator
4 # ./fine_generator.pl <bootstrap_config> <lockfile>
5 # ---------------------------------------------------------------------
6
7 use strict; 
8 use warnings;
9 use OpenSRF::Utils::JSON;
10 use OpenSRF::System;
11 use OpenSRF::Utils::SettingsClient;
12 use OpenSRF::MultiSession;
13
14 my $config = shift || die "bootstrap config required\n";
15 my $lockfile = shift || "/tmp/generate_fines-LOCK";
16 my $grace = shift;
17
18 if (defined($grace)) {
19     die "Grace period is now defined in the database. It should not be passed to the fine generator.";
20 }
21  
22 if (-e $lockfile) {
23         open(F,$lockfile);
24         my $pid = <F>;
25         close F;
26
27         open(F,'/bin/ps axo pid|');
28         while ( my $p = <F>) {
29                 chomp($p);
30                 if ($p =~ s/\s*(\d+)$/$1/o && $p == $pid) {
31                         die "I seem to be running already at pid $pid.  If not, try again\n";
32                 }
33         }
34         close F;
35 }
36
37 open(F, ">$lockfile");
38 print F $$;
39 close F;
40
41 OpenSRF::System->bootstrap_client( config_file => $config );
42 my $settings = OpenSRF::Utils::SettingsClient->new;
43 my $parallel = $settings->config_value( fine_generator => 'parallel' ) || 1; 
44
45 if ($parallel == 1) {
46
47     my $r = OpenSRF::AppSession
48             ->create( 'open-ils.storage' )
49             ->request( 'open-ils.storage.action.circulation.overdue.generate_fines' );
50
51     while (!$r->complete) { $r->recv };
52
53 } else {
54
55     my $multi_generator = OpenSRF::MultiSession->new(
56         app => 'open-ils.storage', 
57         cap => $parallel, 
58         api_level => 1,
59     );
60
61     my $storage = OpenSRF::AppSession->create("open-ils.storage");
62     my $r = $storage->request('open-ils.storage.action.circulation.overdue.id_list');
63     while (my $resp = $r->recv(timeout => 600)) {
64         my $circ_id = $resp->content;
65         $multi_generator->request( 'open-ils.storage.action.circulation.overdue.generate_fines', $circ_id );
66     }
67     $storage->disconnect();
68     $multi_generator->session_wait(1);
69     $multi_generator->disconnect;
70
71 }
72
73 unlink $lockfile;