Bug 11081: Port Koha::Contrib::Tamil indexer into Koha code base
[koha.git] / Koha / Indexer / Daemon.pm
1 package Koha::Indexer::Daemon;
2
3 use Moose;
4
5 use Modern::Perl;
6 use utf8;
7 use AnyEvent;
8 use Koha::Indexer::Indexing;
9 use C4::Context;
10
11 with 'MooseX::Getopt';
12
13
14 has name => ( is => 'rw', isa => 'Str' );
15
16 has directory => ( is => 'rw', isa => 'Str' );
17
18 has timeout => (
19     is      => 'rw',
20     isa     => 'Int',
21     default => 60,
22 );
23
24 has verbose => ( is => 'rw', isa => 'Bool', default => 0 );
25
26
27 sub BUILD {
28     my $self = shift;
29
30     say "Starting Koha Indexer Daemon";
31
32     $self->name( C4::Context->config('database') );
33
34     my $idle = AnyEvent->timer(
35         after    => $self->timeout,
36         interval => $self->timeout,
37         cb       => sub { $self->index_zebraqueue(); }
38     );
39     AnyEvent->condvar->recv;
40 }
41
42
43 sub index_zebraqueue {
44     my $self = shift;
45
46     my $dbh = C4::Context->dbh();
47     my $sql = " SELECT COUNT(*), server
48                 FROM zebraqueue
49                 WHERE done = 0
50                 GROUP BY server ";
51     my $sth = $dbh->prepare($sql);
52     $sth->execute();
53     my %count = ( biblio => 0, authority => 0 );
54     while ( my ($count, $server) = $sth->fetchrow ) {
55         $server =~ s/server//g;
56         $count{$server} = $count;
57     }
58
59     say "[", $self->name, "] Index biblio (", $count{biblio}, ") authority (",
60         $count{authority}, ")";
61
62     for my $source (qw/biblio authority/) {
63         next unless $count{$source};
64         my $indexer = Koha::Indexer::Indexing->new(
65             source      => $source,
66             select      => 'queue',
67             blocking    => 1,
68             keep        => 1,
69             verbose     => $self->verbose,
70         );
71         $indexer->directory($self->directory) if $self->directory;
72         $indexer->run();
73     }
74 }
75
76 no Moose;
77 __PACKAGE__->meta->make_immutable;
78 1;
79
80 __END__
81 =pod
82
83 =head1 SYNOPSIS
84
85  # Index Koha queued biblio/authority records every minute.
86  # KOHA_CONF environment variable is used to find which Koha
87  # instance to use.
88  # Records are exported from Koha DB into files located in
89  # the current directory
90  my $daemon = Koha::Indexer::Daemon->new();
91
92  my $daemon = Koha::Indexer::Daemon->new(
93     timeout   => 20,
94     directory => '/home/koha/mylib/tmp',
95     verbose   => 1 );
96
97 =head1 Attributes
98
99 =over
100
101 =item directory($directory_name)
102
103 Location of the directory where to export biblio/authority records before
104 sending them to Zebra indexer.
105
106 =item timeout($seconds)
107
108 Number of seconds between indexing.
109
110 =item verbose(0|1)
111
112 Task verbosity.
113
114 =back
115
116 =cut