Teach the autosuggest web service to cache suggestions where appropriate cache_autosuggest
authorMike Rylander <mrylander@gmail.com>
Tue, 26 Jun 2012 19:03:37 +0000 (15:03 -0400)
committerMike Rylander <mrylander@gmail.com>
Tue, 26 Jun 2012 19:03:37 +0000 (15:03 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/WWW/AutoSuggest.pm

index 7ed9bf7..ee577f5 100644 (file)
@@ -13,6 +13,28 @@ use CGI qw(:all -utf8);
 
 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 $cache;
+my $cache_timeout;
+my $parser = XML::LibXML->new();
+my $xslt = XML::LibXSLT->new();
+
+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');
+}
 
 # BEGIN package globals
 
@@ -91,7 +113,23 @@ sub get_suggestions {
         defined $short_word_length ? int($short_word_length) : undef
     );
 
-    return $editor->json_query({
+    $key = 'oils_AS_' . md5_hex(
+        $query .
+        $search_class .
+        $org_unit .
+        $css_prefix .
+        $highlight_min .
+        $highlight_max .
+        $normalization .
+        $limit .
+        $short_word_length
+    );
+
+    $res = $cache->get_cache( $key );
+
+    return $res if ($res);
+
+    $res = $editor->json_query({
         "from" => [
             "metabib.suggest_browse_entries",
             $query,
@@ -102,6 +140,10 @@ sub get_suggestions {
             $normalization
         ]
     });
+
+    $cache->put_cache( $key => $res => $cache_timeout );
+
+    return $res;
 }
 
 sub suggestions_to_xml {