Informações de registro e tempo de execução da linguagem Perl

Este exemplo usa o seguinte nome de arquivo: ' LogRunAE.pm

Código

O código deste exemplo explora uma funcionalidade que pode não ser usada com frequência. O registro pode ser usado para ajudar a rastrear a execução de um AE. Para ser útil, o AE deve ser registrado com uma máscara de registro e o registro deve ser ativado por meio do nzudxdbg. Para receber mensagens de registro do sistema na janela em que o sistema NPS foi iniciado, é necessário iniciar o NPS com a opção '-i' (por exemplo, 'nzstart -i'). Isso faz com que os processos NPS permaneçam conectados ao terminal. As informações sobre o tempo de execução fornecem estatísticas sobre o sistema NPS, incluindo o número de dados, o número de SPUs e o local de execução.

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;

Implementação

Implemente o script:

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

Registro

Registre o exemplo usando as opções --mem e --mask. A opção --mask ativa o registro para DEBUG e a opção --mem define as informações de tempo de execução da memória.

$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

Executando

Antes de executar, ative o registro executando nzudxdbg:

nzudxdbg
Processing 1 spus
.
done
Processing host
done

Execute a consulta no nzsql no banco de dados do sistema:

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)

O registro do sistema NPS aparece na janela se o sistema NPS foi iniciado:

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