From 4c8a1b71ebd961ebe2a5dffcb1690ea6fb6b281b Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Tue, 26 Jun 2012 15:03:37 -0400 Subject: [PATCH] Teach the autosuggest web service to cache suggestions where appropriate Should spare some DB load on sites. LFW: I'm not sure the update to the Apache config made any difference, but it doesn't hurt. Signed-off-by: Mike Rylander Signed-off-by: Lebbeous Fogle-Weekley Signed-off-by: Bill Erickson --- Open-ILS/examples/apache/eg.conf | 1 + .../perlmods/lib/OpenILS/WWW/AutoSuggest.pm | 47 ++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/Open-ILS/examples/apache/eg.conf b/Open-ILS/examples/apache/eg.conf index e2b0584895..280cea6f7e 100644 --- a/Open-ILS/examples/apache/eg.conf +++ b/Open-ILS/examples/apache/eg.conf @@ -19,6 +19,7 @@ PerlChildInitHandler OpenILS::WWW::Reporter::child_init PerlChildInitHandler OpenILS::WWW::SuperCat::child_init PerlChildInitHandler OpenILS::WWW::AddedContent::child_init PerlChildInitHandler OpenILS::WWW::PasswordReset::child_init +PerlChildInitHandler OpenILS::WWW::AutoSuggest::child_init # ---------------------------------------------------------------------------------- # Set some defaults for our working directories diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/AutoSuggest.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/AutoSuggest.pm index 7ed9bf7c65..c0a92463a5 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/AutoSuggest.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/AutoSuggest.pm @@ -10,9 +10,32 @@ use Apache2::Const -compile => qw( use XML::LibXML; use Text::Glob; use CGI qw(:all -utf8); +use Digest::MD5 qw(md5_hex); use OpenSRF::Utils::JSON; use OpenILS::Utils::CStoreEditor qw/:funcs/; +use OpenSRF::Utils::Logger qw/:level/; +use OpenSRF::Utils::SettingsClient; +use OpenSRF::Utils::Cache; + +my $log = 'OpenSRF::Utils::Logger'; + +my $init_done = 0; +my $cache; +my $cache_timeout; + +sub initialize { + + my $conf = OpenSRF::Utils::SettingsClient->new; + + $cache_timeout = $conf->config_value( + "apps", "open-ils.search", "app_settings", "cache_timeout" ) || 300; + +} +sub child_init { + $cache = OpenSRF::Utils::Cache->new('global'); + $init_done = 1; +} # BEGIN package globals @@ -91,7 +114,23 @@ sub get_suggestions { defined $short_word_length ? int($short_word_length) : undef ); - return $editor->json_query({ + my $key = 'oils_AS_' . md5_hex( + $query . + $search_class . + $org_unit . + $css_prefix . + $highlight_min . + $highlight_max . + $normalization . + $limit . + $short_word_length + ); + + my $res = $cache->get_cache( $key ); + + return $res if ($res); + + $res = $editor->json_query({ "from" => [ "metabib.suggest_browse_entries", $query, @@ -102,6 +141,10 @@ sub get_suggestions { $normalization ] }); + + $cache->put_cache( $key => $res => $cache_timeout ); + + return $res; } sub suggestions_to_xml { @@ -160,6 +203,8 @@ sub output_handler { } sub handler { + child_init() unless $init_done; + my $r = shift; my $cgi = new CGI; -- 2.43.2