|
Lines 179-184
if ( $tab eq 'about' ) {
Link Here
|
| 179 |
} |
179 |
} |
| 180 |
|
180 |
|
| 181 |
message_broker_check($template); |
181 |
message_broker_check($template); |
|
|
182 |
elasticsearch_check($template); |
| 182 |
|
183 |
|
| 183 |
$template->param( |
184 |
$template->param( |
| 184 |
effective_caching_method => $effective_caching_method, |
185 |
effective_caching_method => $effective_caching_method, |
|
Lines 400-482
if($tab eq 'sysinfo') {
Link Here
|
| 400 |
$template->param( warnXSLT => \@warnXSLT ) if @warnXSLT; |
401 |
$template->param( warnXSLT => \@warnXSLT ) if @warnXSLT; |
| 401 |
} |
402 |
} |
| 402 |
|
403 |
|
| 403 |
if ( C4::Context->preference('SearchEngine') eq 'Elasticsearch' ) { |
404 |
elasticsearch_check( $template ); |
| 404 |
# Check ES configuration health and runtime status |
|
|
| 405 |
|
| 406 |
my $es_status; |
| 407 |
my $es_config_error; |
| 408 |
my $es_running = 1; |
| 409 |
my $es_has_missing = 0; |
| 410 |
|
| 411 |
my $es_conf; |
| 412 |
try { |
| 413 |
$es_conf = Koha::SearchEngine::Elasticsearch::_read_configuration(); |
| 414 |
} |
| 415 |
catch { |
| 416 |
if ( ref($_) eq 'Koha::Exceptions::Config::MissingEntry' ) { |
| 417 |
$template->param( elasticsearch_fatal_config_error => $_->message ); |
| 418 |
$es_config_error = 1; |
| 419 |
} |
| 420 |
}; |
| 421 |
if ( !$es_config_error ) { |
| 422 |
|
| 423 |
my $biblios_index_name = $es_conf->{index_name} . "_" . $Koha::SearchEngine::BIBLIOS_INDEX; |
| 424 |
my $authorities_index_name = $es_conf->{index_name} . "_" . $Koha::SearchEngine::AUTHORITIES_INDEX; |
| 425 |
|
| 426 |
my @indexes = ($biblios_index_name, $authorities_index_name); |
| 427 |
# TODO: When new indexes get added, we could have other ways to |
| 428 |
# fetch the list of available indexes (e.g. plugins, etc) |
| 429 |
$es_status->{nodes} = $es_conf->{nodes}; |
| 430 |
my $es = Search::Elasticsearch->new( $es_conf ); |
| 431 |
my $es_status->{version} = $es->info->{version}->{number}; |
| 432 |
|
| 433 |
foreach my $index ( @indexes ) { |
| 434 |
my $index_count; |
| 435 |
try { |
| 436 |
$index_count = $es->indices->stats( index => $index ) |
| 437 |
->{_all}{primaries}{docs}{count}; |
| 438 |
} |
| 439 |
catch { |
| 440 |
if ( ref($_) eq 'Search::Elasticsearch::Error::Missing' ) { |
| 441 |
push @{ $es_status->{errors} }, "Index not found ($index)"; |
| 442 |
$index_count = -1; |
| 443 |
} |
| 444 |
elsif ( ref($_) eq 'Search::Elasticsearch::Error::NoNodes' ) { |
| 445 |
$es_running = 0; |
| 446 |
} |
| 447 |
else { |
| 448 |
# TODO: when time comes, we will cover more use cases |
| 449 |
die $_; |
| 450 |
} |
| 451 |
}; |
| 452 |
|
| 453 |
my $db_count = -1; |
| 454 |
my $missing_count = 0; |
| 455 |
if ( $index eq $biblios_index_name ) { |
| 456 |
$db_count = Koha::Biblios->search->count; |
| 457 |
} elsif ( $index eq $authorities_index_name ) { |
| 458 |
$db_count = Koha::Authorities->search->count; |
| 459 |
} |
| 460 |
if ( $db_count != -1 && $index_count != -1 ) { |
| 461 |
$missing_count = $db_count - $index_count; |
| 462 |
$es_has_missing = 1 if $missing_count > 0; |
| 463 |
} |
| 464 |
push @{ $es_status->{indexes} }, |
| 465 |
{ |
| 466 |
index_name => $index, |
| 467 |
index_count => $index_count, |
| 468 |
db_count => $db_count, |
| 469 |
missing_count => $missing_count, |
| 470 |
}; |
| 471 |
} |
| 472 |
$es_status->{running} = $es_running; |
| 473 |
|
| 474 |
$template->param( |
| 475 |
elasticsearch_status => $es_status, |
| 476 |
elasticsearch_has_missing => $es_has_missing, |
| 477 |
); |
| 478 |
} |
| 479 |
} |
| 480 |
|
405 |
|
| 481 |
if ( C4::Context->preference('RESTOAuth2ClientCredentials') ) { |
406 |
if ( C4::Context->preference('RESTOAuth2ClientCredentials') ) { |
| 482 |
# Do we have the required deps? |
407 |
# Do we have the required deps? |
|
Lines 899-904
if ( $tab eq 'history' ) {
Link Here
|
| 899 |
} |
824 |
} |
| 900 |
} |
825 |
} |
| 901 |
|
826 |
|
|
|
827 |
sub elasticsearch_check { |
| 828 |
my $template = shift; |
| 829 |
|
| 830 |
if ( C4::Context->preference('SearchEngine') eq 'Elasticsearch' ) { |
| 831 |
|
| 832 |
my $es_status; |
| 833 |
my $es_config_error; |
| 834 |
my $es_running = 1; |
| 835 |
my $es_has_missing = 0; |
| 836 |
|
| 837 |
my $es_conf; |
| 838 |
try { |
| 839 |
$es_conf = Koha::SearchEngine::Elasticsearch::_read_configuration(); |
| 840 |
} catch { |
| 841 |
if ( ref($_) eq 'Koha::Exceptions::Config::MissingEntry' ) { |
| 842 |
$template->param( elasticsearch_fatal_config_error => $_->message ); |
| 843 |
$es_config_error = 1; |
| 844 |
} |
| 845 |
}; |
| 846 |
if ( !$es_config_error ) { |
| 847 |
|
| 848 |
my $biblios_index_name = $es_conf->{index_name} . "_" . $Koha::SearchEngine::BIBLIOS_INDEX; |
| 849 |
my $authorities_index_name = $es_conf->{index_name} . "_" . $Koha::SearchEngine::AUTHORITIES_INDEX; |
| 850 |
|
| 851 |
my @indexes = ( $biblios_index_name, $authorities_index_name ); |
| 852 |
|
| 853 |
# TODO: When new indexes get added, we could have other ways to |
| 854 |
# fetch the list of available indexes (e.g. plugins, etc) |
| 855 |
$es_status->{nodes} = $es_conf->{nodes}; |
| 856 |
my $es = Search::Elasticsearch->new($es_conf); |
| 857 |
my $es_status->{version} = $es->info->{version}->{number}; |
| 858 |
|
| 859 |
foreach my $index (@indexes) { |
| 860 |
my $index_count; |
| 861 |
try { |
| 862 |
$index_count = $es->indices->stats( index => $index )->{_all}{primaries}{docs}{count}; |
| 863 |
} catch { |
| 864 |
if ( ref($_) eq 'Search::Elasticsearch::Error::Missing' ) { |
| 865 |
push @{ $es_status->{errors} }, "Index not found ($index)"; |
| 866 |
$index_count = -1; |
| 867 |
} elsif ( ref($_) eq 'Search::Elasticsearch::Error::NoNodes' ) { |
| 868 |
$es_running = 0; |
| 869 |
} else { |
| 870 |
|
| 871 |
# TODO: when time comes, we will cover more use cases |
| 872 |
die $_; |
| 873 |
} |
| 874 |
}; |
| 875 |
|
| 876 |
my $db_count = -1; |
| 877 |
my $missing_count = 0; |
| 878 |
if ( $index eq $biblios_index_name ) { |
| 879 |
$db_count = Koha::Biblios->search->count; |
| 880 |
} elsif ( $index eq $authorities_index_name ) { |
| 881 |
$db_count = Koha::Authorities->search->count; |
| 882 |
} |
| 883 |
if ( $db_count != -1 && $index_count != -1 ) { |
| 884 |
$missing_count = $db_count - $index_count; |
| 885 |
$es_has_missing = 1 if $missing_count > 0; |
| 886 |
} |
| 887 |
push @{ $es_status->{indexes} }, |
| 888 |
{ |
| 889 |
index_name => $index, |
| 890 |
index_count => $index_count, |
| 891 |
db_count => $db_count, |
| 892 |
missing_count => $missing_count, |
| 893 |
}; |
| 894 |
} |
| 895 |
$es_status->{running} = $es_running; |
| 896 |
|
| 897 |
$template->param( |
| 898 |
elasticsearch_status => $es_status, |
| 899 |
elasticsearch_has_missing => $es_has_missing, |
| 900 |
); |
| 901 |
} |
| 902 |
} |
| 903 |
} |
| 904 |
|
| 902 |
sub message_broker_check { |
905 |
sub message_broker_check { |
| 903 |
my $template = shift; |
906 |
my $template = shift; |
| 904 |
{ |
907 |
{ |
| 905 |
- |
|
|