drill down with basic tooltip
[p5sagit/Devel-Size.git] / static / MemView.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Mojolicious::Lite;
7
8 use ORLite {
9     file => '../x.db',
10     package => "MemView",
11     #user_version => 1,
12     readonly => 1,
13     #unicode => 1,
14 };
15
16 # Documentation browser under "/perldoc"
17 plugin 'PODRenderer';
18
19 get '/' => sub {
20     my $self = shift;
21     $self->render('index');
22 };
23
24 get '/jit_tree/:id/:depth' => sub {
25     my $self = shift;
26     my $id = $self->stash('id');
27     my $depth = $self->stash('depth');
28     warn "jit_tree $id $depth";
29     my $jit_tree = _fetch_node($id, $depth, sub {
30         my ($node, $children) = @_;
31         $node->{'$area'} = $node->{self_size}+$node->{kids_size};
32         $node->{child_count} = @$children if $children;
33         my $jit_node = {
34             id   => $node->{id},
35             name => $node->{name},
36             data => $node,
37         };
38         $jit_node->{children} = $children if $children;
39         return $jit_node;
40     });
41 if(1){
42     use Devel::Dwarn;
43     use Data::Dump qw(pp);
44     local $jit_tree->{children};
45     pp($jit_tree);
46 }
47     $self->render_json($jit_tree);
48 };
49
50 sub _fetch_node {
51     my ($id, $depth, $transform) = @_;
52     my $node = MemView->selectrow_hashref("select * from node where id = ?", undef, $id);
53     my $children;
54     if ($depth && $node->{child_seqns}) {
55         my @child_seqns = split /,/, $node->{child_seqns};
56         $children = [ map { _fetch_node($_, $depth-1, $transform) } @child_seqns ];
57     }
58     $node = $transform->($node, $children) if $transform;
59     return $node;
60 }
61
62
63 app->start;
64 __DATA__
65 @@ index.html.ep
66 % layout 'default';
67 % title 'Welcome';
68 Welcome to the Mojolicious real-time web framework!
69
70 @@ layouts/default.html.ep
71 <!DOCTYPE html>
72 <head>
73 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
74 <title>Perl Memory Treemap</title>
75
76 <!-- CSS Files -->
77 <link type="text/css" href="css/base.css" rel="stylesheet" />
78 <link type="text/css" href="css/Treemap.css" rel="stylesheet" />
79
80 <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
81
82 <!-- JIT Library File -->
83 <script language="javascript" type="text/javascript" src="jit.js"></script>
84 <script language="javascript" type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
85
86 <!-- Example File -->
87 <script language="javascript" type="text/javascript" src="sprintf.js"></script>
88 <script language="javascript" type="text/javascript" src="tm.js"></script>
89 </head>
90
91 <body onload="init();">
92 <div id="container">
93
94 <div id="left-container">
95
96 <div class="text">
97 <h4>
98 Perl Memory TreeMap
99 </h4> 
100     Clicking on a node will show a new TreeMap with the contents of that node.<br /><br />            
101 </div>
102
103 <a id="back" href="#" class="theme button white">Go to Parent</a>
104 </div>
105
106 <div id="center-container">
107     <div id="infovis"></div>    
108 </div>
109
110 <div id="right-container">
111
112 <div id="inner-details"></div>
113
114 </div>
115
116 <div id="log"></div>
117 </div>
118 </body>
119 </html>