package Jifty::Plugin::RequestInspector::View;
use strict;
use warnings;
use Jifty::View::Declare -base;
template '/__jifty/admin/requests' => page {
title => "Request Inspector"
}
content {
render_region(
name => 'aggregate',
path => '/__jifty/admin/requests/aggregate',
);
h2 { "Request Inspector" };
render_region(
name => 'request_inspector',
path => '/__jifty/admin/requests/requests',
);
div {
hyperlink(
label => "Clear requests",
onclick => [
{
refresh => 'request_inspector',
args => {
clear_requests => 1,
},
},
{
refresh => "aggregate",
}
],
),
};
};
template '/__jifty/admin/requests/requests' => sub {
my $request_inspector = Jifty->find_plugin('Jifty::Plugin::RequestInspector');
$request_inspector->clear_requests if get('clear_requests');
ol {
attr { id is 'request_inspector' };
for my $request ($request_inspector->requests) {
_render_request($request);
}
};
render_region(
name => 'more_button',
path => '/__jifty/admin/requests/more_button',
);
};
template '/__jifty/admin/requests/more_button' => sub {
my $request_inspector = Jifty->find_plugin('Jifty::Plugin::RequestInspector');
my $last_id = $request_inspector->last_id;
hyperlink(
label => "Load subsequent requests",
onclick => [{
element => '#request_inspector',
append => '/__jifty/admin/requests/more_requests',
effect => 'slideDown',
arguments => {
last_id => $last_id,
},
},
{
refresh_self => 1,
},
{
refresh => "aggregate",
}],
);
};
template '/__jifty/admin/requests/more_requests' => sub {
my $request_inspector = Jifty->find_plugin('Jifty::Plugin::RequestInspector');
my $last_id = get('last_id');
my @requests = $request_inspector->requests( after => $last_id );
for my $request (@requests) {
_render_request($request);
}
};
template '/__jifty/admin/requests/aggregate' => sub {
my $request_inspector = Jifty->find_plugin('Jifty::Plugin::RequestInspector');
my @aggregates = grep {$_->can('inspect_render_aggregate')} $request_inspector->inspector_plugins;
return unless @aggregates;
h2 { "Aggregate information" };
dl {
for my $plugin (@aggregates) {
my $plugin_name = ref $plugin;
(my $short_name = $plugin_name) =~ s/^Jifty::Plugin:://;
dt {
hyperlink(
label => $short_name,
onclick => {
region => Jifty->web->qualified_region($plugin_name),
replace_with => '/__jifty/admin/requests/aggregate_plugin',
toggle => 1,
effect => 'slideDown',
arguments => {
plugin_name => $plugin_name,
},
},
);
};
dd {
render_region($plugin_name);
};
}
}
};
template '/__jifty/admin/requests/aggregate_plugin' => sub {
my $plugin_name = get('plugin_name');
my $request_inspector = Jifty->find_plugin('Jifty::Plugin::RequestInspector');
my @plugin_data = $request_inspector->get_all_plugin_data($plugin_name);
my $plugin = Jifty->find_plugin($plugin_name)
or abort(404);
$plugin->inspect_render_aggregate(@plugin_data);
};
template '/__jifty/admin/requests/plugins' => sub {
my $id = get('id');
my $request_inspector = Jifty->find_plugin('Jifty::Plugin::RequestInspector');
dl {
for my $plugin ($request_inspector->inspector_plugins) {
my $plugin_name = ref $plugin;
my $plugin_data = $request_inspector->get_plugin_data($id, $plugin_name);
next if !defined($plugin_data);
dt {
(my $short_name = $plugin_name) =~ s/^Jifty::Plugin:://;
if ($plugin->can('inspect_render_analysis')) {
hyperlink(
label => $short_name,
onclick => {
region => Jifty->web->qualified_region($plugin_name),
replace_with => '/__jifty/admin/requests/plugin',
toggle => 1,
effect => 'slideDown',
arguments => {
id => $id,
plugin_name => $plugin_name,
},
},
);
}
else {
outs $short_name;
}
};
dd {
if ($plugin->can('inspect_render_summary')) {
outs $plugin->inspect_render_summary($plugin_data, $id);
}
render_region($plugin_name);
};
}
};
};
template '/__jifty/admin/requests/plugin' => sub {
my $id = get('id');
my $plugin_name = get('plugin_name');
my $request_inspector = Jifty->find_plugin('Jifty::Plugin::RequestInspector');
my $plugin_data = $request_inspector->get_plugin_data($id, $plugin_name);
my $plugin = Jifty->find_plugin($plugin_name)
or abort(404);
$plugin->inspect_render_analysis($plugin_data, $id);
};
sub _render_request {
my $request = shift;
li {
my $id = $request->{id};
hyperlink(
label => $request->{url},
onclick => {
region => Jifty->web->qualified_region("request_$id"),
replace_with => '/__jifty/admin/requests/plugins',
toggle => 1,
effect => 'slideDown',
arguments => {
id => $id,
},
},
);
outs sprintf ' (%.2gs)', $request->{end} - $request->{start};
if ($request->{cookie}) {
outs " [" . $request->{cookie} . "]";
}
render_region("request_$id");
};
}
1;
__END__
=head1 NAME
Jifty::Plugin::RequestInspector::View - View for RequestInspector
=cut