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