1package HTTP::Engine::Middleware::Status::Memory;
2use Any::Moose;
3extends 'HTTP::Engine::Middleware::Status::Base';
4
5use B::TerseSize;
6use Devel::Symdump;
7
8has '+name' => (
9    default => 'Memory',
10);
11
12sub render {
13    my($self, %args) = @_;
14
15    my $stab = Devel::Symdump->rnew("main");
16    my %size;
17    for my $package ("main", $stab->packages) {
18        my($subs, $opcount, $opsize) = B::TerseSize::package_size($package);
19        $size{$package} = $opsize;
20    }
21
22    my $table = "<table>\n";
23    for my $package (sort {$size{$b}<=>$size{$a}} keys %size) {
24        $table .= sprintf "<tr><td>%-24s</td><td>%8d [KB]</tr>\n", $package, $size{$package} / 1024 ;
25    }
26    $table .= "</table>\n";
27
28    $table;
29}
30
31__PACKAGE__->meta->make_immutable;
321;
33
34=head1 NAME
35
36HTTP::Engine::Middleware::Status::Memory - Memory Status Plugin
37
38=head1 SYNOPSIS
39
40    my $mw = HTTP::Engine::Middleware->new;
41    $mw->install( 'HTTP::Engine::Middleware::Status' => {
42        plugins   => [
43            'Memory', # use HTTP::Engine::Middleware::Status::Memory
44        ],
45    });
46
47=head1 DESCRIPTION
48
49this pluin displays the used memory size which by the modules.
50
51=head1 SEE ALSO
52
53L<HTTP::Engine::Middleware::Status>,
54L<B::TerseSize>,
55L<Devel::Symdump>
56
57
58=head1 AUTHORS
59
60Kazuhiro Osawa
61
62=cut
63