Koha/opac/svc/report
Chris Hall 24213703d5 Bug 7249 : Allow reports to be called through a restful interface
Hands back JSON, and supports caching

Squashed commit of the following:

commit 5c93506079738b9a13139417d3a0734289a4b007
Author: Chris Hall <chrish@catalyst.net.nz>
Date:   Mon Nov 21 15:41:14 2011 +1300

    Fixed bugs when creating reports, added more user friendly input and
    feedback

commit c62430bb358ee4af6ee5331b4d3a2ed67f723032
Author: Chris Hall <chrish@catalyst.net.nz>
Date:   Mon Nov 21 12:00:27 2011 +1300

    Added caching to intranet report webservices, added cache expiry and public
    options to reports

commit 2d89f0777d95b26bf08635782070b6367d0698f3
Author: Chris Cormack <chris@bigballofwax.co.nz>
Date:   Wed Nov 9 20:29:26 2011 +1300

    Working on caching for services

commit e0511f180cebd81747858ad776433fe3a1cf6854
Author: Chris Cormack <chris@bigballofwax.co.nz>
Date:   Wed Nov 9 08:28:26 2011 +1300

    Starting work on webservices

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Patch includes database update adding 2 new fields to the saved_sql table.

1) Checked that adding/deleting/editing of sql reports still works and new
fields are correctly saved to the database.

2) The saved reports page now lists the new fields correctly.

3) Checking URLs with JSON output
- if report is not public http://localhost/cgi-bin/koha/svc/report?id=2 fails,
but http://localhost:8080/cgi-bin/koha/svc/report?id=2 works
- if report is public, both links work

4) Checking results are cached
Created a report listing my borrowers, setting caching to 60 seconds and
added new borrowers before doing following tests.
- URL doesn't show new borrower immediately - correct
- Turning off the usecache system preference updates data - correct
- Restarting memcached updates data '/etc/init.d/memcached restart' - correct
- Waiting until cache time runs out updates data - correct

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Retested the feature and renewing my sign-off.

There are some things that should be noted:
- currently there is a hardcoded limit of 10 results for the reports webservice
- reports with runtime parameters are currently not supported
2012-05-11 10:26:29 +02:00

68 lines
1.9 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2011 Chris Cormack <chris@bigballofwax.co.nz>
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
#
use strict;
use warnings;
use C4::Reports::Guided;
use JSON;
use CGI;
my $query = CGI->new();
my $report = $query->param('id');
my $cache;
my $usecache = C4::Context->ismemcached;
my ( $sql, $type, $name, $notes, $cache_expiry, $public ) =
get_saved_report($report);
die "Sorry this report is not public\n" unless $public;
if ($usecache) {
require Koha::Cache;
Koha::Cache->import();
$cache = Koha::Cache->new(
{
'cache_type' => 'memcached',
'cache_servers' => $ENV{'MEMCACHED_SERVERS'}
}
);
my $namespace = $ENV{'MEMCACHED_NAMESPACE'} || 'koha';
my $page = $cache->get_from_cache("$namespace:opac:report:$report");
if ($page) {
print $query->header;
print $page;
exit;
}
}
print $query->header;
my $offset = 0;
my $limit = 10;
my ( $sth, $errors ) = execute_query( $sql, $offset, $limit );
my $lines = $sth->fetchall_arrayref;
my $json_text = to_json($lines);
print $json_text;
if ($usecache) {
my $namespace = $ENV{'MEMCACHED_NAMESPACE'} || 'koha';
$cache->set_in_cache( "$namespace:opac:report:$report",
$json_text, $cache_expiry );
}