@@ -, +, @@ - Running - Not running - Apply this patches - Run: $ kshell k$ prove t/Koha/SearchEngine/Elasticsearch.t - Have ES configured in your koha-conf.xml file (by default in kohadevbox) - Set the 'SearchEngine' syspref to 'Elasticsearch' - Comment out pieces of the elasticsearch-specific entries (server, index_name, the whole elasticsearch block). Reload on each change. ----> the rest of the tests require having ES running on the dev env. This can be easily achieved by creating the kohadevbox using: $ KOHA_ELASTICSEARCH=1 vagrant up - Stop the 'elasticsearch' service: $ sudo service elasticsearch stop - Reload about.pl - Start the 'elasticsearch' service: $ sudo service elasticsearch start - Reload about.pl created indices info is displayed, along with the document count on each index. - Sign off :-D --- about.pl | 66 ++++++++++++++++++++++++ koha-tmpl/intranet-tmpl/prog/en/modules/about.tt | 26 ++++++++++ 2 files changed, 92 insertions(+) --- a/about.pl +++ a/about.pl @@ -27,6 +27,8 @@ use List::MoreUtils qw/ any /; use LWP::Simple; use XML::Simple; use Config; +use Search::Elasticsearch; +use Try::Tiny; use C4::Output; use C4::Auth; @@ -38,8 +40,11 @@ use Koha::Acquisition::Currencies; use Koha::Patrons; use Koha::Caches; use Koha::Config::SysPrefs; +use Koha::SearchEngine::Elasticsearch; + use C4::Members::Statistics; + #use Smart::Comments '####'; my $query = new CGI; @@ -260,6 +265,67 @@ if ( !defined C4::Context->config('use_zebra_facets') ) { } } +if ( C4::Context->preference('SearchEngine') eq 'Elasticsearch' ) { + # Check ES configuration health and runtime status + + my $es_status; + my $es_config_error; + my $es_running = 1; + + my $es_conf; + try { + $es_conf = Koha::SearchEngine::Elasticsearch::_read_configuration(); + } + catch { + if ( ref($_) eq 'Koha::Exceptions::Config::MissingEntry' ) { + $template->param( elasticsearch_fatal_config_error => $_->message ); + $es_config_error = 1; + } + warn p($_); + }; + if ( !$es_config_error ) { + + my $biblios_index_name = $es_conf->{index_name} . "_" . $Koha::SearchEngine::BIBLIOS_INDEX; + my $authorities_index_name = $es_conf->{index_name} . "_" . $Koha::SearchEngine::AUTHORITIES_INDEX; + + my @indexes = ($biblios_index_name, $authorities_index_name); + # TODO: When new indexes get added, we could have other ways to + # fetch the list of available indexes (e.g. plugins, etc) + $es_status->{nodes} = $es_conf->{nodes}; + my $es = Search::Elasticsearch->new({ nodes => $es_conf->{nodes} }); + + foreach my $index ( @indexes ) { + my $count; + try { + $count = $es->indices->stats( index => $index ) + ->{_all}{primaries}{docs}{count}; + } + catch { + if ( ref($_) eq 'Search::Elasticsearch::Error::Missing' ) { + push @{ $es_status->{errors} }, "Index not found ($index)"; + $count = -1; + } + elsif ( ref($_) eq 'Search::Elasticsearch::Error::NoNodes' ) { + $es_running = 0; + } + else { + # TODO: when time comes, we will cover more use cases + die $_; + } + }; + + push @{ $es_status->{indexes} }, + { + index_name => $index, + count => $count + }; + } + $es_status->{running} = $es_running; + + $template->param( elasticsearch_status => $es_status ); + } +} + # Sco Patron should not contain any other perms than circulate => self_checkout if ( C4::Context->preference('WebBasedSelfCheck') and C4::Context->preference('AutoSelfCheckAllowed') --- a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt @@ -1,4 +1,5 @@ [% USE HtmlTags %] +[% USE Koha %] [% SET footerjs = 1 %] [% INCLUDE 'doc-head-open.inc' %] Koha › About Koha @@ -45,6 +46,31 @@ [% IF (is_psgi) %] PSGI: [% psgi_server |html %] [% END %] + [% IF Koha.Preference('SearchEngine') == 'Elasticsearch' %] + + Elasticsearch: + [% IF elasticsearch_fatal_config_error %] + [% elasticsearch_fatal_config_error %] + [% ELSE %] + + Nodes: + [% elasticsearch_status.nodes.join(' / ') %] + | + Status: + [% IF elasticsearch_status.running %] + running + | + Indices: + [% FOREACH index IN elasticsearch_status.indexes %] + [% index.index_name %] (count: [% index.count %]) + [% END %] + [% ELSE %] + not running + [% END %] + + [% END %] + + [% END %] Memcached: Servers: [% IF memcached_servers %][% memcached_servers | html %] --