Bug 11926: Render community koha statistic usages
[koha.git] / C4 / UsageStats.pm
1 package UsageStats;
2
3 # Copyright 2000-2003 Katipo Communications
4 # Copyright 2010 BibLibre
5 # Parts Copyright 2010 Catalyst IT
6 #
7 # This file is part of Koha.
8 #
9 # Koha is free software; you can redistribute it and/or modify it under the
10 # terms of the GNU General Public License as published by the Free Software
11 # Foundation; either version 2 of the License, or (at your option) any later
12 # version.
13 #
14 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License along
19 # with Koha; if not, write to the Free Software Foundation, Inc.,
20 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21
22 use strict;
23 use C4::Context;
24 use POSIX qw(strftime);
25 use LWP::UserAgent;
26 use JSON;
27
28 sub NeedUpdate {
29     my $lastupdated = C4::Context->preference('UsageStatsLastUpdateTime') || 0;
30     my $now = strftime("%s", localtime);
31
32     # Need to launch cron.
33     return 1 if $now - $lastupdated >= 2592000;
34
35     # Cron no need to be launched.
36     return 0;
37 }
38
39 sub LaunchCron {
40     if (!C4::Context->preference('UsageStatsShare')) {
41       die ("UsageStats is not configured");
42     }
43     if (NeedUpdate) {
44         C4::Context->set_preference('UsageStatsLastUpdateTime', strftime("%s", localtime));
45         my $data = BuildReport();
46         ReportToComunity($data);
47     }
48 }
49
50 sub BuildReport {
51     my $report = {
52         'library' => {
53             'name' => C4::Context->preference('UsageStatsLibraryName'),
54             'id' => C4::Context->preference('UsageStatsID') || 0,
55         },
56     };
57
58     # Get database volumetry.
59     foreach (qw/biblio auth_header old_issues old_reserves borrowers aqorders subscription/) {
60         $report->{volumetry}{$_} = _count($_);
61     }
62
63     # Get systempreferences.
64     foreach (qw/IntranetBiblioDefaultView marcflavour/) {
65         $report->{systempreferences}{$_} = C4::Context->preference($_);
66     }
67     return $report;
68 }
69
70 sub ReportToComunity {
71     my $data = shift;
72     my $json = to_json($data);
73
74     my $url = C4::Context->config('mebaseurl');
75
76     my $ua = LWP::UserAgent->new;
77     my $req = HTTP::Request->new(POST => "$url/upload.pl");
78     $req->content_type('application/x-www-form-urlencoded');
79     $req->content("data=$json");
80     my $res = $ua->request($req);
81     my $content = from_json($res->decoded_content);
82     C4::Context->set_preference('UsageStatsID', $content->{library}{library_id});
83 }
84
85 sub _count {
86     my $table = shift;
87
88     my $dbh = C4::Context->dbh;
89     my $sth = $dbh->prepare("SELECT count(*) from $table");
90     $sth->execute;
91     return $sth->fetchrow_array;
92 }
93
94 &LaunchCron;
95 1;