drill down with basic tooltip
[p5sagit/Devel-Size.git] / static / MemView.pl
CommitLineData
b2fc39a5 1#!/usr/bin/env perl
2
3use strict;
4use warnings;
5
6use Mojolicious::Lite;
7
8use 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"
17plugin 'PODRenderer';
18
19get '/' => sub {
20 my $self = shift;
21 $self->render('index');
22};
23
24get '/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 {
bb66f8a1 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;
b2fc39a5 40 });
bb66f8a1 41if(1){
42 use Devel::Dwarn;
43 use Data::Dump qw(pp);
44 local $jit_tree->{children};
45 pp($jit_tree);
46}
b2fc39a5 47 $self->render_json($jit_tree);
48};
49
50sub _fetch_node {
51 my ($id, $depth, $transform) = @_;
52 my $node = MemView->selectrow_hashref("select * from node where id = ?", undef, $id);
bb66f8a1 53 my $children;
b2fc39a5 54 if ($depth && $node->{child_seqns}) {
55 my @child_seqns = split /,/, $node->{child_seqns};
bb66f8a1 56 $children = [ map { _fetch_node($_, $depth-1, $transform) } @child_seqns ];
b2fc39a5 57 }
bb66f8a1 58 $node = $transform->($node, $children) if $transform;
b2fc39a5 59 return $node;
60}
61
62
63app->start;
64__DATA__
65@@ index.html.ep
66% layout 'default';
67% title 'Welcome';
68Welcome 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" />
bb66f8a1 74<title>Perl Memory Treemap</title>
b2fc39a5 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 -->
bb66f8a1 87<script language="javascript" type="text/javascript" src="sprintf.js"></script>
b2fc39a5 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
b2fc39a5 96<div class="text">
97<h4>
bb66f8a1 98Perl Memory TreeMap
b2fc39a5 99</h4>
bb66f8a1 100 Clicking on a node will show a new TreeMap with the contents of that node.<br /><br />
b2fc39a5 101</div>
102
103<a id="back" href="#" class="theme button white">Go to Parent</a>
b2fc39a5 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>