PApp
view release on metacpan or search on metacpan
PApp/Log.pm view on Meta::CPAN
}
=item log_state
Run through the whole state database (not the user database) and log all
state entries that have not been logged before. This is not (yet) atomic,
so do not call this function concurrently.
=cut
sub log_state {
my %arg = @_;
my $now = time - 1;
my $lastlog = getenv PAPP_LOG_STATE || 0;
local $DBH = PApp::Config::DBH;
return; #NYI
# TODO: state loggin, NO user logging
my $st = sql_exec "select id, unix_timestamp(ctime), previd, userid, state from state
where ctime > from_unixtime(?) and ctime <= from_unixtime(?)",
$lastlog, $upto;
my ($app, $loc, $mod);
# compile the decision logic
my $dec = <<'EOF';
sub {
while (my $row = $st->fetchrow_arrayref) {
my ($meta, $state) = decode_state ($row);
$app = $meta->{pmod}{name};
$loc = $meta->{location};
$mod = $state->{papp_module};
EOF
for (0..$#cb_state) {
my $cb = $cb_state[$_];
my @tst;
push @tst, "\$app eq \"".quotemeta($cb->[0])."\"" if defined $cb->[0];
push @tst, "\$loc eq \"".quotemeta($cb->[1])."\"" if defined $cb->[1];
push @tst, "\$mod eq \"".quotemeta($cb->[2])."\"" if defined $cb->[2];
$dec .= "\$cb_state[$_][3](\$meta, \$state)";
$dec .= " if ".join(" && ", @tst) if @tst;
$dec .= ";\n";
}
$dec .= <<'EOF';
}
}
EOF
$dec = eval $dec;
die if $@;
$dec->();
$st->finish;
setenv PAPP_LASTLOG, $upto;
}
1;
=back
=head1 SEE ALSO
L<PApp>.
=head1 AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/
=cut
( run in 1.419 second using v1.01-cache-2.11-cpan-6aa56a78535 )