App-Context
view release on metacpan or search on metacpan
lib/App/Context.pm view on Meta::CPAN
if ($profiler) {
$self->profile_start("main");
$self->start_profiler_log();
}
&App::sub_exit() if ($App::trace);
}
sub start_profiler_log {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $profile_state = $self->{profile_state};
if (!$profile_state) {
$self->profile_start("main");
$profile_state = $self->{profile_state};
}
my $options = $self->{options};
my $app = $options->{app} || "app";
my $context_abbr = ref($self);
$context_abbr =~ s/^App::Context:://;
my $host = $options->{host} || "localhost";
my $username = $self->user();
my $events = $self->{events};
my $events_str = "";
if ($events && $#$events > -1) {
$events_str .= ($#$events + 1);
foreach my $event (@$events) {
$events_str .= ":$event->[1].$event->[2]";
if ($event->[3] && $#{$event->[3]} > -1) {
$events_str .= "(" . join(",",@{$event->[3]}) . ")";
}
}
}
my $time = $profile_state->{last_timeofday}[0] || time();
my $start_dttm = time2str("%Y-%m-%d %H:%M:%S", $time);
my $info = $self->get_proc_info2();
my $pinfo = $info->{$$};
my $start_mem_mb = $pinfo->{vsize}/1048576;
my $repname = $options->{"app.Context.profiler_repository"};
my $rep = $repname ? $self->repository($repname) : undef;
if ($rep) {
eval {
if (!$profile_state->{profiler_log_id}) {
$rep->insert("app_profiler_log",
["context", "host", "username", "app", "start_dttm", "start_mem_mb", "events"],
[$context_abbr, $host, $username, $app, $start_dttm, $start_mem_mb, $events_str],
{ last_inserted_id => 1 });
$profile_state->{profiler_log_id} = $rep->last_inserted_id();
}
};
}
else {
$self->log("Start : (Mem %.1f MB) %s [%s\@%s:%s]\n", $start_mem_mb, $context_abbr, $username, $host, $app);
}
&App::sub_exit() if ($App::trace);
}
sub update_profiler_log {
&App::sub_entry if ($App::trace);
my ($self, $app_scope, $content_name, $app_scope_id_type, $app_scope_id) = @_;
my $options = $self->{options};
my $repname = $options->{"app.Context.profiler_repository"};
my $rep = $repname ? $self->repository($repname) : undef;
my $profile_state = $self->{profile_state};
my $profiler_log_id = $profile_state->{profiler_log_id};
if (defined $app_scope) {
$profile_state->{app_scope} = $app_scope;
}
elsif (defined $profile_state->{app_scope}) {
$app_scope = $profile_state->{app_scope};
}
if (defined $app_scope_id) {
$profile_state->{app_scope_id} = $app_scope_id;
$profile_state->{app_scope_id_type} = $app_scope_id_type;
}
elsif (defined $profile_state->{app_scope_id}) {
$app_scope_id = $profile_state->{app_scope_id};
$app_scope_id_type = $profile_state->{app_scope_id_type};
}
if (defined $content_name) {
$profile_state->{content_name} = $content_name;
}
elsif (defined $profile_state->{content_name}) {
$content_name = $profile_state->{content_name};
}
if ($rep) {
if ($profiler_log_id) {
eval {
$rep->update("app_profiler_log", { "profiler_log_id.eq" => $profiler_log_id },
["app_scope", "content_name", "app_scope_id_type", "app_scope_id"],
[$app_scope, $content_name, $app_scope_id_type, $app_scope_id]);
};
}
}
else {
$self->log("Update: %s [%s] (%s:%s)\n", $app_scope, $content_name, $app_scope_id_type, $app_scope_id);
}
&App::sub_exit() if ($App::trace);
}
sub finish_profiler_log {
&App::sub_entry if ($App::trace);
my ($self, $end_cd) = @_;
$end_cd ||= "F"; # assume we finish using normal processing
my $profile_state = $self->{profile_state};
my $profile_stats = $self->profile_stats();
my $profiler_log_id = $profile_state->{profiler_log_id};
my $app_scope = $profile_state->{app_scope};
my $content_name = $profile_state->{content_name};
my $app_scope_id_type = $profile_state->{app_scope_id_type};
( run in 0.606 second using v1.01-cache-2.11-cpan-2398b32b56e )