La interfaz de usuario de eBox tiene una página "Resumen" donde se muestra la información del estado de cada módulo. Esta página tiene dos partes:
La primera parte es una tabla con el estado de todos los servicios de red instalados: si están ejecutándose o no y los botones correspondientes para reiniciarlos.
La segunda parte de la página tiene una sección separada para cada módulo, donde se puede mostrar una información más detallada.
La información del resumen es recogida llamando a dos funciones
abstractas definidas en EBox::Module, si no
desea implementarlas, entonces no se mostrará información sobre ese
módulo. statusSummary rellena la tabla en la
que se mostrará el estado de los servicios de red y
summary crea la sección resumen para el módulo.
La forma en que el resumen está construido es muy parecida a la
forma en que lo está el menú, como se puede ver en Sección 5.3. Hay unas cuantas clases en el espacio de
nombres EBox::Summary que se pueden usar para
construir la información de
resumen. statusSummary debería devolver un
objeto de tipo EBox::Summary::Status mientras
que summary es libre de devolver cualquier
objeto cuyo tipo sea un subtipo de
EBox::Summary::Item, aunque la mayor parte de
los módulos sólo devuelvan un
EBox::Summary::Module.
Cada uno de las subclases de
EBox::Summary::Item tiene algunos atributos y
pueden contener otros objetos
EBox::Summary::Item, y que todos ellos saquen
algo de código HTML. EBox::Summary::Module
tiene un atributo title, que cuando llega
el momento de generar la página muestra el título
title y el html para sus hijos por debajo
suyo.
Para ver como está construida la sección resumen, vamos a echar
un vistazo al módulo network. La salida de su resumen es un título y
una sección por cada interfaz de red, con un título en negrita y una
tabla que muestra su dirección MAC, dirección IP, máscara de red,
etc. Ejemplo 5.16 muestra las partes
importantes de su función summary.
Ejemplo 5.16. Implementación de ejemplo de summary
my $item = new EBox::Summary::Module(__("Interfaces de red"));
foreach my $iface (@{$ifaces}) {
my $status = __("down");
my $section = new EBox::Summary::Section($iface);
$item->add($section);
if (iface_is_up($iface)) {
$status = __("up");
}
$section->add(new EBox::Summary::Value (__("Status"), $status));
my $ether = iface_mac_address($iface);
if ($ether) {
$section->add(new EBox::Summary::Value(
__("dirección MAC"), $ether));
}
my @ips = iface_addresses($iface);
foreach my $ip (@ips) {
$section->add(new EBox::Summary::Value(
__("dirección IP"), "$ip"));
}
}
return $item;Primero se crea un objeto
EBox::Summary::Module. Éste objeto mantendrá
toda la información del resumen.
Entonces se creará un objeto de tipo
EBox::Summary::Section para cada interfaz de
red. Es una sección con un título (pasado como argumento al
constructor) y contiene varios objetos
EBox::Summary::Value, los cuales muestran el
nombre y un valor asociado como filas de una tabla en la sección. Por
tanto, varios valores se añaden a cada sección y las secciones son
añadidas al objeto EBox::Summary::Module. El
resultado es un árbol de objetos, y su raíz es la
EBox::Summary::Module. Cuando se le pide
imprimirse, muestra su título y pide a cada uno de sus hijos que se
impriman. Para ver como es, sólo hace falta abrir la página Resumen de
una instalación de eBox.
summary puede devolver cualquier objeto
siempre que herede de EBox::Summary::Item,
puede crearse uno propio si las necesidades no son cubiertas por los
elementos estándar que vienen con la plataforma.
statusSummary es más sencillo. Solo ha
de devolver un objeto EBox::Summary::Status. El
constructor para esta clase necesita tres argumentos:
El nombre del servicio.
Un valor booleano que indique si el servicio está ejecutándose.
Un valor booleano que indica si el servicio está activado o no.
La razón por la cual existe este tercer argumento es que existen
servicios que el usuario no debería poder iniciar, en la página de
resumen, porque no han sido configurados. Así si, por ejemplo, el
servicio de squid está desconectado, el usuario tendrá que ir a la
página de configuración de squid y activar allí el servicio. Ejemplo 5.17 muestra la implementación de la función
statusSummary en el módulo squid, además de
algunas funciones relacionadas.
Ejemplo 5.17. Ejemplo de implementación de
statusSummary
sub statusSummary
{
my $self = shift;
return new EBox::Summary::Status('squid', __('Proxy HTTP'),
$self->isRunning, $self->service);
}
sub isRunning
{
my $self = shift;
return $self->pidFileRunning(PIDFILE);
}
sub service
{
my $self = shift;
return $self->get_bool('active');
}De nuevo, se puede comprobar como se ve en la página de Resumen en una instalación de eBox que tiene el módulo squid incluido.