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 )