=head1 NAME
EPrints::Plugin::Screen::UBStatus
=cut
package EPrints::Plugin::Screen::UBStatus;
use EPrints::Plugin::Screen;
@ISA = ( 'EPrints::Plugin::Screen::Status' );
use strict;
sub render
{
my( $self ) = @_;
$self->indexer_warnings();
my $session = $self->{session};
my $user = $session->current_user;
my $rows;
# Number of users in each group
my $total_users = $session->dataset( "user" )->count( $session );
my %num_users = ();
my $userds = $session->dataset( "user" );
my $subds = $session->dataset( "saved_search" );
my @usertypes = $session->get_repository->get_types( "user" );
foreach my $usertype ( @usertypes )
{
my $searchexp = new EPrints::Search(
session => $session,
dataset => $userds );
$searchexp->add_field(
$userds->get_field( "usertype" ),
$usertype );
my $result = $searchexp->perform_search();
$num_users{ $usertype } = $result->count();
}
my %num_eprints = ();
my @esets = ( "archive", "buffer", "reviewed", "inbox", "deletion" );
foreach( @esets )
{
# Number of submissions in dataset
$num_eprints{$_} = $session->dataset( $_ )->count( $session );
}
my $db_status = ( $total_users > 0 ? "ok" : "down" );
my $indexer_status;
if( !$self->get_daemon->is_running() )
{
$indexer_status = "stopped";
}
elsif( $self->get_daemon->has_stalled() )
{
$indexer_status = "stalled";
}
else
{
$indexer_status = "running";
}
my( $html , $table , $p , $span );
# Write the results to a table
$html = $session->make_doc_fragment;
$html->appendChild( $self->render_common_action_buttons );
$table = $session->make_element( "table", border=>"0" );
$html->appendChild( $table );
$table->appendChild( $session->render_row(
$session->html_phrase( "cgi/users/status:release" ),
$session->make_text( EPrints->human_version ) ) );
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:database_driver" ),
$session->make_text( $session->get_database()->get_driver_name ) ) );
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:database_version" ),
$session->make_text( $session->get_database()->get_server_version ) ) );
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:database" ),
$session->html_phrase( "cgi/users/status:database_".$db_status ) ) );
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:indexer" ),
$session->html_phrase( "cgi/users/status:indexer_".$indexer_status ) ) );
{
my $dataset = $session->dataset( "event_queue" );
my $n = $session->get_database->count_table( $dataset->get_sql_table_name );
my $link = $session->render_link( "?screen=Listing&dataset=".$dataset->id );
$link->appendChild( $session->html_phrase( "cgi/users/status:indexer_queue_size", size => $session->make_text( $n ) ) );
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:indexer_queue" ),
$link ) );
}
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:xml_version" ),
$session->make_text( EPrints::XML::version() ) ) );
$table = $session->make_element( "table", border=>"0" );
$html->appendChild( $session->html_phrase( "cgi/users/status:usertitle" ) );
$html->appendChild( $table );
foreach my $usertype ( keys %num_users )
{
my $k = $session->make_doc_fragment;
$k->appendChild( $session->render_type_name( "user", $usertype ) );
$table->appendChild(
$session->render_row(
$k,
$session->make_text( $num_users{$usertype} ) ) );
}
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:users" ),
$session->make_text( $total_users ) ) );
$table = $session->make_element( "table", border=>"0" );
$html->appendChild( $session->html_phrase( "cgi/users/status:articles" ) );
$html->appendChild( $table );
foreach( @esets )
{
$table->appendChild(
$session->render_row(
$session->html_phrase( "cgi/users/status:set_".$_ ),
$session->make_text( $num_eprints{$_} ) ) );
}
unless( $EPrints::SystemSettings::conf->{disable_df} )
{
$table = $session->make_element( "table", border=>"0" );
$html->appendChild( $session->html_phrase( "cgi/users/status:diskspace" ) );
$html->appendChild( $table );
my $best_size = 0;
my @dirs = $session->get_repository->get_store_dirs();
my $dir;
foreach $dir ( @dirs )
{
my $size = $session->get_repository->get_store_dir_size( $dir );
$table->appendChild(
$session->render_row(
$session->html_phrase(
"cgi/users/status:diskfree",
dir=>$session->make_text( $dir ) ),
$session->html_phrase(
"cgi/users/status:mbfree",
mb=>$session->make_text(
int($size/1024/1024) ) ) ) );
$best_size = $size if( $size > $best_size );
}
if( $best_size < $session->config(
"diskspace_error_threshold" ) )
{
$p = $session->make_element( "p" );
$html->appendChild( $p );
$p->appendChild(
$session->html_phrase(
"cgi/users/status:out_of_space" ) );
}
elsif( $best_size < $session->config(
"diskspace_warn_threshold" ) )
{
$p = $session->make_element( "p" );
$html->appendChild( $p );
$p->appendChild(
$session->html_phrase(
"cgi/users/status:nearly_out_of_space" ) );
}
}
$table = $session->make_element( "table", border=>"0" );
$html->appendChild( $session->html_phrase( "cgi/users/status:saved_searches" ) );
$html->appendChild( $table );
$table->appendChild(
$session->render_row(
undef,
$session->html_phrase( "cgi/users/status:subcount" ),
$session->html_phrase( "cgi/users/status:subsent" ) ) );
foreach my $freq ( "never", "daily", "weekly", "monthly" )
{
my $sent;
if( $freq ne "never" )
{
$sent = EPrints::DataObj::SavedSearch::get_last_timestamp(
$session,
$freq );
}
if( !defined $sent )
{
$sent = "?";
}
my $searchexp = new EPrints::Search(
session => $session,
dataset => $subds );
$searchexp->add_field(
$userds->get_field( "frequency" ),
$freq );
my $result = $searchexp->perform_search();
my $n = $result->count;
my $k = $session->make_doc_fragment;
$k->appendChild( $session->html_phrase( "saved_search_fieldopt_frequency_".$freq ) );
$table->appendChild(
$session->render_row(
$k,
$session->make_text( $n ),
$session->make_text( $sent ) ) );
}
$self->{processor}->{title} = $session->html_phrase( "cgi/users/status:title" );
return $html;
}
1;
=head1 COPYRIGHT
=for COPYRIGHT BEGIN
Copyright 2000-2011 University of Southampton.
=for COPYRIGHT END
=for LICENSE BEGIN
This file is part of EPrints L.
EPrints is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
EPrints 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 Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with EPrints. If not, see L.
=for LICENSE END