eBox puede registrar cada cambio realizado a través de interfaz administrativo, lo que es útil para saber cuando se ha cambiado o quién lo ha hecho. Cada módulo eBox debería dar parte de cada mensaje de registro para dar un soporte completo al registro administrativo.
Para conseguirlo, debes incluir un nuevo paquete del núcleo eBox
EBox::LogAdmin en tu módulo.
Se usa un nuevo atributo del módulo, title, debes añadirlo a la llamada de creación del módulo. Por ejemplo:
Ejemplo 3.17. Creando un objeto con soporte a registro administrativo
my $self = $class->SUPER::_create(name => 'objects',
title => __n('Objects'),
domain => 'ebox-objects',
@_);
Además, se necesita una tabla hash en el constructor con las actiones que
tu módulo reportará con una formato de mensaje bonito.
Siguiendo el mismo ejemplo en el módulo EBox::Objects:
Ejemplo 3.18. Añadiendo acciones para el registro
$self->{'actions'} = {};
$self->{'actions'}->{'addObject'} = __n('Added object {object}');
$self->{'actions'}->{'addToObject'} =
__n('Added {name} ({ip}/{mask} [{mac}]) to object {object}');
$self->{'actions'}->{'removeObject'} = __n('Removed object {object}');
Para cada acción que quieras registrar, que debería ser todas que puedan hacerse desde el interfaz web, deberás seguir estos pasos:
Añadir una marca de acción a la función, como:
sub addObject # (description)
{
#action: addObject
Llama los métodos logAdminDeferred or
logAdminNow. logAdminDeferred
pone la acción en la base de datos con el campo confirmado a
falso, y debería ser llamado para acciones que no tengan
lugar hasta que los cambios sean guardados, esto es, todo que se guarda
en gconf. Cuando salves los cambios, las acciones se marcan como confirmadas,
si reviertes los cambios estas acciones se borran.
logAdminNow pone la acción en la base de datos con el campo
confirmado a verdadero, y debería ser
usado por acción que tengan efecto inmediato como cambiar la contraseña o
añadir un usuario.
Ambas funciones tiene la misma firma:
logAdminDeferred(module,action,params) logAdminNow(module,action,params)
Deberías llamarlo sólo cuando estés seguro que la acción ha tenido lugar, por
ejemplo, para addObject.
Ejemplo 3.19. Llamando al método logAdminDeferred
$self->set_string("$id/description", $desc);
logAdminDeferred('objects',"addObject","object=$desc");
return $id;
Como se muestra, la base de datos guarda addObject, object=objname", el código mostrado crea la cadena que debería mostrarse y traducirse al lenguaje concreto.