mirror of
https://github.com/aykhans/AzSuicideDataVisualization.git
synced 2025-07-02 06:22:25 +00:00
first commit
This commit is contained in:
@ -0,0 +1,9 @@
|
||||
%for ref in referents:
|
||||
<div class="referents">
|
||||
<span class="local_name">{{ref.name}}</span>
|
||||
<span class="local_size">{{ref.size}}</span>
|
||||
%if ref.refs:
|
||||
%include('asized_referents', referents=ref.refs)
|
||||
%end
|
||||
</div>
|
||||
%end
|
6
.venv/Lib/site-packages/pympler/templates/footer.tpl
Normal file
6
.venv/Lib/site-packages/pympler/templates/footer.tpl
Normal file
@ -0,0 +1,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
33
.venv/Lib/site-packages/pympler/templates/garbage.tpl
Normal file
33
.venv/Lib/site-packages/pympler/templates/garbage.tpl
Normal file
@ -0,0 +1,33 @@
|
||||
%include('header', category='Garbage', title='Garbage')
|
||||
|
||||
<h1>Garbage - Cycle {{index}}</h1>
|
||||
<table class="tdata" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>id</th>
|
||||
<th class="num">size</th>
|
||||
<th>type</th>
|
||||
<th>representation</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%for o in objects:
|
||||
<tr>
|
||||
<td>{{'0x%08x' % o.id}}</td>
|
||||
<td class="num">{{o.size}}</td>
|
||||
<td>{{o.type}}</td>
|
||||
<td>{{o.str}}</td>
|
||||
</tr>
|
||||
%end
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Reference graph</h2>
|
||||
|
||||
<img src="/garbage/graph/{{index}}"/>
|
||||
|
||||
<h2>Reduced reference graph (cycles only)</h2>
|
||||
|
||||
<img src="/garbage/graph/{{index}}?reduce=1"/>
|
||||
|
||||
%include('footer')
|
41
.venv/Lib/site-packages/pympler/templates/garbage_index.tpl
Normal file
41
.venv/Lib/site-packages/pympler/templates/garbage_index.tpl
Normal file
@ -0,0 +1,41 @@
|
||||
%include('header', category='Garbage', title='Garbage')
|
||||
<h1>Garbage - Overview</h1>
|
||||
|
||||
<p>This page gives an overview of all objects that would have been
|
||||
deleted if those weren't holding circular references to each other
|
||||
(e.g. in a doubly linked list).</p>
|
||||
|
||||
%if len(graphs):
|
||||
<p>Click on the reference graph titles below to show the objects
|
||||
contained in the respective cycle. If you have <a
|
||||
href="http://www.graphviz.org">graphviz</a> installed, you will
|
||||
also see a visualisation of the reference cycle.</p>
|
||||
|
||||
<p>{{len(graphs)}} reference cycles:</p>
|
||||
|
||||
<table class="tdata">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Reference graph</th>
|
||||
<th># objects</th>
|
||||
<th># cycle objects</th>
|
||||
<th>Total size</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%for graph in graphs:
|
||||
<tr>
|
||||
<td><a href="/garbage/{{graph.index}}">Cycle {{graph.index}}</a></td>
|
||||
<td class="num">{{len(graph.metadata)}}</td>
|
||||
<td class="num">{{graph.num_in_cycles}}</td>
|
||||
<td class="num">{{graph.total_size}}</td>
|
||||
</tr>
|
||||
%end
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
%else:
|
||||
<p>No reference cycles detected.</p>
|
||||
%end
|
||||
|
||||
%include('footer')
|
36
.venv/Lib/site-packages/pympler/templates/header.tpl
Normal file
36
.venv/Lib/site-packages/pympler/templates/header.tpl
Normal file
@ -0,0 +1,36 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Pympler - {{title}}</title>
|
||||
<link rel="stylesheet" type="text/css" href="/static/style.css">
|
||||
<script src="http://code.jquery.com/jquery-1.10.1.min.js" type="text/javascript"></script>
|
||||
</head>
|
||||
|
||||
%navbar = [
|
||||
% ("overview", "/", ""),
|
||||
% ("|", "", ""),
|
||||
% ("process", "/process", ""),
|
||||
% ("|", "", ""),
|
||||
% ("tracked objects", "/tracker", ""),
|
||||
% ("|", "", ""),
|
||||
% ("garbage", "/garbage", ""),
|
||||
% ("help", "/help", "right"),]
|
||||
|
||||
<body>
|
||||
<div class="related">
|
||||
<ul>
|
||||
%for link, href, cls in navbar:
|
||||
<li class="{{cls}}">
|
||||
%if bool(href):
|
||||
<a href="{{href}}"><span>{{link}}</span></a>
|
||||
%else:
|
||||
<span>{{link}}</span>
|
||||
%end
|
||||
</li>
|
||||
%end
|
||||
</ul>
|
||||
</div>
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
26
.venv/Lib/site-packages/pympler/templates/index.tpl
Normal file
26
.venv/Lib/site-packages/pympler/templates/index.tpl
Normal file
@ -0,0 +1,26 @@
|
||||
%include('header', category='Overview', title='Overview')
|
||||
|
||||
%from pympler.util.stringutils import pp
|
||||
|
||||
<h1>Python application memory profile</h1>
|
||||
|
||||
<h2>Process overview</h2>
|
||||
|
||||
<table class="tdata">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Virtual size:</th>
|
||||
<td class="num">{{pp(processinfo.vsz)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Physical memory size:</th>
|
||||
<td class="num">{{pp(processinfo.rss)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Major pagefaults:</th>
|
||||
<td class="num">{{processinfo.pagefaults}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
%include('footer')
|
8
.venv/Lib/site-packages/pympler/templates/jquery.flot.min.js
vendored
Normal file
8
.venv/Lib/site-packages/pympler/templates/jquery.flot.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
.venv/Lib/site-packages/pympler/templates/jquery.flot.stack.min.js
vendored
Normal file
7
.venv/Lib/site-packages/pympler/templates/jquery.flot.stack.min.js
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
/* Javascript plotting library for jQuery, version 0.8.3.
|
||||
|
||||
Copyright (c) 2007-2014 IOLA and Ole Laursen.
|
||||
Licensed under the MIT license.
|
||||
|
||||
*/
|
||||
(function($){var options={series:{stack:null}};function init(plot){function findMatchingSeries(s,allseries){var res=null;for(var i=0;i<allseries.length;++i){if(s==allseries[i])break;if(allseries[i].stack==s.stack)res=allseries[i]}return res}function stackData(plot,s,datapoints){if(s.stack==null||s.stack===false)return;var other=findMatchingSeries(s,plot.getData());if(!other)return;var ps=datapoints.pointsize,points=datapoints.points,otherps=other.datapoints.pointsize,otherpoints=other.datapoints.points,newpoints=[],px,py,intery,qx,qy,bottom,withlines=s.lines.show,horizontal=s.bars.horizontal,withbottom=ps>2&&(horizontal?datapoints.format[2].x:datapoints.format[2].y),withsteps=withlines&&s.lines.steps,fromgap=true,keyOffset=horizontal?1:0,accumulateOffset=horizontal?0:1,i=0,j=0,l,m;while(true){if(i>=points.length)break;l=newpoints.length;if(points[i]==null){for(m=0;m<ps;++m)newpoints.push(points[i+m]);i+=ps}else if(j>=otherpoints.length){if(!withlines){for(m=0;m<ps;++m)newpoints.push(points[i+m])}i+=ps}else if(otherpoints[j]==null){for(m=0;m<ps;++m)newpoints.push(null);fromgap=true;j+=otherps}else{px=points[i+keyOffset];py=points[i+accumulateOffset];qx=otherpoints[j+keyOffset];qy=otherpoints[j+accumulateOffset];bottom=0;if(px==qx){for(m=0;m<ps;++m)newpoints.push(points[i+m]);newpoints[l+accumulateOffset]+=qy;bottom=qy;i+=ps;j+=otherps}else if(px>qx){if(withlines&&i>0&&points[i-ps]!=null){intery=py+(points[i-ps+accumulateOffset]-py)*(qx-px)/(points[i-ps+keyOffset]-px);newpoints.push(qx);newpoints.push(intery+qy);for(m=2;m<ps;++m)newpoints.push(points[i+m]);bottom=qy}j+=otherps}else{if(fromgap&&withlines){i+=ps;continue}for(m=0;m<ps;++m)newpoints.push(points[i+m]);if(withlines&&j>0&&otherpoints[j-otherps]!=null)bottom=qy+(otherpoints[j-otherps+accumulateOffset]-qy)*(px-qx)/(otherpoints[j-otherps+keyOffset]-qx);newpoints[l+accumulateOffset]+=bottom;i+=ps}fromgap=false;if(l!=newpoints.length&&withbottom)newpoints[l+2]+=bottom}if(withsteps&&l!=newpoints.length&&l>0&&newpoints[l]!=null&&newpoints[l]!=newpoints[l-ps]&&newpoints[l+1]!=newpoints[l-ps+1]){for(m=0;m<ps;++m)newpoints[l+ps+m]=newpoints[l+m];newpoints[l+1]=newpoints[l-ps+1]}}datapoints.points=newpoints}plot.hooks.processDatapoints.push(stackData)}$.plot.plugins.push({init:init,options:options,name:"stack",version:"1.2"})})(jQuery);
|
12
.venv/Lib/site-packages/pympler/templates/jquery.flot.tooltip.min.js
vendored
Normal file
12
.venv/Lib/site-packages/pympler/templates/jquery.flot.tooltip.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
58
.venv/Lib/site-packages/pympler/templates/memory_panel.html
Normal file
58
.venv/Lib/site-packages/pympler/templates/memory_panel.html
Normal file
@ -0,0 +1,58 @@
|
||||
{% load i18n %}{% load static %}
|
||||
<script type="text/javascript" src="{% static 'jquery.sparkline.min.js' %}"></script>
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width:20%"/>
|
||||
<col/>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans "Resource" %}</th>
|
||||
<th>{% trans "Value" %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for key, value in rows %}
|
||||
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
|
||||
<td>{{ key|escape }}</td>
|
||||
<td>{{ value|escape }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width:20%"/>
|
||||
<col/>
|
||||
<col/>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans "Class" %}</th>
|
||||
<th>{% trans "Number of instances" %} <a class="show_sparkline" href="#">Show sparklines</a></th>
|
||||
<th>{% trans "Total size" %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for cls, history, size in classes %}
|
||||
<tr class="{% cycle 'djDebugOdd' 'djDebugEven' %}">
|
||||
<td>{{ cls|escape }}</td>
|
||||
<td id="{{ cls|escape|cut:'.' }}_history" values="{{ history|join:',' }}">
|
||||
{{ history|safeseq|join:', ' }}
|
||||
</td>
|
||||
<td>{{ size|escape }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<script type="text/javascript">
|
||||
(function ($) {
|
||||
window.jQuery = $; // for jquery.sparkline
|
||||
$("#MemoryPanel .show_sparkline").on('click', function() {
|
||||
{% for cls, _, _ in classes %}
|
||||
$("#{{ cls|escape|cut:'.' }}_history").sparkline('html', {width: '200px'});
|
||||
{% endfor %}
|
||||
});
|
||||
})(jQuery || djdt.jQuery);
|
||||
</script>
|
89
.venv/Lib/site-packages/pympler/templates/process.tpl
Normal file
89
.venv/Lib/site-packages/pympler/templates/process.tpl
Normal file
@ -0,0 +1,89 @@
|
||||
%include('header', category='Process', title='Process Information')
|
||||
%from pympler.util.stringutils import pp
|
||||
|
||||
<h1>Process information</h1>
|
||||
|
||||
<table class="tdata">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Virtual size:</th>
|
||||
<td class="num">{{pp(info.vsz)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Physical memory size:</th>
|
||||
<td class="num">{{pp(info.rss)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Major pagefaults:</th>
|
||||
<td class="num">{{info.pagefaults}}</td>
|
||||
</tr>
|
||||
%for key, value in info.os_specific:
|
||||
<tr>
|
||||
<th>{{key}}:</th>
|
||||
<td class="num">{{value}}</td>
|
||||
</tr>
|
||||
%end
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Thread information</h2>
|
||||
|
||||
<table class="tdata">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Name</th>
|
||||
<th>Daemon</th>
|
||||
</tr>
|
||||
%for tinfo in threads:
|
||||
<tr>
|
||||
<td>{{tinfo.ident}}</td>
|
||||
<td>{{tinfo.name}}</td>
|
||||
<td>{{tinfo.daemon}}</td>
|
||||
</tr>
|
||||
%end
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Thread stacks</h2>
|
||||
|
||||
<div class="stacks">
|
||||
%for tinfo in threads:
|
||||
<div class="stacktrace" id="{{tinfo.ident}}">
|
||||
<a class="show_traceback" href="#">Traceback for thread {{tinfo.name}}</a>
|
||||
</div>
|
||||
%end
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(".show_traceback").click(function() {
|
||||
var tid = $(this).parent().attr("id");
|
||||
$.get("/traceback/"+tid, function(data) {
|
||||
$("#"+tid).replaceWith(data);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
$(".stacks").delegate(".expand_local", "click", function() {
|
||||
var oid = $(this).attr("id");
|
||||
$.get("/objects/"+oid, function(data) {
|
||||
$("#"+oid).replaceWith(data);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
$(".stacks").delegate(".expand_ref", "click", function() {
|
||||
var node_id = $(this).attr("id");
|
||||
var oid = node_id.split("_")[0];
|
||||
$.get("/objects/"+oid, function(data) {
|
||||
$("#children_"+node_id).append(data);
|
||||
});
|
||||
$(this).removeClass("expand_ref").addClass("toggle_ref");
|
||||
return false;
|
||||
});
|
||||
$(".stacks").delegate(".toggle_ref", "click", function() {
|
||||
var node_id = $(this).attr("id");
|
||||
$("#children_"+node_id).toggle();
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
|
||||
%include('footer')
|
13
.venv/Lib/site-packages/pympler/templates/referents.tpl
Normal file
13
.venv/Lib/site-packages/pympler/templates/referents.tpl
Normal file
@ -0,0 +1,13 @@
|
||||
%from random import randint
|
||||
%for name, (ref, type_name, obj_repr, size) in referents.items():
|
||||
%ref = "%s_%s" % (ref, randint(0, 65535))
|
||||
<div class="referents">
|
||||
<a class="expand_ref" id="{{ref}}" href="#">
|
||||
<span class="local_name">{{name}}</span>
|
||||
<span class="local_type">{{type_name}}</span>
|
||||
<span class="local_size">{{size}}</span>
|
||||
<span class="local_value">{{obj_repr}}</span>
|
||||
</a>
|
||||
<span id="children_{{ref}}"/>
|
||||
</div>
|
||||
%end
|
30
.venv/Lib/site-packages/pympler/templates/stacktrace.tpl
Normal file
30
.venv/Lib/site-packages/pympler/templates/stacktrace.tpl
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="stacktrace">
|
||||
<strong>Stacktrace for thread {{threadid}}</strong>
|
||||
%for frame in stack:
|
||||
<div class="stackframe">
|
||||
<span class="filename">{{frame[1]}}</span>
|
||||
<span class="lineno">{{frame[2]}}</span>
|
||||
<span class="function">{{frame[3]}}</span>
|
||||
%if frame[4]:
|
||||
%context = frame[4]
|
||||
<div class="context">
|
||||
%highlight = len(context) / 2
|
||||
%for idx, line in enumerate(frame[4]):
|
||||
%hl = (idx == highlight) and "highlighted" or ""
|
||||
%if line.strip():
|
||||
<div class="{{hl}}" style="padding-left:{{len(line)-len(line.lstrip())}}em" width="100%">
|
||||
{{line.strip()}}
|
||||
</div>
|
||||
%end
|
||||
%end
|
||||
</div>
|
||||
%end
|
||||
<div class="local">
|
||||
<a class="expand_local" id="{{frame[0]}}" href="#">Show locals</a>
|
||||
</div>
|
||||
</div>
|
||||
%end
|
||||
%if not stack:
|
||||
Cannot retrieve stacktrace for thread {{threadid}}.
|
||||
%end
|
||||
</div>
|
992
.venv/Lib/site-packages/pympler/templates/style.css
Normal file
992
.venv/Lib/site-packages/pympler/templates/style.css
Normal file
@ -0,0 +1,992 @@
|
||||
/**
|
||||
* Sphinx Doc Design
|
||||
*/
|
||||
|
||||
body {
|
||||
font-family: "Verdana", "Tahoma", Sans-Serif;
|
||||
font-size: 90%;
|
||||
background-color: #11303d;
|
||||
color: #000;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* :::: LAYOUT :::: */
|
||||
|
||||
div.document {
|
||||
background-color: #158906;
|
||||
}
|
||||
|
||||
div.documentwrapper {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.bodywrapper {
|
||||
margin: 0 0 0 0;
|
||||
}
|
||||
|
||||
div.body {
|
||||
background-color: white;
|
||||
padding: 0 20px 16px 20px;
|
||||
}
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 10px;
|
||||
}
|
||||
|
||||
|
||||
div.sphinxsidebar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
float: right;
|
||||
width: 230px;
|
||||
margin-left: -100%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
padding: 9px 0 9px 0;
|
||||
text-align: center;
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
div.footer a {
|
||||
color: #fff;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.related {
|
||||
background-color: #5A3D31;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.related h3 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.related ul {
|
||||
margin: 0;
|
||||
padding: 0 0 0 10px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.related li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.related li.right {
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
div.related a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* ::: TOC :::: */
|
||||
div.sphinxsidebar h3 {
|
||||
color: white;
|
||||
font-size: 1.4em;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar h4 {
|
||||
color: white;
|
||||
font-size: 1.3em;
|
||||
font-weight: normal;
|
||||
margin: 5px 0 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar p {
|
||||
color: white;
|
||||
}
|
||||
|
||||
div.sphinxsidebar p.topless {
|
||||
margin: 5px 10px 10px 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
margin: 10px;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul,
|
||||
div.sphinxsidebar ul.want-points {
|
||||
margin-left: 20px;
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar a {
|
||||
color: #A4FF98;
|
||||
}
|
||||
|
||||
div.sphinxsidebar form {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input {
|
||||
border: 1px solid #A4FF98;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* :::: MODULE CLOUD :::: */
|
||||
div.modulecloud {
|
||||
margin: -5px 10px 5px 10px;
|
||||
padding: 10px;
|
||||
line-height: 160%;
|
||||
border: 1px solid #cbe7e5;
|
||||
background-color: #f2fbfd;
|
||||
}
|
||||
|
||||
div.modulecloud a {
|
||||
padding: 0 5px 0 5px;
|
||||
}
|
||||
|
||||
/* :::: SEARCH :::: */
|
||||
ul.search {
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.search li div.context {
|
||||
color: #888;
|
||||
margin: 2px 0 0 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.keywordmatches li.goodmatch a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* :::: COMMON FORM STYLES :::: */
|
||||
|
||||
div.actions {
|
||||
padding: 5px 10px 5px 10px;
|
||||
border-top: 1px solid #cbe7e5;
|
||||
border-bottom: 1px solid #cbe7e5;
|
||||
background-color: #e0f6f4;
|
||||
}
|
||||
|
||||
form dl {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
form dt {
|
||||
clear: both;
|
||||
float: left;
|
||||
min-width: 110px;
|
||||
margin-right: 10px;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
input#homepage {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.error {
|
||||
margin: 5px 20px 0 0;
|
||||
padding: 5px;
|
||||
border: 1px solid #d00;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* :::: INLINE COMMENTS :::: */
|
||||
|
||||
div.inlinecomments {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
}
|
||||
|
||||
div.inlinecomments a.bubble {
|
||||
display: block;
|
||||
float: right;
|
||||
background-image: url(style/comment.png);
|
||||
background-repeat: no-repeat;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
text-align: center;
|
||||
padding-top: 3px;
|
||||
font-size: 0.9em;
|
||||
line-height: 14px;
|
||||
font-weight: bold;
|
||||
color: black;
|
||||
}
|
||||
|
||||
div.inlinecomments a.bubble span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.inlinecomments a.emptybubble {
|
||||
background-image: url(style/nocomment.png);
|
||||
}
|
||||
|
||||
div.inlinecomments a.bubble:hover {
|
||||
background-image: url(style/hovercomment.png);
|
||||
text-decoration: none;
|
||||
color: #3ca0a4;
|
||||
}
|
||||
|
||||
div.inlinecomments div.comments {
|
||||
float: right;
|
||||
margin: 25px 5px 0 0;
|
||||
max-width: 50em;
|
||||
min-width: 30em;
|
||||
border: 1px solid #2eabb0;
|
||||
background-color: #f2fbfd;
|
||||
z-index: 150;
|
||||
}
|
||||
|
||||
div#comments {
|
||||
border: 1px solid #2eabb0;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
div#comments div.nocomments {
|
||||
padding: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.inlinecomments div.comments h3,
|
||||
div#comments h3 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #2eabb0;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
div.inlinecomments div.comments div.actions {
|
||||
padding: 4px;
|
||||
margin: 0;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
div#comments div.comment {
|
||||
margin: 10px;
|
||||
border: 1px solid #2eabb0;
|
||||
}
|
||||
|
||||
div.inlinecomments div.comment h4,
|
||||
div.commentwindow div.comment h4,
|
||||
div#comments div.comment h4 {
|
||||
margin: 10px 0 0 0;
|
||||
background-color: #2eabb0;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 1px 4px 1px 4px;
|
||||
}
|
||||
|
||||
div#comments div.comment h4 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
div#comments div.comment h4 a {
|
||||
color: #d5f4f4;
|
||||
}
|
||||
|
||||
div.inlinecomments div.comment div.text,
|
||||
div.commentwindow div.comment div.text,
|
||||
div#comments div.comment div.text {
|
||||
margin: -5px 0 -5px 0;
|
||||
padding: 0 10px 0 10px;
|
||||
}
|
||||
|
||||
div.inlinecomments div.comment div.meta,
|
||||
div.commentwindow div.comment div.meta,
|
||||
div#comments div.comment div.meta {
|
||||
text-align: right;
|
||||
padding: 2px 10px 2px 0;
|
||||
font-size: 95%;
|
||||
color: #538893;
|
||||
border-top: 1px solid #cbe7e5;
|
||||
background-color: #e0f6f4;
|
||||
}
|
||||
|
||||
div.commentwindow {
|
||||
position: absolute;
|
||||
width: 500px;
|
||||
border: 1px solid #cbe7e5;
|
||||
background-color: #f2fbfd;
|
||||
display: none;
|
||||
z-index: 130;
|
||||
}
|
||||
|
||||
div.commentwindow h3 {
|
||||
margin: 0;
|
||||
background-color: #2eabb0;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 5px;
|
||||
font-size: 1.5em;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.commentwindow div.actions {
|
||||
margin: 10px -10px 0 -10px;
|
||||
padding: 4px 10px 4px 10px;
|
||||
color: #538893;
|
||||
}
|
||||
|
||||
div.commentwindow div.actions input {
|
||||
border: 1px solid #2eabb0;
|
||||
background-color: white;
|
||||
color: #135355;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.commentwindow div.form {
|
||||
padding: 0 10px 0 10px;
|
||||
}
|
||||
|
||||
div.commentwindow div.form input,
|
||||
div.commentwindow div.form textarea {
|
||||
border: 1px solid #3c9ea2;
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
div.commentwindow div.error {
|
||||
margin: 10px 5px 10px 5px;
|
||||
background-color: #fbe5dc;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.commentwindow div.form textarea {
|
||||
width: 99%;
|
||||
}
|
||||
|
||||
div.commentwindow div.preview {
|
||||
margin: 10px 0 10px 0;
|
||||
background-color: #70d0d4;
|
||||
padding: 0 1px 1px 25px;
|
||||
}
|
||||
|
||||
div.commentwindow div.preview h4 {
|
||||
margin: 0 0 -5px -20px;
|
||||
padding: 4px 0 0 4px;
|
||||
color: white;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
div.commentwindow div.preview div.comment {
|
||||
background-color: #f2fbfd;
|
||||
}
|
||||
|
||||
div.commentwindow div.preview div.comment h4 {
|
||||
margin: 10px 0 0 0!important;
|
||||
padding: 1px 4px 1px 4px!important;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
/* :::: SUGGEST CHANGES :::: */
|
||||
div#suggest-changes-box input, div#suggest-changes-box textarea {
|
||||
border: 1px solid #ccc;
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
div#suggest-changes-box textarea {
|
||||
width: 99%;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
|
||||
/* :::: PREVIEW :::: */
|
||||
div.preview {
|
||||
background-image: url(style/preview.png);
|
||||
padding: 0 20px 20px 20px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
|
||||
/* :::: INDEX PAGE :::: */
|
||||
|
||||
table.contentstable {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
table.contentstable p.biglink {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.biglink {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
span.linkdescr {
|
||||
font-style: italic;
|
||||
padding-top: 5px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* :::: INDEX STYLES :::: */
|
||||
|
||||
table.indextable td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.indextable dl, table.indextable dd {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
table.indextable tr.pcap {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
table.indextable tr.cap {
|
||||
margin-top: 10px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
img.toggler {
|
||||
margin-right: 3px;
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
form.pfform {
|
||||
margin: 10px 0 20px 0;
|
||||
}
|
||||
|
||||
/* :::: GLOBAL STYLES :::: */
|
||||
|
||||
.docwarning {
|
||||
background-color: #ffe4e4;
|
||||
padding: 10px;
|
||||
margin: 0 -20px 0 -20px;
|
||||
border-bottom: 1px solid #f66;
|
||||
}
|
||||
|
||||
p.subhead {
|
||||
font-weight: bold;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #355F7C;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.body h1,
|
||||
div.body h2,
|
||||
div.body h3,
|
||||
div.body h4,
|
||||
div.body h5,
|
||||
div.body h6 {
|
||||
font-weight: bold;
|
||||
margin: 16px -20px 16px -20px;
|
||||
padding: 3px 0 3px 10px;
|
||||
}
|
||||
|
||||
div.body h1 {
|
||||
margin-top: 0;
|
||||
font-size: 140%;
|
||||
background-color: #E5EDB8;
|
||||
color: #000;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
div.body h2 {
|
||||
font-size: 120%;
|
||||
background-color: #E5EDB8;
|
||||
color: #000;
|
||||
border-top: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
div.body h3 {
|
||||
font-size: 120%;
|
||||
border-bottom: 1px dashed #ccc;
|
||||
}
|
||||
div.body h4 { font-size: 120%; }
|
||||
div.body h5 { font-size: 110%; }
|
||||
div.body h6 { font-size: 100%; }
|
||||
|
||||
a.headerlink {
|
||||
color: #c60f0f;
|
||||
font-size: 0.8em;
|
||||
padding: 0 4px 0 4px;
|
||||
text-decoration: none;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
h4:hover > a.headerlink,
|
||||
h5:hover > a.headerlink,
|
||||
h6:hover > a.headerlink,
|
||||
dt:hover > a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
a.headerlink:hover {
|
||||
background-color: #c60f0f;
|
||||
color: white;
|
||||
}
|
||||
|
||||
div.body p, div.body dd, div.body li {
|
||||
line-height: 100%;
|
||||
}
|
||||
|
||||
div.body p.caption {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
div.body td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.fakelist {
|
||||
list-style: none;
|
||||
margin: 10px 0 10px 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
/* "Footnotes" heading */
|
||||
p.rubric {
|
||||
margin-top: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* "Topics" */
|
||||
|
||||
div.topic {
|
||||
background-color: #eee;
|
||||
border: 1px solid #ccc;
|
||||
padding: 0 7px 0 7px;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.topic-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* Admonitions */
|
||||
|
||||
div.admonition {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
div.admonition dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.admonition dl {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.admonition p {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.seealso {
|
||||
background-color: #ffc;
|
||||
border: 1px solid #ff6;
|
||||
}
|
||||
|
||||
div.warning {
|
||||
background-color: #ffe4e4;
|
||||
border: 1px solid #f66;
|
||||
}
|
||||
|
||||
div.note {
|
||||
background-color: #eee;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
p.admonition-title:after {
|
||||
content: ":";
|
||||
}
|
||||
|
||||
div.body p.centered {
|
||||
text-align: center;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
table.docutils {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
table.docutils td, table.docutils th {
|
||||
padding: 1px 8px 1px 0;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
|
||||
table.field-list td, table.field-list th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
table.footnote td, table.footnote th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
margin: 0;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.field-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-bottom: 1px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
dd p {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
dd ul, dd table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.refcount {
|
||||
color: #060;
|
||||
}
|
||||
|
||||
dt:target,
|
||||
.highlight {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
dl.glossary dt {
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 5px;
|
||||
background-color: #efc;
|
||||
color: #333;
|
||||
border: 1px solid #ac9;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
padding: 5px 0px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
table.highlighttable {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
table.highlighttable td {
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
}
|
||||
|
||||
tt {
|
||||
background-color: #ecf0f3;
|
||||
padding: 0 1px 0 1px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
tt.descname {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
tt.descclassname {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
tt.xref, a tt {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.footnote:target { background-color: #ffa }
|
||||
|
||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.optional {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.versionmodified {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
form.comment {
|
||||
margin: 0;
|
||||
padding: 10px 30px 10px 30px;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
form.comment h3 {
|
||||
background-color: #326591;
|
||||
color: white;
|
||||
margin: -10px -30px 10px -30px;
|
||||
padding: 5px;
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
form.comment input,
|
||||
form.comment textarea {
|
||||
border: 1px solid #ccc;
|
||||
padding: 2px;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
form.comment input[type="text"] {
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
form.comment textarea {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.system-message {
|
||||
background-color: #fda;
|
||||
padding: 5px;
|
||||
border: 3px solid red;
|
||||
}
|
||||
|
||||
/* :::: PRINT :::: */
|
||||
@media print {
|
||||
div.document,
|
||||
div.documentwrapper,
|
||||
div.bodywrapper {
|
||||
margin: 0;
|
||||
width : 100%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar,
|
||||
div.related,
|
||||
div.footer,
|
||||
div#comments div.new-comment-box,
|
||||
#top-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* :::: OWN :::: */
|
||||
|
||||
.section ul {
|
||||
margin: 0.2em;
|
||||
}
|
||||
|
||||
/* Data tables */
|
||||
|
||||
table.tdata
|
||||
{
|
||||
font-size: 12px;
|
||||
background: #fff;
|
||||
border-collapse: collapse;
|
||||
text-align: left;
|
||||
}
|
||||
table.tdata th
|
||||
{
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
padding: 8px 8px;
|
||||
background-color: #E5EDB8;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
table.tdata tr:first-child th:first-child
|
||||
{
|
||||
border-top-left-radius: 8px;
|
||||
}
|
||||
|
||||
table.tdata tr:first-child th:last-child
|
||||
{
|
||||
border-top-right-radius: 8px;
|
||||
}
|
||||
|
||||
table.tdata td
|
||||
{
|
||||
border-bottom: 1px solid #ccc;
|
||||
padding: 8px 8px;
|
||||
}
|
||||
|
||||
table.tdata tbody tr:hover td
|
||||
{
|
||||
color: #060;
|
||||
}
|
||||
|
||||
table th.num,
|
||||
table td.num
|
||||
{
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
div.stacktrace
|
||||
{
|
||||
-moz-border-radius: 6px;
|
||||
-webkit-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid #999;
|
||||
padding: 6px;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
div.stacktrace div.stackframe
|
||||
{
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
div.stackframe .context,
|
||||
div.stackframe .local
|
||||
{
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
padding: 4px;
|
||||
margin-left: 10px;
|
||||
margin-top: 4px;
|
||||
background: #f2f2f2;
|
||||
}
|
||||
|
||||
div.stackframe div.context div.highlighted
|
||||
{
|
||||
background: #E5EDB8;
|
||||
}
|
||||
|
||||
div.stackframe span.lineno,
|
||||
div.stackframe span.filename
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
div.stackframe span.function
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.stackframe span.function,
|
||||
div.stackframe div.context
|
||||
{
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
div.local,
|
||||
div.referents
|
||||
{
|
||||
margin-top: 4px;
|
||||
margin-bottom: 4px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
div.stackframe div.local
|
||||
{
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
div.referents span.local_name,
|
||||
div.referents span.local_size
|
||||
{
|
||||
font-family: monospace;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
div.referents span.local_value,
|
||||
div.referents span.local_size,
|
||||
div.referents span.local_type
|
||||
{
|
||||
font-family: monospace;
|
||||
margin-left: 1em;
|
||||
}
|
||||
div.referents span.local_type
|
||||
{
|
||||
color: #999;
|
||||
}
|
||||
div.referents span.local_size
|
||||
{
|
||||
color: #03F;
|
||||
}
|
||||
div.local div.referents a
|
||||
{
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
div.local div.referents a:hover
|
||||
{
|
||||
background-color: #EEE;
|
||||
color: #090;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
127
.venv/Lib/site-packages/pympler/templates/tracker.tpl
Normal file
127
.venv/Lib/site-packages/pympler/templates/tracker.tpl
Normal file
@ -0,0 +1,127 @@
|
||||
%include('header', category='Tracker', title='Tracked objects')
|
||||
|
||||
%from pympler.util.stringutils import pp, pp_timestamp
|
||||
%from json import dumps
|
||||
|
||||
<h1>Tracked objects</h1>
|
||||
|
||||
%if snapshots:
|
||||
|
||||
<h2>Memory distribution over time</h2>
|
||||
|
||||
<div id="memory_chart_flot" style="width:100%; height: 400px"></div>
|
||||
|
||||
<script type="text/javascript" src="/static/jquery.flot.min.js"></script>
|
||||
<script type="text/javascript" src="/static/jquery.flot.stack.min.js"></script>
|
||||
<script type="text/javascript" src="/static/jquery.flot.tooltip.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
function format_size(value) {
|
||||
var val = Math.round(value / (1000*1000));
|
||||
return val.toLocaleString() + ' MB';
|
||||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
var timeseries = {{!timeseries}};
|
||||
var options = {
|
||||
xaxis: {
|
||||
show: false,
|
||||
},
|
||||
yaxis: {
|
||||
tickFormatter: format_size
|
||||
},
|
||||
grid: {
|
||||
hoverable: true
|
||||
},
|
||||
tooltip: true,
|
||||
tooltipOpts: {
|
||||
content: "%s | %y"
|
||||
},
|
||||
legend: {
|
||||
position: "nw"
|
||||
},
|
||||
series: {
|
||||
bars: {
|
||||
show: true,
|
||||
barWidth: .9,
|
||||
fillColor: { colors: [ { opacity: 0.9 }, { opacity: 0.9 } ] },
|
||||
align: "center"
|
||||
},
|
||||
stack: true
|
||||
}
|
||||
};
|
||||
$.plot($('#memory_chart_flot'), timeseries, options);
|
||||
});
|
||||
</script>
|
||||
|
||||
<h2>Snapshots statistics</h2>
|
||||
|
||||
%for sn in snapshots:
|
||||
<h3>{{sn.desc or 'Untitled'}} snapshot at {{pp_timestamp(sn.timestamp)}}</h3>
|
||||
<table class="tdata">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="20%">Class</th>
|
||||
<th width="20%" class="num">Instance #</th>
|
||||
<th width="20%" class="num">Total</th>
|
||||
<th width="20%" class="num">Average size</th>
|
||||
<th width="20%" class="num">Share</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%cnames = list(sn.classes.keys())
|
||||
%cnames.sort()
|
||||
%for cn in cnames:
|
||||
%data = sn.classes[cn]
|
||||
<tr>
|
||||
<td><a href="/tracker/class/{{cn}}">{{cn}}</a></td>
|
||||
<td class="num">{{data['active']}}</td>
|
||||
<td class="num">{{pp(data['sum'])}}</td>
|
||||
<td class="num">{{pp(data['avg'])}}</td>
|
||||
<td class="num">{{'%3.2f%%' % data['pct']}}</td>
|
||||
</tr>
|
||||
%end
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
%if sn.system_total.available:
|
||||
<h4>Process memory</h4>
|
||||
|
||||
<table class="tdata">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Type</th>
|
||||
<th class="num">Size</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Virtual memory size</td>
|
||||
<td class="num">{{pp(sn.system_total.vsz)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Resident set size</td>
|
||||
<td class="num">{{pp(sn.system_total.rss)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pagefaults</td>
|
||||
<td class="num">{{sn.system_total.pagefaults}}</td>
|
||||
</tr>
|
||||
%for key, value in sn.system_total.os_specific:
|
||||
<tr>
|
||||
<td>{{key}}</td>
|
||||
<td class="num">{{value}}</td>
|
||||
</tr>
|
||||
%end
|
||||
</tbody>
|
||||
</table>
|
||||
%end
|
||||
%end
|
||||
|
||||
%else:
|
||||
|
||||
<p>No objects are currently tracked. Consult the Pympler documentation for
|
||||
instructions of how to use the classtracker module.</p>
|
||||
|
||||
%end
|
||||
|
||||
%include('footer')
|
79
.venv/Lib/site-packages/pympler/templates/tracker_class.tpl
Normal file
79
.venv/Lib/site-packages/pympler/templates/tracker_class.tpl
Normal file
@ -0,0 +1,79 @@
|
||||
%include('header', category='Tracker', title=clsname)
|
||||
|
||||
%from pympler.util.stringutils import pp, pp_timestamp
|
||||
|
||||
<h1>{{clsname}}</h1>
|
||||
|
||||
%sizes = [tobj.get_max_size() for tobj in stats.index[clsname]]
|
||||
|
||||
<p>{{len(stats.index[clsname])}} instances of {{clsname}} were registered. The
|
||||
average size is {{pp(sum(sizes)/len(sizes))}}, the minimal size is
|
||||
{{pp(min(sizes))}}, the maximum size is {{pp(max(sizes))}}.</p>
|
||||
|
||||
<h2>Coalesced Referents per Snapshot</h2>
|
||||
|
||||
%for snapshot in stats.snapshots:
|
||||
%if clsname in snapshot.classes:
|
||||
%merged = snapshot.classes[clsname]['merged']
|
||||
<h3>Snapshot: {{snapshot.desc}}</h3>
|
||||
<p>{{pp(merged.size)}} occupied by instances of class {{clsname}}</p>
|
||||
%if merged.refs:
|
||||
%include('asized_referents', referents=merged.refs)
|
||||
%else:
|
||||
<p>No per-referent sizes recorded.</p>
|
||||
%end
|
||||
%end
|
||||
%end
|
||||
|
||||
<h2>Instances</h2>
|
||||
|
||||
%for tobj in stats.index[clsname]:
|
||||
<table class="tdata" width="100%" rules="rows">
|
||||
<tr>
|
||||
<th width="140px">Instance</th>
|
||||
<td>{{tobj.name}} at {{'0x%08x' % tobj.id}}</td>
|
||||
</tr>
|
||||
%if tobj.repr:
|
||||
<tr>
|
||||
<th>Representation</th>
|
||||
<td>{{tobj.repr}} </td>
|
||||
</tr>
|
||||
%end
|
||||
<tr>
|
||||
<th>Lifetime</th>
|
||||
<td>{{pp_timestamp(tobj.birth)}} - {{pp_timestamp(tobj.death)}}</td>
|
||||
</tr>
|
||||
%if getattr(tobj, 'trace'):
|
||||
<tr>
|
||||
<th>Instantiation</th>
|
||||
<td>
|
||||
% # <div class="stacktrace">
|
||||
%for frame in tobj.trace:
|
||||
<div class="stackframe">
|
||||
<span class="filename">{{frame[0]}}</span>
|
||||
<span class="lineno">{{frame[1]}}</span>
|
||||
<span class="function">{{frame[2]}}</span>
|
||||
<div class="context">{{frame[3][0].strip()}}</div>
|
||||
</div>
|
||||
%end
|
||||
% # </div>
|
||||
</td>
|
||||
</tr>
|
||||
%end
|
||||
%for (timestamp, size) in tobj.snapshots:
|
||||
<tr>
|
||||
<td>{{pp_timestamp(timestamp)}}</td>
|
||||
%if not size.refs:
|
||||
<td>{{pp(size.size)}}</td>
|
||||
%else:
|
||||
<td>
|
||||
{{pp(size.size)}}
|
||||
%include('asized_referents', referents=size.refs)
|
||||
</td>
|
||||
%end
|
||||
</tr>
|
||||
%end
|
||||
</table>
|
||||
%end
|
||||
|
||||
%include('footer')
|
Reference in New Issue
Block a user