Informations sur la journalisation et l'exécution du langage Perl

Cet exemple utilise le nom de fichier suivant : " LogRunAE.pm

Coder

Le code de cet exemple explore des fonctionnalités qui ne sont pas forcément utilisées couramment. La journalisation peut être utilisée pour retracer l'exécution d'un AE. Pour être utile, l'AE doit être enregistré avec un masque de journalisation et la journalisation doit être activée via nzudxdbg. Pour recevoir les messages de journalisation du système dans la fenêtre où le système NPS a été démarré, vous devez démarrer NPS avec l'option '-i' (par exemple, "nzstart -i'). Les processus NPS restent ainsi attachés au terminal. Les informations sur l'exécution fournissent des statistiques sur le système NPS, notamment le nombre de tranches de données, le nombre de SPU et le lieu d'exécution.

package LogRunAe;
use strict;
use autodie;
use nzae::Ae;

our @ISA = qw(nzae::Ae);

my $ae = LogRunAe->new();
$ae->run();

sub _run()
{
    my $self = shift;
    while ($self->getNext())
    {
        next;
    }

    $self->output("Dataslice ID: ".$self->getDatasliceId());
    $self->output("Hardware ID: ".$self->getHardwareId());
    $self->output("Number of Data Slices: ".$self->getNumberOfDataSlices());
    $self->output("Number of Spus: ".$self->getNumberOfSpus());
    $self->output("Suggested Memory Limit: ".$self->getSuggestedMemoryLimit());
    $self->output("Transaction ID: ".$self->getTransactionId());

    my $userquery = $self->isAUserQuery()? "false" : "true";
    $self->output("Is A User Query: ".$userquery);

    my $loggingenabled = $self->isLoggingEnabled()? "true":"false";
    $self->output("Is Logging Enabled: ".$loggingenabled);

    my $runningonspu = $self->isRunningOnSpu()? "true" : "false";
    $self->output("Is Running on a spu: ".$runningonspu);

    my $runninginpostgres = $self->isRunningInPostgres()? "true" : "false";
    $self->output("Is Running in Postgres: ".$runninginpostgres);

    my $runningindbos = $self->isRunningInDbos()? "true" : "false";
    $self->output("Is Running in DBOS: ".$runningindbos);

    my $uda = $self->isUda()? "true" : "false";
    $self->output("Is a UDA: ".$uda);

    my $udf = $self->isUdf()? "true" : "false";
    $self->output("Is a UDF: ".$udf);

    my $udtf = $self->isUdtf()? "true" : "false";
    $self->output("Is a UDTF: ".$udtf);

    $self->log("Here is some logging text!", $self->getLogLevelDebug());
    $self->log("Here is some more logging text!", $self->getLogLevelDebug());
}
1;

Déploiement

Déployer le script :

$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
     --template deploy LogRunAe.pm

Enregistrement

Enregistrez l'exemple en utilisant les options --mem et --mask. L'option --mask active la journalisation pour DEBUG et l'option --mem définit les informations sur la durée d'exécution de la mémoire.

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language perl --version 3 \
     --template udtf --exe LogRunAe.pm --sig "log_run(int4)" \
     --return "table(text varchar(1000))" --level 4 --mask debug --mem 100k

En cours d'exécution

Avant de commencer, activez la journalisation en exécutant nzudxdbg:

nzudxdbg
Processing 1 spus
.
done
Processing host
done

Exécutez la requête dans nzsql sur la base de données du système :

SELECT * FROM TABLE WITH FINAL(log_run(1));
             TEXT
--------------------------------
Dataslice ID: 0
Hardware ID: 0
Number of Data Slices: 4
Number of Spus: 1
Suggested Memory Limit: 102400
Transaction ID: 304796
Is A User Query: false
Is Logging Enabled: true
Is Running on a spu: false
Is Running in Postgres: false
Is Running in DBOS: true
Is a UDA: false
Is a UDF: false
Is a UDTF: true
(14 rows)

L'enregistrement du système NPS apparaît dans la fenêtre indiquant si le système NPS a été démarré :

05-05-10 14:33:18 (dbos.18728) [d,udx ] Here is some logging text!
05-05-10 14:33:18 (dbos.18728) [d,udx ] Here is some more logging text