24213703d5
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
68 lines
1.9 KiB
Perl
Executable file
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 );
|
|
}
|