Un altro strumento utile, utilizzato anche nelle precedenti puntate, è il modulo
Data::Dumper che consente il dump e la visualizzazione, in svariati formati, di
strutture dati complesse. Esistono tuttavia una serie di moduli mod_perl assai
utili nella diagnosi dei problemi.
Apache::StatINC e Apache::Reload
Quando modifichiamo un modulo mod_perl, c'è la necessità di riavviare il
server Apache affinché le modifiche abbiano effetto. Questo può risultare
abbastanza tedioso durante la fase di sviluppo. Apache::StatINC, incluso
nella distribuzione standard mod_perl, consente di aggiornare (cioè
ricompilare ed eseguire) in maniera automatica tutti i moduli e i file presenti
nella speciale variabile %INC che sono stati modificati senza dover riavviare il
server. Per attivarlo, le direttive in httpd.conf sono le seguenti:
PerlModule Apache::FirstModule
PerlModule Apache::StatINC
<Location /linuxandc-1>
SetHandler perl-script
PerlHandler Apache::FirstModule
PerlInitHandler Apache::StatINC
PerlSetVar StatINCDebug On
</Location>
In tal modo, ogni modifica al file produrrà anche una linea simile
nell'error_log di Apache:
Apache::StatINC: process 297 reloading Apache/FirtModule.pm
Questo modulo dovrebbe essere utilizzato solo in fase di sviluppo e non in
ambiente di produzione poiché comporta un overhead aggiuntivo dovuto al
monitoraggio di tutti i file presenti in %INC.
Una valida alternativa è l'utilizzo del modulo mod_perl Apache::Reload
(disponibile su CPAN,
http://www.cpan.org/modules/by-module/Apache/Apache-Reload-0.07.tar.gz) che
consente di ricaricare solo i moduli desiderati riducendo quindi le chiamate di
sistema stat(). Dopo averlo scompattato ed installato nella maniera standard
per tutti i moduli Perl (perl Makefile.PL && make && make test && make
install) configuriamo httpd.conf per attivarlo:
PerlInitHandler Apache::Reload
PerlSetVar ReloadAll Off
D'ora in poi, tutti i moduli che conterranno la linea use Apache::Reload;
verranno ricaricati e ricompilati automaticamente se modificati. Ad esempio:
package Apache::MyModule;
use Apache::Constants qw(:common);
use Apache::Reload;
use strict;
sub handler { ... }
1;
Vale comunque lo stesso discorso fatto per Apache::StatINC: anche
Apache::Reload andrebbe utilizzato solo durante lo sviluppo e non dovrebbe
mai essere installato in un ambiente di produzione.
Apache::Status
Questo utile modulo standard mod_perl consente di analizzare lo stato
dell'interprete mod_perl. È possibile ottenere informazioni circa i moduli
caricati (Figura 1), le dimensioni di tutte le variabili, ottenere il dump delle
strutture allocate, di ispezionare i simboli e tante altre cose compresa la
visualizzazione grafica delle strutture dati (sono necessari in tal caso moduli
aggiuntivi quali Devel::SysDump, Data::Dumper, Apache::Peek,
B::Grahp tutti reperibili presso il CPAN). Per attivare il report va
configurato httpd.conf:
PerlModule Apache::Status
<Location /perl-status>
SetHandler perl-script
PerlHandler Apache::Status
PerlSetVar StatusDumper On
order deny,allow
deny from all
allow from .mydomain.com localhost
</Location>
Figura 1. Pannello di monitoraggio fornito da Apache::Status: elenco dei moduli caricati 
Dopo aver riavviato il server è possibile accedere all'URL
http://localhost/perl-status (Figura 2). Questo report può essere facilmente
ampliato run-time dai propri moduli per aggiungere voci di menu all'indice e per
stampare informazioni riguardanti lo stato della propria applicazione. Ad
esempio il modulo Apache::DBI registra una sua voce di menu ('DBI
connections') in cui è possibile monitorare le connessioni permanenti attive.
Figura 2. Pannello di monitoraggio fornito da Apache::Status

Apache::FakeRequest
Questo modulo mod_perl, incluso nella distribuzione standard mod_perl,
consente di simulare l'ambiente mod_perl inizializzando un oggetto request di
Apache senza che il server sia attivo. Può dimostrarsi utile per un veloce test
senza dover ogni volta configurare l'handler, riavviare il server e lanciare la
URL dal browser. A titolo di esempio ecco lo script da lanciare a linea di
comando per emulare la richiesta http:://localhost/linuxandc-1 (il nostro
primo modulo, vedere la prima puntata):
#!/usr/local/bin/perl
use Apache::FakeRequest ();
use Apache::FirstModule ();
my $r = Apache::FakeRequest->new();
Apache::FirstModule::handler($r);
Apache::Debug
Questo modulo mod_perl, incluso nella distribuzione standard mod_perl,
consente di effettuare un dump di alcune utili informazioni di debugging. Il suo
utilizzo prevede ad esempio la seguente sintassi:
use Apache::Debug ();
Apache::Debug::dump($r, SERVER_ERROR, "Uh Oh!");
Apache::DebugInfo, Apache::VMonitor
Questi moduli, non inclusi nella distribuzione standard ma disponibili su CPAN,
costituiscono una valida integrazione degli strumenti fino ad ora visti. In
particolare Apache::DebugInfo
(http://www.cpan.org/modules/by-module/Apache/Apache-DebugInfo-0.05.tar.gz)
fornisce una interfaccia ad oggetti per la raccolta di utili informazioni sulla
connessione HTTP corrente. Apache::VMonitor
(http://www.cpan.org/modules/by-module/Apache/Apache-VMonitor-0.7.tar.gz) è
un'interfaccia Web per le più diffuse utilities (quali top, mount, df,
ifconfig, ecc) ed al contempo mostra uno snapshot del sistema in merito alle
risorse utilizzate dai processi httpd e dai moduli mod_perl caricati.
mod_status
Concludiamo questa breve carrellata con mod_status, un modulo Apache scritto
in C ma incluso nella distribuzione standard di Apache, che fornisce utili
informazioni circa lo stato corrente del server: uptime, idle childs, CPU usage,
richieste, ecc. In genere viene compilato per default ed è sufficiente attivarlo
tramite le direttive in httpd.conf:
ExtendedStatus On
<Location /status>
SetHandler server-status
order deny,allow
deny from all
allow from localhost
</Location>
Dopo aver riavviato il server è possibile accedere alle statistiche all'URL
http://localhost/status
|