Skip to content

Instantly share code, notes, and snippets.

@pkittenis
Last active August 23, 2017 15:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pkittenis/3ef48fc062902840d749 to your computer and use it in GitHub Desktop.
Save pkittenis/3ef48fc062902840d749 to your computer and use it in GitHub Desktop.
Graphite test client
# Graphite metric generating client
# Copyright (C) 2015- Thomson Reuters
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License only.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""Client for graphite to aid with load testing and sizing graphite installations"""
from gevent import monkey
monkey.patch_socket()
monkey.patch_dns()
import gevent.queue
import logging
import argparse
import datetime
import socket
import gevent.pool
import random
import string
parser = argparse.ArgumentParser()
logger = logging.getLogger(__name__)
def _setup_logger(_logger, level=logging.INFO):
"""Setup default logger"""
_handler = logging.StreamHandler()
log_format = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s - %(message)s')
_handler.setFormatter(log_format)
_logger.addHandler(_handler)
_logger.setLevel(level)
def setup_parser():
parser.add_argument('host', metavar='host',
help="Host to send graphite data to")
parser.add_argument('run_time', metavar='run_time',
help="How long to run test for in seconds")
parser.add_argument('-p', '--no-persistence', dest='persistence', action="store_false",
default=True, help="Turn off connection persistence.\
Use one connection per metric")
parser.add_argument('--port', dest='port',
help="Port to use. Defaults to 2013",
default=2013)
parser.add_argument('-c', '--concurrency', dest='concurrency', default=2,
help="Concurrency to use when sending data. Defaults to 2")
parser.add_argument('-r', '--rampup', dest='rampup', default=0,
help="Rampup time in seconds. Concurrency will increase\
linearly throughout rampup time up to maximum concurrency until rampup time is reached. Defaults to 0 rampup time")
parser.add_argument('-m', '--metrics', dest='metrics', default=1000,
help="Number of metrics to send per connection. Defaults to 1000 messages")
parser.add_argument('-d', '--delay', dest='delay', default=60,
help="Delay/interval between host metrics being sent. Defaults to 60sec")
setup_parser()
def _calculate_interval(rampup, concurrency):
"""Calculate rampup interval and sleep time according
to rampup time and desired concurrency"""
if rampup and rampup > concurrency:
sleep_time = int(round(rampup/float(concurrency)))
interval = 1
elif rampup:
sleep_time = 1
interval = int(round(concurrency/float(rampup)))
else:
return None, None
return sleep_time, interval
def make_metric_series(num_series):
"""Make num_series unique number of metric series names"""
return [''.join(random.choice(string.ascii_lowercase + string.digits) for _ in xrange(24))
for _ in xrange(num_series)]
def send_data_parallel(host, port, run_time,
concurrency=1, rampup=0, metrics=1000, persistent=True,
delay=60):
"""Start sending metrics on host and port for run_time seconds
and given parameters. Once run time has been exceeded, wait for
connections to finish and return"""
start_time = datetime.datetime.now()
sockets_q = gevent.queue.Queue() if persistent else None
sleep_time, interval = _calculate_interval(rampup, concurrency)
series = make_metric_series(metrics)
logger.info("Starting to send data with concurrency %s, run time %s, rampup %s",
concurrency, run_time, rampup,)
pool = do_rampup(host, port, rampup, sleep_time, interval,
concurrency, sockets_q=sockets_q, persistent=persistent,
delay=delay, metrics=metrics)
if sockets_q:
while sockets_q.qsize() < concurrency:
sockets_q.put(connect_socket(host, port))
now = datetime.datetime.now()
while (now-start_time).seconds < run_time:
for _ in xrange(pool.free_count()):
if persistent:
pool.spawn(send_data_socket_queue, sockets_q,
series,
delay=delay)
else:
pool.spawn(send_data, host, port, series, delay=delay)
gevent.sleep(2)
now = datetime.datetime.now()
# Wait for all remaining requests to complete
pool.join()
def do_rampup(host, port, rampup, sleep_time, interval,
concurrency, sockets_q=None, persistent=True,
delay=60, metrics=1000):
"""Perform concurrency rampup according to sleep time, interval
up to max concurrency"""
if not rampup:
return gevent.pool.Pool(size=concurrency)
else:
conc=1
pool = gevent.pool.Pool(size=conc)
for _ in xrange(rampup):
if persistent:
while sockets_q.qsize() < pool.size:
sockets_q.put(connect_socket(host, port))
for _ in xrange(pool.free_count()):
# logger.debug("Pool has free slots, spawning..")
if persistent:
pool.spawn(send_data_socket_queue, sockets_q,
delay=delay, metrics=metrics)
else:
pool.spawn(send_data, host, port, delay=delay)
gevent.sleep(sleep_time)
if conc < concurrency:
logger.info("Ramping up concurrency by %s", interval)
conc += interval
pool = gevent.pool.Pool(size=conc)
else:
return pool
return pool
def connect_socket(host, port):
"""Make a new socket for host on port"""
try:
_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_socket.connect((host, port))
except Exception:
return
return _socket
def make_message(series):
"""Make and return metrics message(s)"""
dt = datetime.datetime.now()
test_data = ["%s %s %s\n" % (
serie,
random.randint(0, 1800000),
dt.strftime("%s"),)
for serie in series]
logger.debug("Sending %s metrics including %s",
len(test_data),
test_data[0].strip())
# import ipdb; ipdb.set_trace()
test_data = "".join(test_data)
return test_data
def send_data(host, port, series, delay=60):
"""Make new socket and send data"""
message = make_message(series)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(message)
s.close()
if delay:
gevent.sleep(delay)
def send_data_socket(_socket, series, delay=60):
"""Send data using socket"""
if not _socket:
return False
message = make_message(series)
# import ipdb; ipdb.set_trace()
try:
_socket.sendall(message)
except Exception, e:
logger.error("Error sending data - %s", str(e))
del _socket
return False
if delay:
gevent.sleep(delay)
return True
def send_data_socket_queue(sockets, series, delay=60):
"""Grab a socket from sockets queue, send data,
put socket back in queue"""
_socket = sockets.get()
if send_data_socket(_socket, series, delay=delay):
sockets.put(_socket)
def test():
host = "ems-dev-graphite1.emea1.ciscloud"
port = 2013
data_batches = 5000
concurrency = 10
# send_data_parallel(host, port, batches=data_batches,
# concurrency=concurrency)
series = make_metric_series(10)
send_data(host, port, series)
print "Sent %s data batches" % (data_batches,)
def main():
args = parser.parse_args()
_setup_logger(logger, level=logging.INFO)
send_data_parallel(args.host, int(args.port), int(args.run_time),
concurrency=int(args.concurrency),
rampup=int(args.rampup), metrics=int(args.metrics), delay=int(args.delay),
persistent=args.persistence)
if __name__ == "__main__":
main()
# test()
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.0 (20091210.2329)
-->
<!-- Title: influxd Pages: 1 -->
<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<script type="text/ecmascript"><![CDATA[
/**
* SVGPan library 1.2.1
* ======================
*
* Given an unique existing element with id "viewport" (or when missing, the first g
* element), including the the library into any SVG adds the following capabilities:
*
* - Mouse panning
* - Mouse zooming (using the wheel)
* - Object dragging
*
* You can configure the behaviour of the pan/zoom/drag with the variables
* listed in the CONFIGURATION section of this file.
*
* Known issues:
*
* - Zooming (while panning) on Safari has still some issues
*
* Releases:
*
* 1.2.1, Mon Jul 4 00:33:18 CEST 2011, Andrea Leofreddi
* - Fixed a regression with mouse wheel (now working on Firefox 5)
* - Working with viewBox attribute (#4)
* - Added "use strict;" and fixed resulting warnings (#5)
* - Added configuration variables, dragging is disabled by default (#3)
*
* 1.2, Sat Mar 20 08:42:50 GMT 2010, Zeng Xiaohui
* Fixed a bug with browser mouse handler interaction
*
* 1.1, Wed Feb 3 17:39:33 GMT 2010, Zeng Xiaohui
* Updated the zoom code to support the mouse wheel on Safari/Chrome
*
* 1.0, Andrea Leofreddi
* First release
*
* This code is licensed under the following BSD license:
*
* Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of Andrea Leofreddi.
*/
"use strict";
/// CONFIGURATION
/// ====>
var enablePan = 1; // 1 or 0: enable or disable panning (default enabled)
var enableZoom = 1; // 1 or 0: enable or disable zooming (default enabled)
var enableDrag = 0; // 1 or 0: enable or disable dragging (default disabled)
/// <====
/// END OF CONFIGURATION
var root = document.documentElement;
var state = 'none', svgRoot, stateTarget, stateOrigin, stateTf;
setupHandlers(root);
/**
* Register handlers
*/
function setupHandlers(root){
setAttributes(root, {
"onmouseup" : "handleMouseUp(evt)",
"onmousedown" : "handleMouseDown(evt)",
"onmousemove" : "handleMouseMove(evt)",
//"onmouseout" : "handleMouseUp(evt)", // Decomment this to stop the pan functionality when dragging out of the SVG element
});
if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0)
window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari
else
window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
}
/**
* Retrieves the root element for SVG manipulation. The element is then cached into the svgRoot global variable.
*/
function getRoot(root) {
if(typeof(svgRoot) == "undefined") {
var g = null;
g = root.getElementById("viewport");
if(g == null)
g = root.getElementsByTagName('g')[0];
if(g == null)
alert('Unable to obtain SVG root element');
setCTM(g, g.getCTM());
g.removeAttribute("viewBox");
svgRoot = g;
}
return svgRoot;
}
/**
* Instance an SVGPoint object with given event coordinates.
*/
function getEventPoint(evt) {
var p = root.createSVGPoint();
p.x = evt.clientX;
p.y = evt.clientY;
return p;
}
/**
* Sets the current transform matrix of an element.
*/
function setCTM(element, matrix) {
var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
element.setAttribute("transform", s);
}
/**
* Dumps a matrix to a string (useful for debug).
*/
function dumpMatrix(matrix) {
var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n 0, 0, 1 ]";
return s;
}
/**
* Sets attributes of an element.
*/
function setAttributes(element, attributes){
for (var i in attributes)
element.setAttributeNS(null, i, attributes[i]);
}
/**
* Handle mouse wheel event.
*/
function handleMouseWheel(evt) {
if(!enableZoom)
return;
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
var delta;
if(evt.wheelDelta)
delta = evt.wheelDelta / 3600; // Chrome/Safari
else
delta = evt.detail / -90; // Mozilla
var z = 1 + delta; // Zoom factor: 0.9/1.1
var g = getRoot(svgDoc);
var p = getEventPoint(evt);
p = p.matrixTransform(g.getCTM().inverse());
// Compute new scale matrix in current mouse position
var k = root.createSVGMatrix().translate(p.x, p.y).scale(z).translate(-p.x, -p.y);
setCTM(g, g.getCTM().multiply(k));
if(typeof(stateTf) == "undefined")
stateTf = g.getCTM().inverse();
stateTf = stateTf.multiply(k.inverse());
}
/**
* Handle mouse move event.
*/
function handleMouseMove(evt) {
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
var g = getRoot(svgDoc);
if(state == 'pan' && enablePan) {
// Pan mode
var p = getEventPoint(evt).matrixTransform(stateTf);
setCTM(g, stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
} else if(state == 'drag' && enableDrag) {
// Drag mode
var p = getEventPoint(evt).matrixTransform(g.getCTM().inverse());
setCTM(stateTarget, root.createSVGMatrix().translate(p.x - stateOrigin.x, p.y - stateOrigin.y).multiply(g.getCTM().inverse()).multiply(stateTarget.getCTM()));
stateOrigin = p;
}
}
/**
* Handle click event.
*/
function handleMouseDown(evt) {
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
var g = getRoot(svgDoc);
if(
evt.target.tagName == "svg"
|| !enableDrag // Pan anyway when drag is disabled and the user clicked on an element
) {
// Pan mode
state = 'pan';
stateTf = g.getCTM().inverse();
stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
} else {
// Drag mode
state = 'drag';
stateTarget = evt.target;
stateTf = g.getCTM().inverse();
stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
}
}
/**
* Handle mouse button release event.
*/
function handleMouseUp(evt) {
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
if(state == 'pan' || state == 'drag') {
// Quit pan mode
state = '';
}
}
]]></script><g id="viewport" transform="scale(0.5,0.5) translate(0,0)"><g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 1344)">
<title>influxd</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-1344 4067,-1344 4067,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_L</title>
<polygon fill="none" stroke="black" points="8,-1068 8,-1332 580,-1332 580,-1068 8,-1068"/>
</g>
<!-- L -->
<g id="node2" class="node"><title>L</title>
<polygon fill="#f8f8f8" stroke="black" points="572,-1324 16,-1324 16,-1076 572,-1076 572,-1324"/>
<text text-anchor="start" x="23.5" y="-1291.2" font-family="Times Roman,serif" font-size="32.00">File: influxd</text>
<text text-anchor="start" x="23.5" y="-1251.2" font-family="Times Roman,serif" font-size="32.00">Type: inuse_space</text>
<text text-anchor="start" x="23.5" y="-1211.2" font-family="Times Roman,serif" font-size="32.00">Time: Sep 29, 2015 at 4:09pm (UTC)</text>
<text text-anchor="start" x="23.5" y="-1171.2" font-family="Times Roman,serif" font-size="32.00">1835.88MB of 1862.81MB total (98.55%)</text>
<text text-anchor="start" x="23.5" y="-1131.2" font-family="Times Roman,serif" font-size="32.00">Dropped 288 nodes (cum &lt;= 9.31MB)</text>
<text text-anchor="start" x="23.5" y="-1091.2" font-family="Times Roman,serif" font-size="32.00">Dropped 4 edges (freq &lt;= 1.86MB)</text>
</g>
<!-- N1 -->
<g id="node3" class="node"><title>N1</title>
<a xlink:title="github.com/boltdb/bolt.(*node).put (488.18MB)">
<polygon fill="#f8f8f8" stroke="black" points="836,-684 480,-684 480,-616 836,-616 836,-684"/>
<text text-anchor="middle" x="658" y="-658.4" font-family="Times Roman,serif" font-size="24.00">github.com/boltdb/bolt.(*node).put</text>
<text text-anchor="middle" x="658" y="-628.4" font-family="Times Roman,serif" font-size="24.00">488.18MB(26.21%)</text>
</a>
</g>
<!-- NN1_0 -->
<g id="node4" class="node"><title>NN1_0</title>
<a xlink:title="381.97MB">
<polygon fill="#f8f8f8" stroke="black" points="598,-545 548,-545 544,-541 544,-509 594,-509 598,-513 598,-545"/>
<polyline fill="none" stroke="black" points="594,-541 544,-541 "/>
<polyline fill="none" stroke="black" points="594,-541 594,-509 "/>
<polyline fill="none" stroke="black" points="594,-541 598,-545 "/>
<text text-anchor="middle" x="571" y="-524.8" font-family="Times Roman,serif" font-size="8.00">8kB</text>
</a>
</g>
<!-- N1&#45;&gt;NN1_0 -->
<g id="edge3" class="edge"><title>N1&#45;&gt;NN1_0</title>
<a xlink:title=" 381.97MB">
<path fill="none" stroke="black" d="M605.465,-615.801C599.655,-610.382 594.298,-604.423 590,-598 581.518,-585.324 576.814,-569.006 574.21,-555.211"/>
<polygon fill="black" stroke="black" points="577.652,-554.569 572.6,-545.256 570.742,-555.686 577.652,-554.569"/>
</a>
<a xlink:title=" 381.97MB">
<text text-anchor="middle" x="622" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 381.97MB</text>
</a>
</g>
<!-- NN1_1 -->
<g id="node6" class="node"><title>NN1_1</title>
<a xlink:title="36.08MB">
<polygon fill="#f8f8f8" stroke="black" points="686,-545 634,-545 630,-541 630,-509 682,-509 686,-513 686,-545"/>
<polyline fill="none" stroke="black" points="682,-541 630,-541 "/>
<polyline fill="none" stroke="black" points="682,-541 682,-509 "/>
<polyline fill="none" stroke="black" points="682,-541 686,-545 "/>
<text text-anchor="middle" x="658" y="-524.8" font-family="Times Roman,serif" font-size="8.00">2kB..2.50kB</text>
</a>
</g>
<!-- N1&#45;&gt;NN1_1 -->
<g id="edge5" class="edge"><title>N1&#45;&gt;NN1_1</title>
<a xlink:title=" 36.08MB">
<path fill="none" stroke="black" d="M658,-615.738C658,-596.693 658,-573.282 658,-555.289"/>
<polygon fill="black" stroke="black" points="661.5,-555.135 658,-545.135 654.5,-555.135 661.5,-555.135"/>
</a>
<a xlink:title=" 36.08MB">
<text text-anchor="middle" x="686.5" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 36.08MB</text>
</a>
</g>
<!-- NN1_2 -->
<g id="node8" class="node"><title>NN1_2</title>
<a xlink:title="22.06MB">
<polygon fill="#f8f8f8" stroke="black" points="765,-545 715,-545 711,-541 711,-509 761,-509 765,-513 765,-545"/>
<polyline fill="none" stroke="black" points="761,-541 711,-541 "/>
<polyline fill="none" stroke="black" points="761,-541 761,-509 "/>
<polyline fill="none" stroke="black" points="761,-541 765,-545 "/>
<text text-anchor="middle" x="738" y="-524.8" font-family="Times Roman,serif" font-size="8.00">2.75kB</text>
</a>
</g>
<!-- N1&#45;&gt;NN1_2 -->
<g id="edge7" class="edge"><title>N1&#45;&gt;NN1_2</title>
<a xlink:title=" 22.06MB">
<path fill="none" stroke="black" d="M701.694,-615.749C707.018,-610.233 711.985,-604.261 716,-598 724.326,-585.015 729.673,-568.677 733.008,-554.948"/>
<polygon fill="black" stroke="black" points="736.454,-555.575 735.182,-545.057 729.617,-554.072 736.454,-555.575"/>
</a>
<a xlink:title=" 22.06MB">
<text text-anchor="middle" x="754.5" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 22.06MB</text>
</a>
</g>
<!-- NN1_3 -->
<g id="node10" class="node"><title>NN1_3</title>
<a xlink:title="13.51MB">
<polygon fill="#f8f8f8" stroke="black" points="518,-545 468,-545 464,-541 464,-509 514,-509 518,-513 518,-545"/>
<polyline fill="none" stroke="black" points="514,-541 464,-541 "/>
<polyline fill="none" stroke="black" points="514,-541 514,-509 "/>
<polyline fill="none" stroke="black" points="514,-541 518,-545 "/>
<text text-anchor="middle" x="491" y="-524.8" font-family="Times Roman,serif" font-size="8.00">768B</text>
</a>
</g>
<!-- N1&#45;&gt;NN1_3 -->
<g id="edge9" class="edge"><title>N1&#45;&gt;NN1_3</title>
<a xlink:title=" 13.51MB">
<path fill="none" stroke="black" d="M543.389,-615.857C534.917,-610.701 526.973,-604.785 520,-598 508.174,-586.494 501.002,-569.49 496.749,-555.008"/>
<polygon fill="black" stroke="black" points="500.055,-553.815 494.143,-545.022 493.282,-555.582 500.055,-553.815"/>
</a>
<a xlink:title=" 13.51MB">
<text text-anchor="middle" x="548.5" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 13.51MB</text>
</a>
</g>
<!-- N2 -->
<g id="node12" class="node"><title>N2</title>
<a xlink:title="github.com/boltdb/bolt.(*DB).allocate (346.86MB)">
<polygon fill="#f8f8f8" stroke="black" points="1139,-559 783,-559 783,-495 1139,-495 1139,-559"/>
<text text-anchor="middle" x="961" y="-535.2" font-family="Times Roman,serif" font-size="22.00">github.com/boltdb/bolt.(*DB).allocate</text>
<text text-anchor="middle" x="961" y="-507.2" font-family="Times Roman,serif" font-size="22.00">346.86MB(18.62%)</text>
</a>
</g>
<!-- NN2_0 -->
<g id="node13" class="node"><title>NN2_0</title>
<a xlink:title="344.34MB">
<polygon fill="#f8f8f8" stroke="black" points="988,-435 938,-435 934,-431 934,-399 984,-399 988,-403 988,-435"/>
<polyline fill="none" stroke="black" points="984,-431 934,-431 "/>
<polyline fill="none" stroke="black" points="984,-431 984,-399 "/>
<polyline fill="none" stroke="black" points="984,-431 988,-435 "/>
<text text-anchor="middle" x="961" y="-414.8" font-family="Times Roman,serif" font-size="8.00">4kB</text>
</a>
</g>
<!-- N2&#45;&gt;NN2_0 -->
<g id="edge11" class="edge"><title>N2&#45;&gt;NN2_0</title>
<a xlink:title=" 344.34MB">
<path fill="none" stroke="black" d="M961,-494.888C961,-479.273 961,-460.663 961,-445.55"/>
<polygon fill="black" stroke="black" points="964.5,-445.256 961,-435.256 957.5,-445.256 964.5,-445.256"/>
</a>
<a xlink:title=" 344.34MB">
<text text-anchor="middle" x="993" y="-462.9" font-family="Times Roman,serif" font-size="14.00"> 344.34MB</text>
</a>
</g>
<!-- N3 -->
<g id="node15" class="node"><title>N3</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.NewFieldCodec (248.53MB)">
<polygon fill="#f8f8f8" stroke="black" points="1579,-679 1159,-679 1159,-621 1579,-621 1579,-679"/>
<text text-anchor="middle" x="1369" y="-657" font-family="Times Roman,serif" font-size="20.00">github.com/influxdb/influxdb/tsdb.NewFieldCodec</text>
<text text-anchor="middle" x="1369" y="-632" font-family="Times Roman,serif" font-size="20.00">248.53MB(13.34%)</text>
</a>
</g>
<!-- NN3_0 -->
<g id="node16" class="node"><title>NN3_0</title>
<a xlink:title="126.53MB">
<polygon fill="#f8f8f8" stroke="black" points="1269,-545 1219,-545 1215,-541 1215,-509 1265,-509 1269,-513 1269,-545"/>
<polyline fill="none" stroke="black" points="1265,-541 1215,-541 "/>
<polyline fill="none" stroke="black" points="1265,-541 1265,-509 "/>
<polyline fill="none" stroke="black" points="1265,-541 1269,-545 "/>
<text text-anchor="middle" x="1242" y="-524.8" font-family="Times Roman,serif" font-size="8.00">208B</text>
</a>
</g>
<!-- N3&#45;&gt;NN3_0 -->
<g id="edge13" class="edge"><title>N3&#45;&gt;NN3_0</title>
<a xlink:title=" 126.53MB">
<path fill="none" stroke="black" d="M1284.46,-620.867C1274.47,-614.586 1265.27,-607.039 1258,-598 1248.41,-586.072 1244.31,-569.537 1242.66,-555.425"/>
<polygon fill="black" stroke="black" points="1246.13,-554.901 1241.82,-545.222 1239.15,-555.475 1246.13,-554.901"/>
</a>
<a xlink:title=" 126.53MB">
<text text-anchor="middle" x="1290" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 126.53MB</text>
</a>
</g>
<!-- NN3_1 -->
<g id="node18" class="node"><title>NN3_1</title>
<a xlink:title="62.51MB">
<polygon fill="#f8f8f8" stroke="black" points="1356,-545 1306,-545 1302,-541 1302,-509 1352,-509 1356,-513 1356,-545"/>
<polyline fill="none" stroke="black" points="1352,-541 1302,-541 "/>
<polyline fill="none" stroke="black" points="1352,-541 1352,-509 "/>
<polyline fill="none" stroke="black" points="1352,-541 1356,-545 "/>
<text text-anchor="middle" x="1329" y="-524.8" font-family="Times Roman,serif" font-size="8.00">96B</text>
</a>
</g>
<!-- N3&#45;&gt;NN3_1 -->
<g id="edge15" class="edge"><title>N3&#45;&gt;NN3_1</title>
<a xlink:title=" 62.51MB">
<path fill="none" stroke="black" d="M1342.18,-620.787C1337.21,-613.79 1332.73,-606.01 1330,-598 1325.35,-584.375 1324.74,-568.406 1325.44,-555.067"/>
<polygon fill="black" stroke="black" points="1328.94,-555.273 1326.24,-545.028 1321.96,-554.719 1328.94,-555.273"/>
</a>
<a xlink:title=" 62.51MB">
<text text-anchor="middle" x="1358.5" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 62.51MB</text>
</a>
</g>
<!-- NN3_2 -->
<g id="node20" class="node"><title>NN3_2</title>
<a xlink:title="48MB">
<polygon fill="#f8f8f8" stroke="black" points="1436,-545 1386,-545 1382,-541 1382,-509 1432,-509 1436,-513 1436,-545"/>
<polyline fill="none" stroke="black" points="1432,-541 1382,-541 "/>
<polyline fill="none" stroke="black" points="1432,-541 1432,-509 "/>
<polyline fill="none" stroke="black" points="1432,-541 1436,-545 "/>
<text text-anchor="middle" x="1409" y="-524.8" font-family="Times Roman,serif" font-size="8.00">48B</text>
</a>
</g>
<!-- N3&#45;&gt;NN3_2 -->
<g id="edge17" class="edge"><title>N3&#45;&gt;NN3_2</title>
<a xlink:title=" 48MB">
<path fill="none" stroke="black" d="M1379.26,-620.904C1381.84,-613.454 1384.56,-605.444 1387,-598 1391.63,-583.874 1396.55,-568.083 1400.56,-554.987"/>
<polygon fill="black" stroke="black" points="1403.99,-555.731 1403.56,-545.145 1397.3,-553.691 1403.99,-555.731"/>
</a>
<a xlink:title=" 48MB">
<text text-anchor="middle" x="1414" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 48MB</text>
</a>
</g>
<!-- NN3_3 -->
<g id="node22" class="node"><title>NN3_3</title>
<a xlink:title="11.50MB">
<polygon fill="#f8f8f8" stroke="black" points="1508,-545 1458,-545 1454,-541 1454,-509 1504,-509 1508,-513 1508,-545"/>
<polyline fill="none" stroke="black" points="1504,-541 1454,-541 "/>
<polyline fill="none" stroke="black" points="1504,-541 1504,-509 "/>
<polyline fill="none" stroke="black" points="1504,-541 1508,-545 "/>
<text text-anchor="middle" x="1481" y="-524.8" font-family="Times Roman,serif" font-size="8.00">16B</text>
</a>
</g>
<!-- N3&#45;&gt;NN3_3 -->
<g id="edge19" class="edge"><title>N3&#45;&gt;NN3_3</title>
<a xlink:title=" 11.50MB">
<path fill="none" stroke="black" d="M1413.11,-620.729C1421.89,-613.844 1430.66,-606.125 1438,-598 1449.77,-584.968 1460.08,-568.253 1467.65,-554.315"/>
<polygon fill="black" stroke="black" points="1470.9,-555.67 1472.44,-545.188 1464.7,-552.418 1470.9,-555.67"/>
</a>
<a xlink:title=" 11.50MB">
<text text-anchor="middle" x="1482.5" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 11.50MB</text>
</a>
</g>
<!-- N4 -->
<g id="node24" class="node"><title>N4</title>
<a xlink:title="reflect.mapassign (130.03MB)">
<polygon fill="#f8f8f8" stroke="black" points="2953,-242 2809,-242 2809,-190 2953,-190 2953,-242"/>
<text text-anchor="middle" x="2881" y="-222.7" font-family="Times Roman,serif" font-size="17.00">reflect.mapassign</text>
<text text-anchor="middle" x="2881" y="-200.7" font-family="Times Roman,serif" font-size="17.00">130.03MB(6.98%)</text>
</a>
</g>
<!-- NN4_0 -->
<g id="node25" class="node"><title>NN4_0</title>
<a xlink:title="129.53MB">
<polygon fill="#f8f8f8" stroke="black" points="2908,-131 2858,-131 2854,-127 2854,-95 2904,-95 2908,-99 2908,-131"/>
<polyline fill="none" stroke="black" points="2904,-127 2854,-127 "/>
<polyline fill="none" stroke="black" points="2904,-127 2904,-95 "/>
<polyline fill="none" stroke="black" points="2904,-127 2908,-131 "/>
<text text-anchor="middle" x="2881" y="-110.8" font-family="Times Roman,serif" font-size="8.00">208B</text>
</a>
</g>
<!-- N4&#45;&gt;NN4_0 -->
<g id="edge21" class="edge"><title>N4&#45;&gt;NN4_0</title>
<a xlink:title=" 129.53MB">
<path fill="none" stroke="black" d="M2881,-189.742C2881,-174.97 2881,-156.517 2881,-141.408"/>
<polygon fill="black" stroke="black" points="2884.5,-141.098 2881,-131.098 2877.5,-141.098 2884.5,-141.098"/>
</a>
<a xlink:title=" 129.53MB">
<text text-anchor="middle" x="2913" y="-158.9" font-family="Times Roman,serif" font-size="14.00"> 129.53MB</text>
</a>
</g>
<!-- N5 -->
<g id="node27" class="node"><title>N5</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateMeasurementIndexIfNotExists (78.50MB)">
<polygon fill="#f8f8f8" stroke="black" points="2169,-673 1597,-673 1597,-627 2169,-627 2169,-673"/>
<text text-anchor="middle" x="1883" y="-655.5" font-family="Times Roman,serif" font-size="15.00">github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateMeasurementIndexIfNotExists</text>
<text text-anchor="middle" x="1883" y="-636.5" font-family="Times Roman,serif" font-size="15.00">78.50MB(4.21%)</text>
</a>
</g>
<!-- NN5_0 -->
<g id="node28" class="node"><title>NN5_0</title>
<a xlink:title="37.50MB">
<polygon fill="#f8f8f8" stroke="black" points="1830,-545 1780,-545 1776,-541 1776,-509 1826,-509 1830,-513 1830,-545"/>
<polyline fill="none" stroke="black" points="1826,-541 1776,-541 "/>
<polyline fill="none" stroke="black" points="1826,-541 1826,-509 "/>
<polyline fill="none" stroke="black" points="1826,-541 1830,-545 "/>
<text text-anchor="middle" x="1803" y="-524.8" font-family="Times Roman,serif" font-size="8.00">48B</text>
</a>
</g>
<!-- N5&#45;&gt;NN5_0 -->
<g id="edge23" class="edge"><title>N5&#45;&gt;NN5_0</title>
<a xlink:title=" 37.50MB">
<path fill="none" stroke="black" d="M1848.71,-626.911C1838.85,-618.798 1828.91,-608.943 1822,-598 1813.86,-585.103 1809.18,-568.771 1806.5,-555.023"/>
<polygon fill="black" stroke="black" points="1809.94,-554.388 1804.82,-545.114 1803.04,-555.558 1809.94,-554.388"/>
</a>
<a xlink:title=" 37.50MB">
<text text-anchor="middle" x="1850.5" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 37.50MB</text>
</a>
</g>
<!-- NN5_1 -->
<g id="node30" class="node"><title>NN5_1</title>
<a xlink:title="28MB">
<polygon fill="#f8f8f8" stroke="black" points="1910,-545 1860,-545 1856,-541 1856,-509 1906,-509 1910,-513 1910,-545"/>
<polyline fill="none" stroke="black" points="1906,-541 1856,-541 "/>
<polyline fill="none" stroke="black" points="1906,-541 1906,-509 "/>
<polyline fill="none" stroke="black" points="1906,-541 1910,-545 "/>
<text text-anchor="middle" x="1883" y="-524.8" font-family="Times Roman,serif" font-size="8.00">112B</text>
</a>
</g>
<!-- N5&#45;&gt;NN5_1 -->
<g id="edge25" class="edge"><title>N5&#45;&gt;NN5_1</title>
<a xlink:title=" 28MB">
<path fill="none" stroke="black" d="M1883,-626.865C1883,-606.624 1883,-577.152 1883,-555.469"/>
<polygon fill="black" stroke="black" points="1886.5,-555.228 1883,-545.228 1879.5,-555.228 1886.5,-555.228"/>
</a>
<a xlink:title=" 28MB">
<text text-anchor="middle" x="1903" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 28MB</text>
</a>
</g>
<!-- NN5_2 -->
<g id="node32" class="node"><title>NN5_2</title>
<a xlink:title="13MB">
<polygon fill="#f8f8f8" stroke="black" points="1982,-545 1932,-545 1928,-541 1928,-509 1978,-509 1982,-513 1982,-545"/>
<polyline fill="none" stroke="black" points="1978,-541 1928,-541 "/>
<polyline fill="none" stroke="black" points="1978,-541 1978,-509 "/>
<polyline fill="none" stroke="black" points="1978,-541 1982,-545 "/>
<text text-anchor="middle" x="1955" y="-524.8" font-family="Times Roman,serif" font-size="8.00">13MB</text>
</a>
</g>
<!-- N5&#45;&gt;NN5_2 -->
<g id="edge27" class="edge"><title>N5&#45;&gt;NN5_2</title>
<a xlink:title=" 13MB">
<path fill="none" stroke="black" d="M1905.34,-626.912C1912.89,-618.304 1920.93,-608.15 1927,-598 1935.02,-584.588 1941.59,-568.465 1946.35,-554.975"/>
<polygon fill="black" stroke="black" points="1949.75,-555.855 1949.63,-545.261 1943.11,-553.617 1949.75,-555.855"/>
</a>
<a xlink:title=" 13MB">
<text text-anchor="middle" x="1956" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 13MB</text>
</a>
</g>
<!-- N6 -->
<g id="node34" class="node"><title>N6</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 (746.84MB)">
<polygon fill="#f8f8f8" stroke="black" points="2479,-909.5 2007,-909.5 2007,-844.5 2479,-844.5 2479,-909.5"/>
<text text-anchor="middle" x="2243" y="-892.9" font-family="Times Roman,serif" font-size="14.00">github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1</text>
<text text-anchor="middle" x="2243" y="-873.9" font-family="Times Roman,serif" font-size="14.00">57.26MB(3.07%)</text>
<text text-anchor="middle" x="2243" y="-854.9" font-family="Times Roman,serif" font-size="14.00">of 746.84MB(40.09%)</text>
</a>
</g>
<!-- N6&#45;&gt;N3 -->
<g id="edge101" class="edge"><title>N6&#45;&gt;N3</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.NewFieldCodec (248.53MB)">
<path fill="none" stroke="black" d="M2117.78,-844.476C1950.48,-801.025 1655.97,-724.534 1490.56,-681.571"/>
<polygon fill="black" stroke="black" points="1491.39,-678.171 1480.83,-679.044 1489.63,-684.946 1491.39,-678.171"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.NewFieldCodec (248.53MB)">
<text text-anchor="middle" x="1924" y="-760.9" font-family="Times Roman,serif" font-size="14.00"> 248.53MB</text>
</a>
</g>
<!-- N6&#45;&gt;N5 -->
<g id="edge107" class="edge"><title>N6&#45;&gt;N5</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateMeasurementIndexIfNotExists (78.50MB)">
<path fill="none" stroke="black" d="M2178.11,-844.326C2147.29,-828.216 2110.22,-807.989 2078,-788 2021.97,-753.241 1960.33,-708.434 1921.65,-679.463"/>
<polygon fill="black" stroke="black" points="1923.38,-676.384 1913.29,-673.173 1919.18,-681.979 1923.38,-676.384"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateMeasurementIndexIfNotExists (78.50MB)">
<text text-anchor="middle" x="2106.5" y="-760.9" font-family="Times Roman,serif" font-size="14.00"> 78.50MB</text>
</a>
</g>
<!-- NN6_0 -->
<g id="node35" class="node"><title>NN6_0</title>
<a xlink:title="26MB">
<polygon fill="#f8f8f8" stroke="black" points="2198,-782 2148,-782 2144,-778 2144,-746 2194,-746 2198,-750 2198,-782"/>
<polyline fill="none" stroke="black" points="2194,-778 2144,-778 "/>
<polyline fill="none" stroke="black" points="2194,-778 2194,-746 "/>
<polyline fill="none" stroke="black" points="2194,-778 2198,-782 "/>
<text text-anchor="middle" x="2171" y="-761.8" font-family="Times Roman,serif" font-size="8.00">6.50MB</text>
</a>
</g>
<!-- N6&#45;&gt;NN6_0 -->
<g id="edge29" class="edge"><title>N6&#45;&gt;NN6_0</title>
<a xlink:title=" 26MB">
<path fill="none" stroke="black" d="M2212.44,-844.335C2207.64,-838.453 2202.96,-832.21 2199,-826 2192.12,-815.22 2186.05,-802.467 2181.34,-791.338"/>
<polygon fill="black" stroke="black" points="2184.57,-790.007 2177.56,-782.068 2178.09,-792.649 2184.57,-790.007"/>
</a>
<a xlink:title=" 26MB">
<text text-anchor="middle" x="2219" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 26MB</text>
</a>
</g>
<!-- NN6_1 -->
<g id="node37" class="node"><title>NN6_1</title>
<a xlink:title="13.50MB">
<polygon fill="#f8f8f8" stroke="black" points="2270,-782 2220,-782 2216,-778 2216,-746 2266,-746 2270,-750 2270,-782"/>
<polyline fill="none" stroke="black" points="2266,-778 2216,-778 "/>
<polyline fill="none" stroke="black" points="2266,-778 2266,-746 "/>
<polyline fill="none" stroke="black" points="2266,-778 2270,-782 "/>
<text text-anchor="middle" x="2243" y="-761.8" font-family="Times Roman,serif" font-size="8.00">48B</text>
</a>
</g>
<!-- N6&#45;&gt;NN6_1 -->
<g id="edge31" class="edge"><title>N6&#45;&gt;NN6_1</title>
<a xlink:title=" 13.50MB">
<path fill="none" stroke="black" d="M2243,-844.316C2243,-827.898 2243,-808.196 2243,-792.415"/>
<polygon fill="black" stroke="black" points="2246.5,-792.204 2243,-782.204 2239.5,-792.204 2246.5,-792.204"/>
</a>
<a xlink:title=" 13.50MB">
<text text-anchor="middle" x="2271.5" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 13.50MB</text>
</a>
</g>
<!-- NN6_2 -->
<g id="node39" class="node"><title>NN6_2</title>
<a xlink:title="13MB">
<polygon fill="#f8f8f8" stroke="black" points="2350,-782 2300,-782 2296,-778 2296,-746 2346,-746 2350,-750 2350,-782"/>
<polyline fill="none" stroke="black" points="2346,-778 2296,-778 "/>
<polyline fill="none" stroke="black" points="2346,-778 2346,-746 "/>
<polyline fill="none" stroke="black" points="2346,-778 2350,-782 "/>
<text text-anchor="middle" x="2323" y="-761.8" font-family="Times Roman,serif" font-size="8.00">13MB</text>
</a>
</g>
<!-- N6&#45;&gt;NN6_2 -->
<g id="edge33" class="edge"><title>N6&#45;&gt;NN6_2</title>
<a xlink:title=" 13MB">
<path fill="none" stroke="black" d="M2285.59,-844.224C2291.28,-838.579 2296.64,-832.439 2301,-826 2307.91,-815.791 2312.91,-803.167 2316.37,-791.98"/>
<polygon fill="black" stroke="black" points="2319.78,-792.796 2319.14,-782.221 2313.04,-790.889 2319.78,-792.796"/>
</a>
<a xlink:title=" 13MB">
<text text-anchor="middle" x="2331" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 13MB</text>
</a>
</g>
<!-- N14 -->
<g id="node74" class="node"><title>N14</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*Measurement).SetFieldName (31MB)">
<polygon fill="#f8f8f8" stroke="black" points="2559,-671 2187,-671 2187,-629 2559,-629 2559,-671"/>
<text text-anchor="middle" x="2373" y="-655.3" font-family="Times Roman,serif" font-size="13.00">github.com/influxdb/influxdb/tsdb.(*Measurement).SetFieldName</text>
<text text-anchor="middle" x="2373" y="-638.3" font-family="Times Roman,serif" font-size="13.00">31MB(1.66%)</text>
</a>
</g>
<!-- N6&#45;&gt;N14 -->
<g id="edge139" class="edge"><title>N6&#45;&gt;N14</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.(*Measurement).SetFieldName (31MB)">
<path fill="none" stroke="black" d="M2336.73,-844.352C2343.68,-839.098 2349.94,-833.021 2355,-826 2385.77,-783.285 2383.4,-718.88 2378.48,-680.972"/>
<polygon fill="black" stroke="black" points="2381.94,-680.423 2377.05,-671.023 2375.01,-681.419 2381.94,-680.423"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.(*Measurement).SetFieldName (31MB)">
<text text-anchor="middle" x="2400" y="-760.9" font-family="Times Roman,serif" font-size="14.00"> 31MB</text>
</a>
</g>
<!-- N21 -->
<g id="node91" class="node"><title>N21</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateSeriesIndexIfNotExists (52.01MB)">
<polygon fill="#f8f8f8" stroke="black" points="2959,-676.5 2577,-676.5 2577,-623.5 2959,-623.5 2959,-676.5"/>
<text text-anchor="middle" x="2768" y="-662.6" font-family="Times Roman,serif" font-size="11.00">github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateSeriesIndexIfNotExists</text>
<text text-anchor="middle" x="2768" y="-647.6" font-family="Times Roman,serif" font-size="11.00">13.50MB(0.72%)</text>
<text text-anchor="middle" x="2768" y="-632.6" font-family="Times Roman,serif" font-size="11.00">of 52.01MB(2.79%)</text>
</a>
</g>
<!-- N6&#45;&gt;N21 -->
<g id="edge117" class="edge"><title>N6&#45;&gt;N21</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateSeriesIndexIfNotExists (52.01MB)">
<path fill="none" stroke="black" d="M2328.51,-844.405C2343.71,-838.412 2359.36,-832.115 2374,-826 2490.25,-777.441 2623.79,-716.733 2701.74,-680.791"/>
<polygon fill="black" stroke="black" points="2703.35,-683.901 2710.96,-676.533 2700.41,-677.545 2703.35,-683.901"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 &#45;&gt; github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateSeriesIndexIfNotExists (52.01MB)">
<text text-anchor="middle" x="2594.5" y="-760.9" font-family="Times Roman,serif" font-size="14.00"> 52.01MB</text>
</a>
</g>
<!-- N32 -->
<g id="node106" class="node"><title>N32</title>
<a xlink:title="encoding/json.Unmarshal (279.53MB)">
<polygon fill="#f8f8f8" stroke="black" points="3075,-668 2977,-668 2977,-632 3075,-632 3075,-668"/>
<text text-anchor="middle" x="3026" y="-652.8" font-family="Times Roman,serif" font-size="8.00">encoding/json.Unmarshal</text>
<text text-anchor="middle" x="3026" y="-642.8" font-family="Times Roman,serif" font-size="8.00">0 of 279.53MB(15.01%)</text>
</a>
</g>
<!-- N6&#45;&gt;N32 -->
<g id="edge99" class="edge"><title>N6&#45;&gt;N32</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 ... encoding/json.Unmarshal (279.53MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M2425.82,-844.487C2575.63,-814.071 2791,-761.588 2968,-684 2974.98,-680.939 2982.18,-677.228 2989.02,-673.396"/>
<polygon fill="black" stroke="black" points="2991.18,-676.187 2998.08,-668.146 2987.68,-670.13 2991.18,-676.187"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 ... encoding/json.Unmarshal (279.53MB)">
<text text-anchor="middle" x="2851" y="-760.9" font-family="Times Roman,serif" font-size="14.00"> 279.53MB</text>
</a>
</g>
<!-- N7 -->
<g id="node41" class="node"><title>N7</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/wal.(*Partition).addToCache (52.57MB)">
<polygon fill="#f8f8f8" stroke="black" points="3647,-787 3243,-787 3243,-741 3647,-741 3647,-787"/>
<text text-anchor="middle" x="3445" y="-770.4" font-family="Times Roman,serif" font-size="14.00">github.com/influxdb/influxdb/tsdb/engine/wal.(*Partition).addToCache</text>
<text text-anchor="middle" x="3445" y="-751.4" font-family="Times Roman,serif" font-size="14.00">52.57MB(2.82%)</text>
</a>
</g>
<!-- NN7_0 -->
<g id="node42" class="node"><title>NN7_0</title>
<a xlink:title="20MB">
<polygon fill="#f8f8f8" stroke="black" points="3436,-668 3386,-668 3382,-664 3382,-632 3432,-632 3436,-636 3436,-668"/>
<polyline fill="none" stroke="black" points="3432,-664 3382,-664 "/>
<polyline fill="none" stroke="black" points="3432,-664 3432,-632 "/>
<polyline fill="none" stroke="black" points="3432,-664 3436,-668 "/>
<text text-anchor="middle" x="3409" y="-647.8" font-family="Times Roman,serif" font-size="8.00">32B</text>
</a>
</g>
<!-- N7&#45;&gt;NN7_0 -->
<g id="edge35" class="edge"><title>N7&#45;&gt;NN7_0</title>
<a xlink:title=" 20MB">
<path fill="none" stroke="black" d="M3428.33,-740.892C3424.74,-734.975 3421.33,-728.454 3419,-722 3414,-708.136 3411.48,-691.938 3410.22,-678.421"/>
<polygon fill="black" stroke="black" points="3413.69,-677.959 3409.45,-668.25 3406.71,-678.484 3413.69,-677.959"/>
</a>
<a xlink:title=" 20MB">
<text text-anchor="middle" x="3439" y="-708.9" font-family="Times Roman,serif" font-size="14.00"> 20MB</text>
</a>
</g>
<!-- NN7_1 -->
<g id="node44" class="node"><title>NN7_1</title>
<a xlink:title="10.56MB">
<polygon fill="#f8f8f8" stroke="black" points="3508,-668 3458,-668 3454,-664 3454,-632 3504,-632 3508,-636 3508,-668"/>
<polyline fill="none" stroke="black" points="3504,-664 3454,-664 "/>
<polyline fill="none" stroke="black" points="3504,-664 3504,-632 "/>
<polyline fill="none" stroke="black" points="3504,-664 3508,-668 "/>
<text text-anchor="middle" x="3481" y="-647.8" font-family="Times Roman,serif" font-size="8.00">6kB</text>
</a>
</g>
<!-- N7&#45;&gt;NN7_1 -->
<g id="edge37" class="edge"><title>N7&#45;&gt;NN7_1</title>
<a xlink:title=" 10.56MB">
<path fill="none" stroke="black" d="M3452.81,-740.927C3454.85,-734.786 3457.04,-728.15 3459,-722 3463.66,-707.415 3468.66,-691.102 3472.72,-677.697"/>
<polygon fill="black" stroke="black" points="3476.08,-678.674 3475.61,-668.089 3469.37,-676.654 3476.08,-678.674"/>
</a>
<a xlink:title=" 10.56MB">
<text text-anchor="middle" x="3493.5" y="-708.9" font-family="Times Roman,serif" font-size="14.00"> 10.56MB</text>
</a>
</g>
<!-- N8 -->
<g id="node46" class="node"><title>N8</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).node (88.13MB)">
<polygon fill="#f8f8f8" stroke="black" points="362,-559.5 132,-559.5 132,-494.5 362,-494.5 362,-559.5"/>
<text text-anchor="middle" x="247" y="-542.9" font-family="Times Roman,serif" font-size="14.00">github.com/boltdb/bolt.(*Bucket).node</text>
<text text-anchor="middle" x="247" y="-523.9" font-family="Times Roman,serif" font-size="14.00">51.10MB(2.74%)</text>
<text text-anchor="middle" x="247" y="-504.9" font-family="Times Roman,serif" font-size="14.00">of 88.13MB(4.73%)</text>
</a>
</g>
<!-- NN8_0 -->
<g id="node47" class="node"><title>NN8_0</title>
<a xlink:title="32MB">
<polygon fill="#f8f8f8" stroke="black" points="202,-435 152,-435 148,-431 148,-399 198,-399 202,-403 202,-435"/>
<polyline fill="none" stroke="black" points="198,-431 148,-431 "/>
<polyline fill="none" stroke="black" points="198,-431 198,-399 "/>
<polyline fill="none" stroke="black" points="198,-431 202,-435 "/>
<text text-anchor="middle" x="175" y="-414.8" font-family="Times Roman,serif" font-size="8.00">112B</text>
</a>
</g>
<!-- N8&#45;&gt;NN8_0 -->
<g id="edge39" class="edge"><title>N8&#45;&gt;NN8_0</title>
<a xlink:title=" 32MB">
<path fill="none" stroke="black" d="M216.54,-494.271C211.729,-488.396 207.022,-482.173 203,-476 196.621,-466.21 190.84,-454.74 186.209,-444.529"/>
<polygon fill="black" stroke="black" points="189.353,-442.982 182.14,-435.222 182.939,-445.787 189.353,-442.982"/>
</a>
<a xlink:title=" 32MB">
<text text-anchor="middle" x="223" y="-462.9" font-family="Times Roman,serif" font-size="14.00"> 32MB</text>
</a>
</g>
<!-- NN8_1 -->
<g id="node49" class="node"><title>NN8_1</title>
<a xlink:title="16.50MB">
<polygon fill="#f8f8f8" stroke="black" points="274,-435 224,-435 220,-431 220,-399 270,-399 274,-403 274,-435"/>
<polyline fill="none" stroke="black" points="270,-431 220,-431 "/>
<polyline fill="none" stroke="black" points="270,-431 270,-399 "/>
<polyline fill="none" stroke="black" points="270,-431 274,-435 "/>
<text text-anchor="middle" x="247" y="-414.8" font-family="Times Roman,serif" font-size="8.00">144B</text>
</a>
</g>
<!-- N8&#45;&gt;NN8_1 -->
<g id="edge41" class="edge"><title>N8&#45;&gt;NN8_1</title>
<a xlink:title=" 16.50MB">
<path fill="none" stroke="black" d="M247,-494.294C247,-478.7 247,-460.228 247,-445.253"/>
<polygon fill="black" stroke="black" points="250.5,-445.057 247,-435.057 243.5,-445.057 250.5,-445.057"/>
</a>
<a xlink:title=" 16.50MB">
<text text-anchor="middle" x="275.5" y="-462.9" font-family="Times Roman,serif" font-size="14.00"> 16.50MB</text>
</a>
</g>
<!-- N12 -->
<g id="node64" class="node"><title>N12</title>
<a xlink:title="github.com/boltdb/bolt.(*node).read (37.04MB)">
<polygon fill="#f8f8f8" stroke="black" points="424,-340 214,-340 214,-298 424,-298 424,-340"/>
<text text-anchor="middle" x="319" y="-324.3" font-family="Times Roman,serif" font-size="13.00">github.com/boltdb/bolt.(*node).read</text>
<text text-anchor="middle" x="319" y="-307.3" font-family="Times Roman,serif" font-size="13.00">37.04MB(1.99%)</text>
</a>
</g>
<!-- N8&#45;&gt;N12 -->
<g id="edge131" class="edge"><title>N8&#45;&gt;N12</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).node &#45;&gt; github.com/boltdb/bolt.(*node).read (37.04MB)">
<path fill="none" stroke="black" d="M291.951,-494.215C297.086,-488.683 301.665,-482.578 305,-476 325.211,-436.137 325.331,-383.235 322.77,-350.157"/>
<polygon fill="black" stroke="black" points="326.252,-349.8 321.866,-340.155 319.281,-350.43 326.252,-349.8"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).node &#45;&gt; github.com/boltdb/bolt.(*node).read (37.04MB)">
<text text-anchor="middle" x="352.5" y="-413.9" font-family="Times Roman,serif" font-size="14.00"> 37.04MB</text>
</a>
</g>
<!-- N9 -->
<g id="node51" class="node"><title>N9</title>
<a xlink:title="reflect.unsafe_New (45.50MB)">
<polygon fill="#f8f8f8" stroke="black" points="3365,-134 3243,-134 3243,-92 3365,-92 3365,-134"/>
<text text-anchor="middle" x="3304" y="-118.3" font-family="Times Roman,serif" font-size="13.00">reflect.unsafe_New</text>
<text text-anchor="middle" x="3304" y="-101.3" font-family="Times Roman,serif" font-size="13.00">45.50MB(2.44%)</text>
</a>
</g>
<!-- NN9_0 -->
<g id="node52" class="node"><title>NN9_0</title>
<a xlink:title="22MB">
<polygon fill="#f8f8f8" stroke="black" points="3259,-36 3209,-36 3205,-32 3205,-1.77636e-14 3255,-4.60537e-15 3259,-4 3259,-36"/>
<polyline fill="none" stroke="black" points="3255,-32 3205,-32 "/>
<polyline fill="none" stroke="black" points="3255,-32 3255,-4.60537e-15 "/>
<polyline fill="none" stroke="black" points="3255,-32 3259,-36 "/>
<text text-anchor="middle" x="3232" y="-15.8" font-family="Times Roman,serif" font-size="8.00">32B</text>
</a>
</g>
<!-- N9&#45;&gt;NN9_0 -->
<g id="edge43" class="edge"><title>N9&#45;&gt;NN9_0</title>
<a xlink:title=" 22MB">
<path fill="none" stroke="black" d="M3276.8,-91.8162C3270.83,-86.4039 3264.85,-80.3161 3260,-74 3253.35,-65.334 3247.6,-54.8416 3243.08,-45.2924"/>
<polygon fill="black" stroke="black" points="3246.27,-43.8453 3238.97,-36.1601 3239.88,-46.7159 3246.27,-43.8453"/>
</a>
<a xlink:title=" 22MB">
<text text-anchor="middle" x="3280" y="-60.9" font-family="Times Roman,serif" font-size="14.00"> 22MB</text>
</a>
</g>
<!-- NN9_1 -->
<g id="node54" class="node"><title>NN9_1</title>
<a xlink:title="13.50MB">
<polygon fill="#f8f8f8" stroke="black" points="3331,-36 3281,-36 3277,-32 3277,-1.77636e-14 3327,-4.60537e-15 3331,-4 3331,-36"/>
<polyline fill="none" stroke="black" points="3327,-32 3277,-32 "/>
<polyline fill="none" stroke="black" points="3327,-32 3327,-4.60537e-15 "/>
<polyline fill="none" stroke="black" points="3327,-32 3331,-36 "/>
<text text-anchor="middle" x="3304" y="-15.8" font-family="Times Roman,serif" font-size="8.00">48B</text>
</a>
</g>
<!-- N9&#45;&gt;NN9_1 -->
<g id="edge45" class="edge"><title>N9&#45;&gt;NN9_1</title>
<a xlink:title=" 13.50MB">
<path fill="none" stroke="black" d="M3304,-91.9164C3304,-78.4564 3304,-60.8467 3304,-46.192"/>
<polygon fill="black" stroke="black" points="3307.5,-46.1449 3304,-36.1449 3300.5,-46.145 3307.5,-46.1449"/>
</a>
<a xlink:title=" 13.50MB">
<text text-anchor="middle" x="3332.5" y="-60.9" font-family="Times Roman,serif" font-size="14.00"> 13.50MB</text>
</a>
</g>
<!-- NN9_2 -->
<g id="node56" class="node"><title>NN9_2</title>
<a xlink:title="10MB">
<polygon fill="#f8f8f8" stroke="black" points="3411,-36 3361,-36 3357,-32 3357,-1.77636e-14 3407,-4.60537e-15 3411,-4 3411,-36"/>
<polyline fill="none" stroke="black" points="3407,-32 3357,-32 "/>
<polyline fill="none" stroke="black" points="3407,-32 3407,-4.60537e-15 "/>
<polyline fill="none" stroke="black" points="3407,-32 3411,-36 "/>
<text text-anchor="middle" x="3384" y="-15.8" font-family="Times Roman,serif" font-size="8.00">16B</text>
</a>
</g>
<!-- N9&#45;&gt;NN9_2 -->
<g id="edge47" class="edge"><title>N9&#45;&gt;NN9_2</title>
<a xlink:title=" 10MB">
<path fill="none" stroke="black" d="M3342.64,-91.8598C3349.74,-86.7087 3356.61,-80.7175 3362,-74 3368.6,-65.779 3373.42,-55.335 3376.83,-45.6991"/>
<polygon fill="black" stroke="black" points="3380.19,-46.6675 3379.89,-36.0769 3373.52,-44.5437 3380.19,-46.6675"/>
</a>
<a xlink:title=" 10MB">
<text text-anchor="middle" x="3393" y="-60.9" font-family="Times Roman,serif" font-size="14.00"> 10MB</text>
</a>
</g>
<!-- N10 -->
<g id="node58" class="node"><title>N10</title>
<a xlink:title="reflect.makemap (39.50MB)">
<polygon fill="#f8f8f8" stroke="black" points="3081,-237 2971,-237 2971,-195 3081,-195 3081,-237"/>
<text text-anchor="middle" x="3026" y="-221.3" font-family="Times Roman,serif" font-size="13.00">reflect.makemap</text>
<text text-anchor="middle" x="3026" y="-204.3" font-family="Times Roman,serif" font-size="13.00">39.50MB(2.12%)</text>
</a>
</g>
<!-- NN10_0 -->
<g id="node59" class="node"><title>NN10_0</title>
<a xlink:title="39.50MB">
<polygon fill="#f8f8f8" stroke="black" points="3053,-131 3003,-131 2999,-127 2999,-95 3049,-95 3053,-99 3053,-131"/>
<polyline fill="none" stroke="black" points="3049,-127 2999,-127 "/>
<polyline fill="none" stroke="black" points="3049,-127 3049,-95 "/>
<polyline fill="none" stroke="black" points="3049,-127 3053,-131 "/>
<text text-anchor="middle" x="3026" y="-110.8" font-family="Times Roman,serif" font-size="8.00">48B</text>
</a>
</g>
<!-- N10&#45;&gt;NN10_0 -->
<g id="edge49" class="edge"><title>N10&#45;&gt;NN10_0</title>
<a xlink:title=" 39.50MB">
<path fill="none" stroke="black" d="M3026,-194.658C3026,-179.287 3026,-158.382 3026,-141.572"/>
<polygon fill="black" stroke="black" points="3029.5,-141.216 3026,-131.216 3022.5,-141.216 3029.5,-141.216"/>
</a>
<a xlink:title=" 39.50MB">
<text text-anchor="middle" x="3054.5" y="-158.9" font-family="Times Roman,serif" font-size="14.00"> 39.50MB</text>
</a>
</g>
<!-- N11 -->
<g id="node61" class="node"><title>N11</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*Measurement).AddSeries (38.51MB)">
<polygon fill="#f8f8f8" stroke="black" points="2842,-438 2490,-438 2490,-396 2842,-396 2842,-438"/>
<text text-anchor="middle" x="2666" y="-422.3" font-family="Times Roman,serif" font-size="13.00">github.com/influxdb/influxdb/tsdb.(*Measurement).AddSeries</text>
<text text-anchor="middle" x="2666" y="-405.3" font-family="Times Roman,serif" font-size="13.00">38.51MB(2.07%)</text>
</a>
</g>
<!-- NN11_0 -->
<g id="node62" class="node"><title>NN11_0</title>
<a xlink:title="36.51MB">
<polygon fill="#f8f8f8" stroke="black" points="2693,-337 2643,-337 2639,-333 2639,-301 2689,-301 2693,-305 2693,-337"/>
<polyline fill="none" stroke="black" points="2689,-333 2639,-333 "/>
<polyline fill="none" stroke="black" points="2689,-333 2689,-301 "/>
<polyline fill="none" stroke="black" points="2689,-333 2693,-337 "/>
<text text-anchor="middle" x="2666" y="-316.8" font-family="Times Roman,serif" font-size="8.00">144B</text>
</a>
</g>
<!-- N11&#45;&gt;NN11_0 -->
<g id="edge51" class="edge"><title>N11&#45;&gt;NN11_0</title>
<a xlink:title=" 36.51MB">
<path fill="none" stroke="black" d="M2666,-395.735C2666,-381.556 2666,-362.757 2666,-347.315"/>
<polygon fill="black" stroke="black" points="2669.5,-347.259 2666,-337.259 2662.5,-347.259 2669.5,-347.259"/>
</a>
<a xlink:title=" 36.51MB">
<text text-anchor="middle" x="2694.5" y="-364.9" font-family="Times Roman,serif" font-size="14.00"> 36.51MB</text>
</a>
</g>
<!-- NN12_0 -->
<g id="node65" class="node"><title>NN12_0</title>
<a xlink:title="12.50MB">
<polygon fill="#f8f8f8" stroke="black" points="346,-234 296,-234 292,-230 292,-198 342,-198 346,-202 346,-234"/>
<polyline fill="none" stroke="black" points="342,-230 292,-230 "/>
<polyline fill="none" stroke="black" points="342,-230 342,-198 "/>
<polyline fill="none" stroke="black" points="342,-230 346,-234 "/>
<text text-anchor="middle" x="319" y="-213.8" font-family="Times Roman,serif" font-size="8.00">192B</text>
</a>
</g>
<!-- N12&#45;&gt;NN12_0 -->
<g id="edge53" class="edge"><title>N12&#45;&gt;NN12_0</title>
<a xlink:title=" 12.50MB">
<path fill="none" stroke="black" d="M319,-297.658C319,-282.287 319,-261.382 319,-244.572"/>
<polygon fill="black" stroke="black" points="322.5,-244.216 319,-234.216 315.5,-244.216 322.5,-244.216"/>
</a>
<a xlink:title=" 12.50MB">
<text text-anchor="middle" x="347.5" y="-266.9" font-family="Times Roman,serif" font-size="14.00"> 12.50MB</text>
</a>
</g>
<!-- N13 -->
<g id="node67" class="node"><title>N13</title>
<a xlink:title="encoding/json.(*decodeState).literalStore (34MB)">
<polygon fill="#f8f8f8" stroke="black" points="3629,-237 3391,-237 3391,-195 3629,-195 3629,-237"/>
<text text-anchor="middle" x="3510" y="-221.3" font-family="Times Roman,serif" font-size="13.00">encoding/json.(*decodeState).literalStore</text>
<text text-anchor="middle" x="3510" y="-204.3" font-family="Times Roman,serif" font-size="13.00">34MB(1.83%)</text>
</a>
</g>
<!-- NN13_0 -->
<g id="node68" class="node"><title>NN13_0</title>
<a xlink:title="11.50MB">
<polygon fill="#f8f8f8" stroke="black" points="3457,-131 3407,-131 3403,-127 3403,-95 3453,-95 3457,-99 3457,-131"/>
<polyline fill="none" stroke="black" points="3453,-127 3403,-127 "/>
<polyline fill="none" stroke="black" points="3453,-127 3453,-95 "/>
<polyline fill="none" stroke="black" points="3453,-127 3457,-131 "/>
<text text-anchor="middle" x="3430" y="-110.8" font-family="Times Roman,serif" font-size="8.00">80B</text>
</a>
</g>
<!-- N13&#45;&gt;NN13_0 -->
<g id="edge55" class="edge"><title>N13&#45;&gt;NN13_0</title>
<a xlink:title=" 11.50MB">
<path fill="none" stroke="black" d="M3472.81,-194.886C3464.03,-188.472 3455.37,-180.766 3449,-172 3442.4,-162.927 3438.03,-151.459 3435.16,-141.052"/>
<polygon fill="black" stroke="black" points="3438.51,-140.027 3432.77,-131.126 3431.71,-141.668 3438.51,-140.027"/>
</a>
<a xlink:title=" 11.50MB">
<text text-anchor="middle" x="3477.5" y="-158.9" font-family="Times Roman,serif" font-size="14.00"> 11.50MB</text>
</a>
</g>
<!-- NN13_1 -->
<g id="node70" class="node"><title>NN13_1</title>
<a xlink:title="10MB">
<polygon fill="#f8f8f8" stroke="black" points="3537,-131 3487,-131 3483,-127 3483,-95 3533,-95 3537,-99 3537,-131"/>
<polyline fill="none" stroke="black" points="3533,-127 3483,-127 "/>
<polyline fill="none" stroke="black" points="3533,-127 3533,-95 "/>
<polyline fill="none" stroke="black" points="3533,-127 3537,-131 "/>
<text text-anchor="middle" x="3510" y="-110.8" font-family="Times Roman,serif" font-size="8.00">96B</text>
</a>
</g>
<!-- N13&#45;&gt;NN13_1 -->
<g id="edge57" class="edge"><title>N13&#45;&gt;NN13_1</title>
<a xlink:title=" 10MB">
<path fill="none" stroke="black" d="M3510,-194.658C3510,-179.287 3510,-158.382 3510,-141.572"/>
<polygon fill="black" stroke="black" points="3513.5,-141.216 3510,-131.216 3506.5,-141.216 3513.5,-141.216"/>
</a>
<a xlink:title=" 10MB">
<text text-anchor="middle" x="3530" y="-158.9" font-family="Times Roman,serif" font-size="14.00"> 10MB</text>
</a>
</g>
<!-- NN13_2 -->
<g id="node72" class="node"><title>NN13_2</title>
<a xlink:title="9.50MB">
<polygon fill="#f8f8f8" stroke="black" points="3609,-131 3559,-131 3555,-127 3555,-95 3605,-95 3609,-99 3609,-131"/>
<polyline fill="none" stroke="black" points="3605,-127 3555,-127 "/>
<polyline fill="none" stroke="black" points="3605,-127 3605,-95 "/>
<polyline fill="none" stroke="black" points="3605,-127 3609,-131 "/>
<text text-anchor="middle" x="3582" y="-110.8" font-family="Times Roman,serif" font-size="8.00">16B</text>
</a>
</g>
<!-- N13&#45;&gt;NN13_2 -->
<g id="edge59" class="edge"><title>N13&#45;&gt;NN13_2</title>
<a xlink:title=" 9.50MB">
<path fill="none" stroke="black" d="M3533.98,-194.963C3540.98,-188.089 3548.27,-180.122 3554,-172 3560.78,-162.381 3566.67,-150.86 3571.27,-140.562"/>
<polygon fill="black" stroke="black" points="3574.58,-141.737 3575.28,-131.165 3568.14,-138.992 3574.58,-141.737"/>
</a>
<a xlink:title=" 9.50MB">
<text text-anchor="middle" x="3590" y="-158.9" font-family="Times Roman,serif" font-size="14.00"> 9.50MB</text>
</a>
</g>
<!-- NN14_0 -->
<g id="node75" class="node"><title>NN14_0</title>
<a xlink:title="31MB">
<polygon fill="#f8f8f8" stroke="black" points="2400,-545 2350,-545 2346,-541 2346,-509 2396,-509 2400,-513 2400,-545"/>
<polyline fill="none" stroke="black" points="2396,-541 2346,-541 "/>
<polyline fill="none" stroke="black" points="2396,-541 2396,-509 "/>
<polyline fill="none" stroke="black" points="2396,-541 2400,-545 "/>
<text text-anchor="middle" x="2373" y="-524.8" font-family="Times Roman,serif" font-size="8.00">144B</text>
</a>
</g>
<!-- N14&#45;&gt;NN14_0 -->
<g id="edge61" class="edge"><title>N14&#45;&gt;NN14_0</title>
<a xlink:title=" 31MB">
<path fill="none" stroke="black" d="M2373,-628.856C2373,-608.55 2373,-577.736 2373,-555.318"/>
<polygon fill="black" stroke="black" points="2376.5,-555.071 2373,-545.071 2369.5,-555.071 2376.5,-555.071"/>
</a>
<a xlink:title=" 31MB">
<text text-anchor="middle" x="2393" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 31MB</text>
</a>
</g>
<!-- N15 -->
<g id="node77" class="node"><title>N15</title>
<a xlink:title="reflect.cvtBytesString (30.50MB)">
<polygon fill="#f8f8f8" stroke="black" points="3217,-236 3099,-236 3099,-196 3217,-196 3217,-236"/>
<text text-anchor="middle" x="3158" y="-221.2" font-family="Times Roman,serif" font-size="12.00">reflect.cvtBytesString</text>
<text text-anchor="middle" x="3158" y="-205.2" font-family="Times Roman,serif" font-size="12.00">30.50MB(1.64%)</text>
</a>
</g>
<!-- NN15_0 -->
<g id="node78" class="node"><title>NN15_0</title>
<a xlink:title="12.50MB">
<polygon fill="#f8f8f8" stroke="black" points="3185,-131 3135,-131 3131,-127 3131,-95 3181,-95 3185,-99 3185,-131"/>
<polyline fill="none" stroke="black" points="3181,-127 3131,-127 "/>
<polyline fill="none" stroke="black" points="3181,-127 3181,-95 "/>
<polyline fill="none" stroke="black" points="3181,-127 3185,-131 "/>
<text text-anchor="middle" x="3158" y="-110.8" font-family="Times Roman,serif" font-size="8.00">16B</text>
</a>
</g>
<!-- N15&#45;&gt;NN15_0 -->
<g id="edge63" class="edge"><title>N15&#45;&gt;NN15_0</title>
<a xlink:title=" 12.50MB">
<path fill="none" stroke="black" d="M3158,-195.651C3158,-180.114 3158,-158.519 3158,-141.3"/>
<polygon fill="black" stroke="black" points="3161.5,-141.236 3158,-131.236 3154.5,-141.236 3161.5,-141.236"/>
</a>
<a xlink:title=" 12.50MB">
<text text-anchor="middle" x="3186.5" y="-158.9" font-family="Times Roman,serif" font-size="14.00"> 12.50MB</text>
</a>
</g>
<!-- N16 -->
<g id="node80" class="node"><title>N16</title>
<a xlink:title="github.com/boltdb/bolt.(*freelist).reindex (22MB)">
<polygon fill="#f8f8f8" stroke="black" points="3225,-784 3015,-784 3015,-744 3225,-744 3225,-784"/>
<text text-anchor="middle" x="3120" y="-769.2" font-family="Times Roman,serif" font-size="12.00">github.com/boltdb/bolt.(*freelist).reindex</text>
<text text-anchor="middle" x="3120" y="-753.2" font-family="Times Roman,serif" font-size="12.00">22MB(1.18%)</text>
</a>
</g>
<!-- NN16_0 -->
<g id="node81" class="node"><title>NN16_0</title>
<a xlink:title="22MB">
<polygon fill="#f8f8f8" stroke="black" points="3147,-668 3097,-668 3093,-664 3093,-632 3143,-632 3147,-636 3147,-668"/>
<polyline fill="none" stroke="black" points="3143,-664 3093,-664 "/>
<polyline fill="none" stroke="black" points="3143,-664 3143,-632 "/>
<polyline fill="none" stroke="black" points="3143,-664 3147,-668 "/>
<text text-anchor="middle" x="3120" y="-647.8" font-family="Times Roman,serif" font-size="8.00">5.50MB</text>
</a>
</g>
<!-- N16&#45;&gt;NN16_0 -->
<g id="edge65" class="edge"><title>N16&#45;&gt;NN16_0</title>
<a xlink:title=" 22MB">
<path fill="none" stroke="black" d="M3120,-743.882C3120,-725.676 3120,-698.674 3120,-678.296"/>
<polygon fill="black" stroke="black" points="3123.5,-678.04 3120,-668.04 3116.5,-678.04 3123.5,-678.04"/>
</a>
<a xlink:title=" 22MB">
<text text-anchor="middle" x="3140" y="-708.9" font-family="Times Roman,serif" font-size="14.00"> 22MB</text>
</a>
</g>
<!-- N17 -->
<g id="node83" class="node"><title>N17</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Bucket (39.76MB)">
<polygon fill="#f8f8f8" stroke="black" points="1219,-905 1009,-905 1009,-849 1219,-849 1219,-905"/>
<text text-anchor="middle" x="1114" y="-890.2" font-family="Times Roman,serif" font-size="12.00">github.com/boltdb/bolt.(*Bucket).Bucket</text>
<text text-anchor="middle" x="1114" y="-874.2" font-family="Times Roman,serif" font-size="12.00">20.26MB(1.09%)</text>
<text text-anchor="middle" x="1114" y="-858.2" font-family="Times Roman,serif" font-size="12.00">of 39.76MB(2.13%)</text>
</a>
</g>
<!-- N18 -->
<g id="node84" class="node"><title>N18</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).openBucket (19.50MB)">
<polygon fill="#f8f8f8" stroke="black" points="1231,-784 997,-784 997,-744 1231,-744 1231,-784"/>
<text text-anchor="middle" x="1114" y="-769.2" font-family="Times Roman,serif" font-size="12.00">github.com/boltdb/bolt.(*Bucket).openBucket</text>
<text text-anchor="middle" x="1114" y="-753.2" font-family="Times Roman,serif" font-size="12.00">19.50MB(1.05%)</text>
</a>
</g>
<!-- N17&#45;&gt;N18 -->
<g id="edge153" class="edge"><title>N17&#45;&gt;N18</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Bucket &#45;&gt; github.com/boltdb/bolt.(*Bucket).openBucket (19.50MB)">
<path fill="none" stroke="black" d="M1114,-848.777C1114,-832.26 1114,-811.401 1114,-794.506"/>
<polygon fill="black" stroke="black" points="1117.5,-794.062 1114,-784.062 1110.5,-794.062 1117.5,-794.062"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Bucket &#45;&gt; github.com/boltdb/bolt.(*Bucket).openBucket (19.50MB)">
<text text-anchor="middle" x="1142.5" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 19.50MB</text>
</a>
</g>
<!-- NN18_0 -->
<g id="node85" class="node"><title>NN18_0</title>
<a xlink:title="11.50MB">
<polygon fill="#f8f8f8" stroke="black" points="1141,-668 1091,-668 1087,-664 1087,-632 1137,-632 1141,-636 1141,-668"/>
<polyline fill="none" stroke="black" points="1137,-664 1087,-664 "/>
<polyline fill="none" stroke="black" points="1137,-664 1137,-632 "/>
<polyline fill="none" stroke="black" points="1137,-664 1141,-668 "/>
<text text-anchor="middle" x="1114" y="-647.8" font-family="Times Roman,serif" font-size="8.00">48B</text>
</a>
</g>
<!-- N18&#45;&gt;NN18_0 -->
<g id="edge67" class="edge"><title>N18&#45;&gt;NN18_0</title>
<a xlink:title=" 11.50MB">
<path fill="none" stroke="black" d="M1114,-743.882C1114,-725.676 1114,-698.674 1114,-678.296"/>
<polygon fill="black" stroke="black" points="1117.5,-678.04 1114,-668.04 1110.5,-678.04 1117.5,-678.04"/>
</a>
<a xlink:title=" 11.50MB">
<text text-anchor="middle" x="1142.5" y="-708.9" font-family="Times Roman,serif" font-size="14.00"> 11.50MB</text>
</a>
</g>
<!-- N19 -->
<g id="node87" class="node"><title>N19</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/wal.(*Partition).prepareSeriesToFlush (16.25MB)">
<polygon fill="#f8f8f8" stroke="black" points="4062,-1219 3692,-1219 3692,-1181 4062,-1181 4062,-1219"/>
<text text-anchor="middle" x="3877" y="-1205.1" font-family="Times Roman,serif" font-size="11.00">github.com/influxdb/influxdb/tsdb/engine/wal.(*Partition).prepareSeriesToFlush</text>
<text text-anchor="middle" x="3877" y="-1190.1" font-family="Times Roman,serif" font-size="11.00">16.25MB(0.87%)</text>
</a>
</g>
<!-- NN19_0 -->
<g id="node88" class="node"><title>NN19_0</title>
<a xlink:title="10.50MB">
<polygon fill="#f8f8f8" stroke="black" points="3904,-1011 3854,-1011 3850,-1007 3850,-975 3900,-975 3904,-979 3904,-1011"/>
<polyline fill="none" stroke="black" points="3900,-1007 3850,-1007 "/>
<polyline fill="none" stroke="black" points="3900,-1007 3900,-975 "/>
<polyline fill="none" stroke="black" points="3900,-1007 3904,-1011 "/>
<text text-anchor="middle" x="3877" y="-990.8" font-family="Times Roman,serif" font-size="8.00">10.50MB</text>
</a>
</g>
<!-- N19&#45;&gt;NN19_0 -->
<g id="edge69" class="edge"><title>N19&#45;&gt;NN19_0</title>
<a xlink:title=" 10.50MB">
<path fill="none" stroke="black" d="M3877,-1180.9C3877,-1144.27 3877,-1064 3877,-1021.19"/>
<polygon fill="black" stroke="black" points="3880.5,-1021.17 3877,-1011.17 3873.5,-1021.17 3880.5,-1021.17"/>
</a>
<a xlink:title=" 10.50MB">
<text text-anchor="middle" x="3905.5" y="-1044.9" font-family="Times Roman,serif" font-size="14.00"> 10.50MB</text>
</a>
</g>
<!-- N20 -->
<g id="node90" class="node"><title>N20</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).writeBlocks (570.69MB)">
<polygon fill="#f8f8f8" stroke="black" points="817,-1019.5 499,-1019.5 499,-966.5 817,-966.5 817,-1019.5"/>
<text text-anchor="middle" x="658" y="-1005.6" font-family="Times Roman,serif" font-size="11.00">github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).writeBlocks</text>
<text text-anchor="middle" x="658" y="-990.6" font-family="Times Roman,serif" font-size="11.00">15.51MB(0.83%)</text>
<text text-anchor="middle" x="658" y="-975.6" font-family="Times Roman,serif" font-size="11.00">of 570.69MB(30.64%)</text>
</a>
</g>
<!-- N23 -->
<g id="node97" class="node"><title>N23</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Put (555.19MB)">
<polygon fill="#f8f8f8" stroke="black" points="743,-900.5 573,-900.5 573,-853.5 743,-853.5 743,-900.5"/>
<text text-anchor="middle" x="658" y="-887.5" font-family="Times Roman,serif" font-size="10.00">github.com/boltdb/bolt.(*Bucket).Put</text>
<text text-anchor="middle" x="658" y="-874.5" font-family="Times Roman,serif" font-size="10.00">3MB(0.16%)</text>
<text text-anchor="middle" x="658" y="-861.5" font-family="Times Roman,serif" font-size="10.00">of 555.19MB(29.80%)</text>
</a>
</g>
<!-- N20&#45;&gt;N23 -->
<g id="edge81" class="edge"><title>N20&#45;&gt;N23</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).writeBlocks &#45;&gt; github.com/boltdb/bolt.(*Bucket).Put (555.19MB)">
<path fill="none" stroke="black" stroke-width="2" d="M658,-966.387C658,-949.991 658,-928.806 658,-911.176"/>
<polygon fill="black" stroke="black" points="661.5,-910.732 658,-900.732 654.5,-910.732 661.5,-910.732"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).writeBlocks &#45;&gt; github.com/boltdb/bolt.(*Bucket).Put (555.19MB)">
<text text-anchor="middle" x="690" y="-934.9" font-family="Times Roman,serif" font-size="14.00"> 555.19MB</text>
</a>
</g>
<!-- N21&#45;&gt;N11 -->
<g id="edge129" class="edge"><title>N21&#45;&gt;N11</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateSeriesIndexIfNotExists &#45;&gt; github.com/influxdb/influxdb/tsdb.(*Measurement).AddSeries (38.51MB)">
<path fill="none" stroke="black" d="M2729.11,-623.451C2709.22,-607.557 2686.77,-585.501 2675,-560 2658.57,-524.394 2658.96,-478.415 2661.69,-448.34"/>
<polygon fill="black" stroke="black" points="2665.21,-448.338 2662.77,-438.027 2658.25,-447.607 2665.21,-448.338"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*DatabaseIndex).CreateSeriesIndexIfNotExists &#45;&gt; github.com/influxdb/influxdb/tsdb.(*Measurement).AddSeries (38.51MB)">
<text text-anchor="middle" x="2703.5" y="-523.9" font-family="Times Roman,serif" font-size="14.00"> 38.51MB</text>
</a>
</g>
<!-- NN21_0 -->
<g id="node92" class="node"><title>NN21_0</title>
<a xlink:title="13MB">
<polygon fill="#f8f8f8" stroke="black" points="2795,-545 2745,-545 2741,-541 2741,-509 2791,-509 2795,-513 2795,-545"/>
<polyline fill="none" stroke="black" points="2791,-541 2741,-541 "/>
<polyline fill="none" stroke="black" points="2791,-541 2791,-509 "/>
<polyline fill="none" stroke="black" points="2791,-541 2795,-545 "/>
<text text-anchor="middle" x="2768" y="-524.8" font-family="Times Roman,serif" font-size="8.00">13MB</text>
</a>
</g>
<!-- N21&#45;&gt;NN21_0 -->
<g id="edge71" class="edge"><title>N21&#45;&gt;NN21_0</title>
<a xlink:title=" 13MB">
<path fill="none" stroke="black" d="M2768,-623.311C2768,-603.307 2768,-575.977 2768,-555.54"/>
<polygon fill="black" stroke="black" points="2771.5,-555.271 2768,-545.271 2764.5,-555.271 2771.5,-555.271"/>
</a>
<a xlink:title=" 13MB">
<text text-anchor="middle" x="2788" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 13MB</text>
</a>
</g>
<!-- N22 -->
<g id="node94" class="node"><title>N22</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*Shard).WritePoints (63.57MB)">
<polygon fill="#f8f8f8" stroke="black" points="3677,-1019.5 3417,-1019.5 3417,-966.5 3677,-966.5 3677,-1019.5"/>
<text text-anchor="middle" x="3547" y="-1005.6" font-family="Times Roman,serif" font-size="11.00">github.com/influxdb/influxdb/tsdb.(*Shard).WritePoints</text>
<text text-anchor="middle" x="3547" y="-990.6" font-family="Times Roman,serif" font-size="11.00">11MB(0.59%)</text>
<text text-anchor="middle" x="3547" y="-975.6" font-family="Times Roman,serif" font-size="11.00">of 63.57MB(3.41%)</text>
</a>
</g>
<!-- N22&#45;&gt;N7 -->
<g id="edge115" class="edge"><title>N22&#45;&gt;N7</title>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*Shard).WritePoints ... github.com/influxdb/influxdb/tsdb/engine/wal.(*Partition).addToCache (52.57MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M3504.3,-966.31C3485.43,-952.073 3465.06,-932.779 3454,-910 3436.74,-874.44 3437.14,-828.15 3440.11,-797.323"/>
<polygon fill="black" stroke="black" points="3443.62,-797.431 3441.24,-787.107 3436.66,-796.66 3443.62,-797.431"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/tsdb.(*Shard).WritePoints ... github.com/influxdb/influxdb/tsdb/engine/wal.(*Partition).addToCache (52.57MB)">
<text text-anchor="middle" x="3482.5" y="-873.9" font-family="Times Roman,serif" font-size="14.00"> 52.57MB</text>
</a>
</g>
<!-- NN22_0 -->
<g id="node95" class="node"><title>NN22_0</title>
<a xlink:title="11MB">
<polygon fill="#f8f8f8" stroke="black" points="3574,-895 3524,-895 3520,-891 3520,-859 3570,-859 3574,-863 3574,-895"/>
<polyline fill="none" stroke="black" points="3570,-891 3520,-891 "/>
<polyline fill="none" stroke="black" points="3570,-891 3570,-859 "/>
<polyline fill="none" stroke="black" points="3570,-891 3574,-895 "/>
<text text-anchor="middle" x="3547" y="-874.8" font-family="Times Roman,serif" font-size="8.00">96B</text>
</a>
</g>
<!-- N22&#45;&gt;NN22_0 -->
<g id="edge73" class="edge"><title>N22&#45;&gt;NN22_0</title>
<a xlink:title=" 11MB">
<path fill="none" stroke="black" d="M3547,-966.387C3547,-948.159 3547,-924.012 3547,-905.41"/>
<polygon fill="black" stroke="black" points="3550.5,-905.186 3547,-895.186 3543.5,-905.186 3550.5,-905.186"/>
</a>
<a xlink:title=" 11MB">
<text text-anchor="middle" x="3567" y="-934.9" font-family="Times Roman,serif" font-size="14.00"> 11MB</text>
</a>
</g>
<!-- N23&#45;&gt;N1 -->
<g id="edge83" class="edge"><title>N23&#45;&gt;N1</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Put &#45;&gt; github.com/boltdb/bolt.(*node).put (481.15MB)">
<path fill="none" stroke="black" stroke-width="2" d="M658,-853.136C658,-815.489 658,-741.717 658,-694.2"/>
<polygon fill="black" stroke="black" points="661.5,-694.189 658,-684.189 654.5,-694.189 661.5,-694.189"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Put &#45;&gt; github.com/boltdb/bolt.(*node).put (481.15MB)">
<text text-anchor="middle" x="690" y="-760.9" font-family="Times Roman,serif" font-size="14.00"> 481.15MB</text>
</a>
</g>
<!-- N34 -->
<g id="node108" class="node"><title>N34</title>
<a xlink:title="github.com/boltdb/bolt.(*Cursor).node (88.13MB)">
<polygon fill="#f8f8f8" stroke="black" points="461,-782 323,-782 323,-746 461,-746 461,-782"/>
<text text-anchor="middle" x="392" y="-766.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.(*Cursor).node</text>
<text text-anchor="middle" x="392" y="-756.8" font-family="Times Roman,serif" font-size="8.00">0 of 88.13MB(4.73%)</text>
</a>
</g>
<!-- N23&#45;&gt;N34 -->
<g id="edge109" class="edge"><title>N23&#45;&gt;N34</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Put &#45;&gt; github.com/boltdb/bolt.(*Cursor).node (71.03MB)">
<path fill="none" stroke="black" d="M602.561,-853.449C555.937,-833.642 489.764,-805.531 444.104,-786.135"/>
<polygon fill="black" stroke="black" points="445.259,-782.822 434.687,-782.134 442.522,-789.265 445.259,-782.822"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).Put &#45;&gt; github.com/boltdb/bolt.(*Cursor).node (71.03MB)">
<text text-anchor="middle" x="561.5" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 71.03MB</text>
</a>
</g>
<!-- N24 -->
<g id="node98" class="node"><title>N24</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).spill (384.15MB)">
<polygon fill="#f8f8f8" stroke="black" points="991,-900.5 815,-900.5 815,-853.5 991,-853.5 991,-900.5"/>
<text text-anchor="middle" x="903" y="-887.5" font-family="Times Roman,serif" font-size="10.00">github.com/boltdb/bolt.(*Bucket).spill</text>
<text text-anchor="middle" x="903" y="-874.5" font-family="Times Roman,serif" font-size="10.00">2.50MB(0.13%)</text>
<text text-anchor="middle" x="903" y="-861.5" font-family="Times Roman,serif" font-size="10.00">of 384.15MB(20.62%)</text>
</a>
</g>
<!-- N26 -->
<g id="node100" class="node"><title>N26</title>
<a xlink:title="github.com/boltdb/bolt.(*node).spill (361.05MB)">
<polygon fill="#f8f8f8" stroke="black" points="975,-787.5 831,-787.5 831,-740.5 975,-740.5 975,-787.5"/>
<text text-anchor="middle" x="903" y="-775.4" font-family="Times Roman,serif" font-size="9.00">github.com/boltdb/bolt.(*node).spill</text>
<text text-anchor="middle" x="903" y="-762.4" font-family="Times Roman,serif" font-size="9.00">1MB(0.054%)</text>
<text text-anchor="middle" x="903" y="-749.4" font-family="Times Roman,serif" font-size="9.00">of 361.05MB(19.38%)</text>
</a>
</g>
<!-- N24&#45;&gt;N26 -->
<g id="edge89" class="edge"><title>N24&#45;&gt;N26</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).spill &#45;&gt; github.com/boltdb/bolt.(*node).spill (361.05MB)">
<path fill="none" stroke="black" d="M903,-853.311C903,-837.19 903,-815.614 903,-797.707"/>
<polygon fill="black" stroke="black" points="906.5,-797.657 903,-787.657 899.5,-797.657 906.5,-797.657"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).spill &#45;&gt; github.com/boltdb/bolt.(*node).spill (361.05MB)">
<text text-anchor="middle" x="935" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 361.05MB</text>
</a>
</g>
<!-- N24&#45;&gt;N34 -->
<g id="edge155" class="edge"><title>N24&#45;&gt;N34</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).spill &#45;&gt; github.com/boltdb/bolt.(*Cursor).node (17.10MB)">
<path fill="none" stroke="black" d="M814.869,-856.236C753.112,-841.811 668.608,-822.326 594,-806 553.527,-797.144 508.392,-787.717 471.068,-780.042"/>
<polygon fill="black" stroke="black" points="471.758,-776.611 461.259,-778.028 470.351,-783.468 471.758,-776.611"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).spill &#45;&gt; github.com/boltdb/bolt.(*Cursor).node (17.10MB)">
<text text-anchor="middle" x="707.5" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 17.10MB</text>
</a>
</g>
<!-- N25 -->
<g id="node99" class="node"><title>N25</title>
<a xlink:title="github.com/boltdb/bolt.(*Tx).allocate (349.14MB)">
<polygon fill="#f8f8f8" stroke="black" points="1032,-673.5 860,-673.5 860,-626.5 1032,-626.5 1032,-673.5"/>
<text text-anchor="middle" x="946" y="-660.5" font-family="Times Roman,serif" font-size="10.00">github.com/boltdb/bolt.(*Tx).allocate</text>
<text text-anchor="middle" x="946" y="-647.5" font-family="Times Roman,serif" font-size="10.00">2.28MB(0.12%)</text>
<text text-anchor="middle" x="946" y="-634.5" font-family="Times Roman,serif" font-size="10.00">of 349.14MB(18.74%)</text>
</a>
</g>
<!-- N25&#45;&gt;N2 -->
<g id="edge93" class="edge"><title>N25&#45;&gt;N2</title>
<a xlink:title="github.com/boltdb/bolt.(*Tx).allocate &#45;&gt; github.com/boltdb/bolt.(*DB).allocate (346.86MB)">
<path fill="none" stroke="black" d="M948.892,-626.284C950.869,-610.071 953.544,-588.136 955.877,-569.008"/>
<polygon fill="black" stroke="black" points="959.359,-569.366 957.096,-559.016 952.411,-568.518 959.359,-569.366"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Tx).allocate &#45;&gt; github.com/boltdb/bolt.(*DB).allocate (346.86MB)">
<text text-anchor="middle" x="987" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 346.86MB</text>
</a>
</g>
<!-- N26&#45;&gt;N1 -->
<g id="edge157" class="edge"><title>N26&#45;&gt;N1</title>
<a xlink:title="github.com/boltdb/bolt.(*node).spill &#45;&gt; github.com/boltdb/bolt.(*node).put (7.03MB)">
<path fill="none" stroke="black" d="M852.236,-740.379C820.063,-725.409 777.696,-705.695 740.743,-688.501"/>
<polygon fill="black" stroke="black" points="742.017,-685.234 731.474,-684.188 739.064,-691.58 742.017,-685.234"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*node).spill &#45;&gt; github.com/boltdb/bolt.(*node).put (7.03MB)">
<text text-anchor="middle" x="835" y="-708.9" font-family="Times Roman,serif" font-size="14.00"> 7.03MB</text>
</a>
</g>
<!-- N26&#45;&gt;N25 -->
<g id="edge91" class="edge"><title>N26&#45;&gt;N25</title>
<a xlink:title="github.com/boltdb/bolt.(*node).spill &#45;&gt; github.com/boltdb/bolt.(*Tx).allocate (349.14MB)">
<path fill="none" stroke="black" d="M911.91,-740.379C918.165,-723.795 926.616,-701.389 933.539,-683.036"/>
<polygon fill="black" stroke="black" points="936.847,-684.182 937.102,-673.591 930.298,-681.712 936.847,-684.182"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*node).spill &#45;&gt; github.com/boltdb/bolt.(*Tx).allocate (349.14MB)">
<text text-anchor="middle" x="958" y="-708.9" font-family="Times Roman,serif" font-size="14.00"> 349.14MB</text>
</a>
</g>
<!-- N27 -->
<g id="node101" class="node"><title>N27</title>
<a xlink:title="encoding/json.(*decodeState).indirect (45.50MB)">
<polygon fill="#f8f8f8" stroke="black" points="3373,-234 3235,-234 3235,-198 3373,-198 3373,-234"/>
<text text-anchor="middle" x="3304" y="-218.8" font-family="Times Roman,serif" font-size="8.00">encoding/json.(*decodeState).indirect</text>
<text text-anchor="middle" x="3304" y="-208.8" font-family="Times Roman,serif" font-size="8.00">0 of 45.50MB(2.44%)</text>
</a>
</g>
<!-- N27&#45;&gt;N9 -->
<g id="edge119" class="edge"><title>N27&#45;&gt;N9</title>
<a xlink:title="encoding/json.(*decodeState).indirect ... reflect.unsafe_New (45.50MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M3304,-197.586C3304,-182.827 3304,-161.781 3304,-144.375"/>
<polygon fill="black" stroke="black" points="3307.5,-144.096 3304,-134.096 3300.5,-144.096 3307.5,-144.096"/>
</a>
<a xlink:title="encoding/json.(*decodeState).indirect ... reflect.unsafe_New (45.50MB)">
<text text-anchor="middle" x="3332.5" y="-158.9" font-family="Times Roman,serif" font-size="14.00"> 45.50MB</text>
</a>
</g>
<!-- N28 -->
<g id="node102" class="node"><title>N28</title>
<a xlink:title="encoding/json.(*decodeState).literal (34MB)">
<polygon fill="#f8f8f8" stroke="black" points="3389,-337 3257,-337 3257,-301 3389,-301 3389,-337"/>
<text text-anchor="middle" x="3323" y="-321.8" font-family="Times Roman,serif" font-size="8.00">encoding/json.(*decodeState).literal</text>
<text text-anchor="middle" x="3323" y="-311.8" font-family="Times Roman,serif" font-size="8.00">0 of 34MB(1.83%)</text>
</a>
</g>
<!-- N28&#45;&gt;N13 -->
<g id="edge133" class="edge"><title>N28&#45;&gt;N13</title>
<a xlink:title="encoding/json.(*decodeState).literal &#45;&gt; encoding/json.(*decodeState).literalStore (34MB)">
<path fill="none" stroke="black" d="M3356,-300.823C3385.62,-284.511 3429.42,-260.383 3462.75,-242.026"/>
<polygon fill="black" stroke="black" points="3464.78,-244.903 3471.85,-237.013 3461.4,-238.772 3464.78,-244.903"/>
</a>
<a xlink:title="encoding/json.(*decodeState).literal &#45;&gt; encoding/json.(*decodeState).literalStore (34MB)">
<text text-anchor="middle" x="3447" y="-266.9" font-family="Times Roman,serif" font-size="14.00"> 34MB</text>
</a>
</g>
<!-- N29 -->
<g id="node103" class="node"><title>N29</title>
<a xlink:title="encoding/json.(*decodeState).object (279.53MB)">
<polygon fill="#f8f8f8" stroke="black" points="3092,-337 2960,-337 2960,-301 3092,-301 3092,-337"/>
<text text-anchor="middle" x="3026" y="-321.8" font-family="Times Roman,serif" font-size="8.00">encoding/json.(*decodeState).object</text>
<text text-anchor="middle" x="3026" y="-311.8" font-family="Times Roman,serif" font-size="8.00">0 of 279.53MB(15.01%)</text>
</a>
</g>
<!-- N29&#45;&gt;N4 -->
<g id="edge105" class="edge"><title>N29&#45;&gt;N4</title>
<a xlink:title="encoding/json.(*decodeState).object ... reflect.mapassign (130.03MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M2991.74,-300.878C2980.72,-294.648 2968.62,-287.376 2958,-280 2944.41,-270.564 2930.29,-259.3 2917.9,-248.871"/>
<polygon fill="black" stroke="black" points="2919.92,-245.99 2910.04,-242.166 2915.38,-251.317 2919.92,-245.99"/>
</a>
<a xlink:title="encoding/json.(*decodeState).object ... reflect.mapassign (130.03MB)">
<text text-anchor="middle" x="2990" y="-266.9" font-family="Times Roman,serif" font-size="14.00"> 130.03MB</text>
</a>
</g>
<!-- N29&#45;&gt;N10 -->
<g id="edge127" class="edge"><title>N29&#45;&gt;N10</title>
<a xlink:title="encoding/json.(*decodeState).object ... reflect.makemap (39.50MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M3026,-300.586C3026,-285.827 3026,-264.781 3026,-247.375"/>
<polygon fill="black" stroke="black" points="3029.5,-247.096 3026,-237.096 3022.5,-247.096 3029.5,-247.096"/>
</a>
<a xlink:title="encoding/json.(*decodeState).object ... reflect.makemap (39.50MB)">
<text text-anchor="middle" x="3054.5" y="-266.9" font-family="Times Roman,serif" font-size="14.00"> 39.50MB</text>
</a>
</g>
<!-- N29&#45;&gt;N15 -->
<g id="edge141" class="edge"><title>N29&#45;&gt;N15</title>
<a xlink:title="encoding/json.(*decodeState).object ... reflect.cvtBytesString (30.50MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M3056.45,-300.911C3066.43,-294.627 3077.4,-287.314 3087,-280 3101.76,-268.754 3117.16,-255.125 3129.84,-243.339"/>
<polygon fill="black" stroke="black" points="3132.46,-245.677 3137.35,-236.276 3127.67,-240.577 3132.46,-245.677"/>
</a>
<a xlink:title="encoding/json.(*decodeState).object ... reflect.cvtBytesString (30.50MB)">
<text text-anchor="middle" x="3139.5" y="-266.9" font-family="Times Roman,serif" font-size="14.00"> 30.50MB</text>
</a>
</g>
<!-- N29&#45;&gt;N27 -->
<g id="edge121" class="edge"><title>N29&#45;&gt;N27</title>
<a xlink:title="encoding/json.(*decodeState).object &#45;&gt; encoding/json.(*decodeState).indirect (45.50MB)">
<path fill="none" stroke="black" d="M3092.24,-304.144C3117.54,-297.737 3146.43,-289.516 3172,-280 3203.04,-268.45 3236.6,-252.122 3262.12,-238.849"/>
<polygon fill="black" stroke="black" points="3263.91,-241.861 3271.13,-234.112 3260.65,-235.664 3263.91,-241.861"/>
</a>
<a xlink:title="encoding/json.(*decodeState).object &#45;&gt; encoding/json.(*decodeState).indirect (45.50MB)">
<text text-anchor="middle" x="3244.5" y="-266.9" font-family="Times Roman,serif" font-size="14.00"> 45.50MB</text>
</a>
</g>
<!-- N31 -->
<g id="node105" class="node"><title>N31</title>
<a xlink:title="encoding/json.(*decodeState).value (279.53MB)">
<polygon fill="#f8f8f8" stroke="black" points="3091,-435 2961,-435 2961,-399 3091,-399 3091,-435"/>
<text text-anchor="middle" x="3026" y="-419.8" font-family="Times Roman,serif" font-size="8.00">encoding/json.(*decodeState).value</text>
<text text-anchor="middle" x="3026" y="-409.8" font-family="Times Roman,serif" font-size="8.00">0 of 279.53MB(15.01%)</text>
</a>
</g>
<!-- N29&#45;&gt;N31 -->
<g id="edge135" class="edge"><title>N29&#45;&gt;N31</title>
<a xlink:title="encoding/json.(*decodeState).object &#45;&gt; encoding/json.(*decodeState).value (34MB)">
<path fill="none" stroke="black" d="M3067.88,-337.019C3085.59,-347.43 3100.24,-361.688 3091,-378 3087.81,-383.637 3083.44,-388.547 3078.47,-392.803"/>
<polygon fill="black" stroke="black" points="3076.15,-390.168 3070.24,-398.962 3080.34,-395.773 3076.15,-390.168"/>
</a>
<a xlink:title="encoding/json.(*decodeState).object &#45;&gt; encoding/json.(*decodeState).value (34MB)">
<text text-anchor="middle" x="3113" y="-364.9" font-family="Times Roman,serif" font-size="14.00"> 34MB</text>
</a>
</g>
<!-- N30 -->
<g id="node104" class="node"><title>N30</title>
<a xlink:title="encoding/json.(*decodeState).unmarshal (279.53MB)">
<polygon fill="#f8f8f8" stroke="black" points="3099,-545 2953,-545 2953,-509 3099,-509 3099,-545"/>
<text text-anchor="middle" x="3026" y="-529.8" font-family="Times Roman,serif" font-size="8.00">encoding/json.(*decodeState).unmarshal</text>
<text text-anchor="middle" x="3026" y="-519.8" font-family="Times Roman,serif" font-size="8.00">0 of 279.53MB(15.01%)</text>
</a>
</g>
<!-- N30&#45;&gt;N31 -->
<g id="edge95" class="edge"><title>N30&#45;&gt;N31</title>
<a xlink:title="encoding/json.(*decodeState).unmarshal &#45;&gt; encoding/json.(*decodeState).value (279.53MB)">
<path fill="none" stroke="black" d="M3026,-508.836C3026,-491.559 3026,-465.309 3026,-445.292"/>
<polygon fill="black" stroke="black" points="3029.5,-445.191 3026,-435.191 3022.5,-445.191 3029.5,-445.191"/>
</a>
<a xlink:title="encoding/json.(*decodeState).unmarshal &#45;&gt; encoding/json.(*decodeState).value (279.53MB)">
<text text-anchor="middle" x="3058" y="-462.9" font-family="Times Roman,serif" font-size="14.00"> 279.53MB</text>
</a>
</g>
<!-- N31&#45;&gt;N28 -->
<g id="edge137" class="edge"><title>N31&#45;&gt;N28</title>
<a xlink:title="encoding/json.(*decodeState).value &#45;&gt; encoding/json.(*decodeState).literal (34MB)">
<path fill="none" stroke="black" d="M3080.82,-398.911C3131.08,-382.328 3205.53,-357.762 3258.6,-340.25"/>
<polygon fill="black" stroke="black" points="3259.85,-343.524 3268.25,-337.066 3257.66,-336.876 3259.85,-343.524"/>
</a>
<a xlink:title="encoding/json.(*decodeState).value &#45;&gt; encoding/json.(*decodeState).literal (34MB)">
<text text-anchor="middle" x="3221" y="-364.9" font-family="Times Roman,serif" font-size="14.00"> 34MB</text>
</a>
</g>
<!-- N31&#45;&gt;N29 -->
<g id="edge103" class="edge"><title>N31&#45;&gt;N29</title>
<a xlink:title="encoding/json.(*decodeState).value &#45;&gt; encoding/json.(*decodeState).object (245.53MB)">
<path fill="none" stroke="black" d="M3026,-398.567C3026,-384.103 3026,-363.724 3026,-347.211"/>
<polygon fill="black" stroke="black" points="3029.5,-347.019 3026,-337.019 3022.5,-347.019 3029.5,-347.019"/>
</a>
<a xlink:title="encoding/json.(*decodeState).value &#45;&gt; encoding/json.(*decodeState).object (245.53MB)">
<text text-anchor="middle" x="3058" y="-364.9" font-family="Times Roman,serif" font-size="14.00"> 245.53MB</text>
</a>
</g>
<!-- N32&#45;&gt;N30 -->
<g id="edge97" class="edge"><title>N32&#45;&gt;N30</title>
<a xlink:title="encoding/json.Unmarshal &#45;&gt; encoding/json.(*decodeState).unmarshal (279.53MB)">
<path fill="none" stroke="black" d="M3026,-631.851C3026,-611.684 3026,-578.864 3026,-555.313"/>
<polygon fill="black" stroke="black" points="3029.5,-555.223 3026,-545.224 3022.5,-555.224 3029.5,-555.223"/>
</a>
<a xlink:title="encoding/json.Unmarshal &#45;&gt; encoding/json.(*decodeState).unmarshal (279.53MB)">
<text text-anchor="middle" x="3058" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 279.53MB</text>
</a>
</g>
<!-- N33 -->
<g id="node107" class="node"><title>N33</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).CreateBucketIfNotExists (39.76MB)">
<polygon fill="#f8f8f8" stroke="black" points="1201,-1011 995,-1011 995,-975 1201,-975 1201,-1011"/>
<text text-anchor="middle" x="1098" y="-995.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.(*Bucket).CreateBucketIfNotExists</text>
<text text-anchor="middle" x="1098" y="-985.8" font-family="Times Roman,serif" font-size="8.00">0 of 39.76MB(2.13%)</text>
</a>
</g>
<!-- N33&#45;&gt;N17 -->
<g id="edge123" class="edge"><title>N33&#45;&gt;N17</title>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).CreateBucketIfNotExists &#45;&gt; github.com/boltdb/bolt.(*Bucket).Bucket (39.76MB)">
<path fill="none" stroke="black" d="M1100.5,-974.875C1102.69,-959.03 1105.93,-935.491 1108.69,-915.468"/>
<polygon fill="black" stroke="black" points="1112.19,-915.761 1110.09,-905.377 1105.25,-914.805 1112.19,-915.761"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Bucket).CreateBucketIfNotExists &#45;&gt; github.com/boltdb/bolt.(*Bucket).Bucket (39.76MB)">
<text text-anchor="middle" x="1135.5" y="-934.9" font-family="Times Roman,serif" font-size="14.00"> 39.76MB</text>
</a>
</g>
<!-- N34&#45;&gt;N8 -->
<g id="edge113" class="edge"><title>N34&#45;&gt;N8</title>
<a xlink:title="github.com/boltdb/bolt.(*Cursor).node &#45;&gt; github.com/boltdb/bolt.(*Bucket).node (58.03MB)">
<path fill="none" stroke="black" d="M336.321,-745.852C307.214,-733.298 273.987,-713.458 256,-684 235.112,-649.791 235.222,-603.183 239.116,-569.649"/>
<polygon fill="black" stroke="black" points="242.592,-570.061 240.426,-559.69 235.651,-569.148 242.592,-570.061"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Cursor).node &#45;&gt; github.com/boltdb/bolt.(*Bucket).node (58.03MB)">
<text text-anchor="middle" x="284.5" y="-646.9" font-family="Times Roman,serif" font-size="14.00"> 58.03MB</text>
</a>
</g>
<!-- N39 -->
<g id="node113" class="node"><title>N39</title>
<a xlink:title="github.com/boltdb/bolt.(*node).childAt (30.10MB)">
<polygon fill="#f8f8f8" stroke="black" points="462,-668 322,-668 322,-632 462,-632 462,-668"/>
<text text-anchor="middle" x="392" y="-652.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.(*node).childAt</text>
<text text-anchor="middle" x="392" y="-642.8" font-family="Times Roman,serif" font-size="8.00">0 of 30.10MB(1.62%)</text>
</a>
</g>
<!-- N34&#45;&gt;N39 -->
<g id="edge143" class="edge"><title>N34&#45;&gt;N39</title>
<a xlink:title="github.com/boltdb/bolt.(*Cursor).node &#45;&gt; github.com/boltdb/bolt.(*node).childAt (30.10MB)">
<path fill="none" stroke="black" d="M392,-745.936C392,-727.783 392,-699.536 392,-678.386"/>
<polygon fill="black" stroke="black" points="395.5,-678.357 392,-668.357 388.5,-678.357 395.5,-678.357"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Cursor).node &#45;&gt; github.com/boltdb/bolt.(*node).childAt (30.10MB)">
<text text-anchor="middle" x="420.5" y="-708.9" font-family="Times Roman,serif" font-size="14.00"> 30.10MB</text>
</a>
</g>
<!-- N35 -->
<g id="node109" class="node"><title>N35</title>
<a xlink:title="github.com/boltdb/bolt.(*DB).Update (1003.60MB)">
<polygon fill="#f8f8f8" stroke="black" points="726,-1218 590,-1218 590,-1182 726,-1182 726,-1218"/>
<text text-anchor="middle" x="658" y="-1202.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.(*DB).Update</text>
<text text-anchor="middle" x="658" y="-1192.8" font-family="Times Roman,serif" font-size="8.00">0 of 1003.60MB(53.88%)</text>
</a>
</g>
<!-- N35&#45;&gt;N20 -->
<g id="edge79" class="edge"><title>N35&#45;&gt;N20</title>
<a xlink:title="github.com/boltdb/bolt.(*DB).Update ... github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).writeBlocks (570.69MB)">
<path fill="none" stroke="black" stroke-width="2" stroke-dasharray="1,5" d="M658,-1181.99C658,-1148.21 658,-1074.7 658,-1029.97"/>
<polygon fill="black" stroke="black" points="661.5,-1029.8 658,-1019.8 654.5,-1029.8 661.5,-1029.8"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*DB).Update ... github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).writeBlocks (570.69MB)">
<text text-anchor="middle" x="690" y="-1044.9" font-family="Times Roman,serif" font-size="14.00"> 570.69MB</text>
</a>
</g>
<!-- N35&#45;&gt;N33 -->
<g id="edge125" class="edge"><title>N35&#45;&gt;N33</title>
<a xlink:title="github.com/boltdb/bolt.(*DB).Update ... github.com/boltdb/bolt.(*Bucket).CreateBucketIfNotExists (39.76MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M696.277,-1181.99C776.566,-1144.22 962.397,-1056.79 1050.29,-1015.45"/>
<polygon fill="black" stroke="black" points="1051.94,-1018.54 1059.5,-1011.11 1048.96,-1012.2 1051.94,-1018.54"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*DB).Update ... github.com/boltdb/bolt.(*Bucket).CreateBucketIfNotExists (39.76MB)">
<text text-anchor="middle" x="1020.5" y="-1044.9" font-family="Times Roman,serif" font-size="14.00"> 39.76MB</text>
</a>
</g>
<!-- N37 -->
<g id="node111" class="node"><title>N37</title>
<a xlink:title="github.com/boltdb/bolt.(*Tx).Commit (384.15MB)">
<polygon fill="#f8f8f8" stroke="black" points="971,-1011 835,-1011 835,-975 971,-975 971,-1011"/>
<text text-anchor="middle" x="903" y="-995.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.(*Tx).Commit</text>
<text text-anchor="middle" x="903" y="-985.8" font-family="Times Roman,serif" font-size="8.00">0 of 384.15MB(20.62%)</text>
</a>
</g>
<!-- N35&#45;&gt;N37 -->
<g id="edge85" class="edge"><title>N35&#45;&gt;N37</title>
<a xlink:title="github.com/boltdb/bolt.(*DB).Update &#45;&gt; github.com/boltdb/bolt.(*Tx).Commit (384.15MB)">
<path fill="none" stroke="black" stroke-width="2" d="M679.314,-1181.99C723.205,-1144.91 823.743,-1059.96 873.706,-1017.75"/>
<polygon fill="black" stroke="black" points="876.181,-1020.24 881.561,-1011.11 871.664,-1014.89 876.181,-1020.24"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*DB).Update &#45;&gt; github.com/boltdb/bolt.(*Tx).Commit (384.15MB)">
<text text-anchor="middle" x="876" y="-1044.9" font-family="Times Roman,serif" font-size="14.00"> 384.15MB</text>
</a>
</g>
<!-- N36 -->
<g id="node110" class="node"><title>N36</title>
<a xlink:title="github.com/boltdb/bolt.(*DB).View (746.84MB)">
<polygon fill="#f8f8f8" stroke="black" points="2308,-1011 2178,-1011 2178,-975 2308,-975 2308,-1011"/>
<text text-anchor="middle" x="2243" y="-995.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.(*DB).View</text>
<text text-anchor="middle" x="2243" y="-985.8" font-family="Times Roman,serif" font-size="8.00">0 of 746.84MB(40.09%)</text>
</a>
</g>
<!-- N36&#45;&gt;N6 -->
<g id="edge75" class="edge"><title>N36&#45;&gt;N6</title>
<a xlink:title="github.com/boltdb/bolt.(*DB).View &#45;&gt; github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 (746.84MB)">
<path fill="none" stroke="black" stroke-width="3" d="M2243,-974.875C2243,-960.251 2243,-939.072 2243,-920.153"/>
<polygon fill="black" stroke="black" points="2246.5,-919.931 2243,-909.931 2239.5,-919.931 2246.5,-919.931"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*DB).View &#45;&gt; github.com/influxdb/influxdb/tsdb/engine/bz1.(*Engine).LoadMetadataIndex.func1 (746.84MB)">
<text text-anchor="middle" x="2275" y="-934.9" font-family="Times Roman,serif" font-size="14.00"> 746.84MB</text>
</a>
</g>
<!-- N37&#45;&gt;N24 -->
<g id="edge87" class="edge"><title>N37&#45;&gt;N24</title>
<a xlink:title="github.com/boltdb/bolt.(*Tx).Commit &#45;&gt; github.com/boltdb/bolt.(*Bucket).spill (384.15MB)">
<path fill="none" stroke="black" stroke-width="2" d="M903,-974.875C903,-957.759 903,-931.662 903,-910.719"/>
<polygon fill="black" stroke="black" points="906.5,-910.614 903,-900.614 899.5,-910.614 906.5,-910.614"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*Tx).Commit &#45;&gt; github.com/boltdb/bolt.(*Bucket).spill (384.15MB)">
<text text-anchor="middle" x="935" y="-934.9" font-family="Times Roman,serif" font-size="14.00"> 384.15MB</text>
</a>
</g>
<!-- N38 -->
<g id="node112" class="node"><title>N38</title>
<a xlink:title="github.com/boltdb/bolt.(*freelist).read (22MB)">
<polygon fill="#f8f8f8" stroke="black" points="3115,-895 2975,-895 2975,-859 3115,-859 3115,-895"/>
<text text-anchor="middle" x="3045" y="-879.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.(*freelist).read</text>
<text text-anchor="middle" x="3045" y="-869.8" font-family="Times Roman,serif" font-size="8.00">0 of 22MB(1.18%)</text>
</a>
</g>
<!-- N38&#45;&gt;N16 -->
<g id="edge147" class="edge"><title>N38&#45;&gt;N16</title>
<a xlink:title="github.com/boltdb/bolt.(*freelist).read &#45;&gt; github.com/boltdb/bolt.(*freelist).reindex (22MB)">
<path fill="none" stroke="black" d="M3057.05,-858.845C3068.93,-840.939 3087.27,-813.306 3101.1,-792.477"/>
<polygon fill="black" stroke="black" points="3104.1,-794.282 3106.72,-784.015 3098.27,-790.411 3104.1,-794.282"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*freelist).read &#45;&gt; github.com/boltdb/bolt.(*freelist).reindex (22MB)">
<text text-anchor="middle" x="3111" y="-812.9" font-family="Times Roman,serif" font-size="14.00"> 22MB</text>
</a>
</g>
<!-- N39&#45;&gt;N8 -->
<g id="edge145" class="edge"><title>N39&#45;&gt;N8</title>
<a xlink:title="github.com/boltdb/bolt.(*node).childAt &#45;&gt; github.com/boltdb/bolt.(*Bucket).node (30.10MB)">
<path fill="none" stroke="black" d="M370.605,-631.851C350.329,-614.652 319.204,-588.249 293.261,-566.242"/>
<polygon fill="black" stroke="black" points="295.284,-563.368 285.394,-559.568 290.755,-568.706 295.284,-563.368"/>
</a>
<a xlink:title="github.com/boltdb/bolt.(*node).childAt &#45;&gt; github.com/boltdb/bolt.(*Bucket).node (30.10MB)">
<text text-anchor="middle" x="357.5" y="-584.9" font-family="Times Roman,serif" font-size="14.00"> 30.10MB</text>
</a>
</g>
<!-- N40 -->
<g id="node114" class="node"><title>N40</title>
<a xlink:title="github.com/boltdb/bolt.Open (22.50MB)">
<polygon fill="#f8f8f8" stroke="black" points="2797,-1011 2691,-1011 2691,-975 2797,-975 2797,-1011"/>
<text text-anchor="middle" x="2744" y="-995.8" font-family="Times Roman,serif" font-size="8.00">github.com/boltdb/bolt.Open</text>
<text text-anchor="middle" x="2744" y="-985.8" font-family="Times Roman,serif" font-size="8.00">0 of 22.50MB(1.21%)</text>
</a>
</g>
<!-- N40&#45;&gt;N38 -->
<g id="edge149" class="edge"><title>N40&#45;&gt;N38</title>
<a xlink:title="github.com/boltdb/bolt.Open &#45;&gt; github.com/boltdb/bolt.(*freelist).read (22MB)">
<path fill="none" stroke="black" d="M2791.03,-974.875C2844.33,-954.335 2931.19,-920.862 2988.22,-898.883"/>
<polygon fill="black" stroke="black" points="2989.73,-902.051 2997.8,-895.189 2987.21,-895.519 2989.73,-902.051"/>
</a>
<a xlink:title="github.com/boltdb/bolt.Open &#45;&gt; github.com/boltdb/bolt.(*freelist).read (22MB)">
<text text-anchor="middle" x="2932" y="-934.9" font-family="Times Roman,serif" font-size="14.00"> 22MB</text>
</a>
</g>
<!-- N41 -->
<g id="node115" class="node"><title>N41</title>
<a xlink:title="github.com/influxdb/influxdb/cluster.(*PointsWriter).writeToShard.func1 (63.57MB)">
<polygon fill="#f8f8f8" stroke="black" points="3674,-1218 3420,-1218 3420,-1182 3674,-1182 3674,-1218"/>
<text text-anchor="middle" x="3547" y="-1202.8" font-family="Times Roman,serif" font-size="8.00">github.com/influxdb/influxdb/cluster.(*PointsWriter).writeToShard.func1</text>
<text text-anchor="middle" x="3547" y="-1192.8" font-family="Times Roman,serif" font-size="8.00">0 of 63.57MB(3.41%)</text>
</a>
</g>
<!-- N41&#45;&gt;N22 -->
<g id="edge111" class="edge"><title>N41&#45;&gt;N22</title>
<a xlink:title="github.com/influxdb/influxdb/cluster.(*PointsWriter).writeToShard.func1 ... github.com/influxdb/influxdb/tsdb.(*Shard).WritePoints (63.57MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M3547,-1181.99C3547,-1148.21 3547,-1074.7 3547,-1029.97"/>
<polygon fill="black" stroke="black" points="3550.5,-1029.8 3547,-1019.8 3543.5,-1029.8 3550.5,-1029.8"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/cluster.(*PointsWriter).writeToShard.func1 ... github.com/influxdb/influxdb/tsdb.(*Shard).WritePoints (63.57MB)">
<text text-anchor="middle" x="3575.5" y="-1044.9" font-family="Times Roman,serif" font-size="14.00"> 63.57MB</text>
</a>
</g>
<!-- N42 -->
<g id="node116" class="node"><title>N42</title>
<a xlink:title="github.com/influxdb/influxdb/cmd/influxd/run.(*Command).Run (777.25MB)">
<polygon fill="#f8f8f8" stroke="black" points="2353,-1218 2133,-1218 2133,-1182 2353,-1182 2353,-1218"/>
<text text-anchor="middle" x="2243" y="-1202.8" font-family="Times Roman,serif" font-size="8.00">github.com/influxdb/influxdb/cmd/influxd/run.(*Command).Run</text>
<text text-anchor="middle" x="2243" y="-1192.8" font-family="Times Roman,serif" font-size="8.00">0 of 777.25MB(41.72%)</text>
</a>
</g>
<!-- N42&#45;&gt;N36 -->
<g id="edge77" class="edge"><title>N42&#45;&gt;N36</title>
<a xlink:title="github.com/influxdb/influxdb/cmd/influxd/run.(*Command).Run ... github.com/boltdb/bolt.(*DB).View (746.84MB)">
<path fill="none" stroke="black" stroke-width="3" stroke-dasharray="1,5" d="M2243,-1181.99C2243,-1145.9 2243,-1064.48 2243,-1021.24"/>
<polygon fill="black" stroke="black" points="2246.5,-1021.11 2243,-1011.11 2239.5,-1021.11 2246.5,-1021.11"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/cmd/influxd/run.(*Command).Run ... github.com/boltdb/bolt.(*DB).View (746.84MB)">
<text text-anchor="middle" x="2275" y="-1044.9" font-family="Times Roman,serif" font-size="14.00"> 746.84MB</text>
</a>
</g>
<!-- N42&#45;&gt;N40 -->
<g id="edge151" class="edge"><title>N42&#45;&gt;N40</title>
<a xlink:title="github.com/influxdb/influxdb/cmd/influxd/run.(*Command).Run ... github.com/boltdb/bolt.Open (22MB)">
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M2286.58,-1181.99C2378.37,-1144.07 2591.31,-1056.09 2690.89,-1014.95"/>
<polygon fill="black" stroke="black" points="2692.25,-1018.17 2700.16,-1011.11 2689.58,-1011.7 2692.25,-1018.17"/>
</a>
<a xlink:title="github.com/influxdb/influxdb/cmd/influxd/run.(*Command).Run ... github.com/boltdb/bolt.Open (22MB)">
<text text-anchor="middle" x="2642" y="-1044.9" font-family="Times Roman,serif" font-size="14.00"> 22MB</text>
</a>
</g>
</g>
</g></svg>
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
from gevent import monkey
monkey.patch_all()
import os
import socket
import sys
from threading import Thread
from Queue import PriorityQueue
from datetime import datetime
import pwd
from decimal import Decimal
import time
from ssh2.session import Session
from paramiko import SSHClient, RSAKey, MissingHostKeyPolicy
CMD = 'cat ssh2-python/LICENSE'
graph_host = 'localhost'
graph_port = 2003
ssh_host = 'localhost'
ssh_port = 22
USER = pwd.getpwuid(os.geteuid()).pw_name
PUBLICKEY = os.path.expanduser('~/.ssh/id_rsa.pub')
PRIVATEKEY = os.path.expanduser('~/.ssh/id_rsa')
_QUEUE = PriorityQueue()
def send_to_graphite(queue):
graph_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
graph_sock.connect((graph_host, graph_port))
while True:
message = queue.get()
graph_sock.sendall(message)
queue.task_done()
def _make_data(app, auth, channel_open, execute, chan_read,
close_and_exit_status, total,
client_num=1, clients=1):
data = {
'.'.join([app, 'auth']): format(Decimal(
str(auth.total_seconds() * 1000)), '.3f'),
'.'.join([app, 'channel_open']): format(Decimal(
str(channel_open.total_seconds() * 1000)), '.3f'),
'.'.join([app,'execute']): format(Decimal(
(execute.total_seconds() * 1000)), '.3f'),
'.'.join([app,'channel_read']): format(Decimal(
str(chan_read.total_seconds() * 1000)), '.3f'),
'.'.join([app,'close_and_exit_status']): format(Decimal(
str(close_and_exit_status.total_seconds() * 1000)), '.3f'),
'.'.join([app,'total']): format(Decimal(
str(total.total_seconds() * 1000)), '.3f'),
'.'.join([app,'client_num']): str(client_num),
'.'.join([app,'clients']): str(clients),
}
_client_num = '.'.join([app,'client_num'])
# print("Sending graphite data for client %s" % data[_client_num])
return data
def queue_data(queue, data, priority):
message = make_message(data)
queue.put(message, priority)
def paramiko_execute(_queue, client_num=1, clients=1):
_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_sock.connect((ssh_host, ssh_port))
start = datetime.now()
now = datetime.now()
client = SSHClient()
client.set_missing_host_key_policy(MissingHostKeyPolicy())
try:
client.connect(ssh_host, sock=_sock, look_for_keys=False)
except Exception:
data = {'paramiko.failure': '1'}
queue_data(_queue, data, clients)
return
auth = datetime.now() - now
try:
transport = client.get_transport()
channel = transport.open_session()
while channel is None:
channel = transport.open_session()
except Exception:
data = {'paramiko.failure': '1'}
queue_data(_queue, data, clients)
return
channel_open = datetime.now() - now
now = datetime.now()
stdout = channel.makefile('rb')
channel.exec_command(CMD)
execute = datetime.now() - now
now = datetime.now()
for line in stdout:
# print(line)
pass
chan_read = datetime.now() - now
now = datetime.now()
channel.close()
while not channel.closed:
pass
channel.recv_exit_status()
close_and_exit_status = datetime.now() - now
client.close()
_sock.close()
total = datetime.now() - start
data = _make_data('paramiko', auth, channel_open, execute, chan_read,
close_and_exit_status, total,
client_num=client_num, clients=clients)
queue_data(_queue, data, clients)
def ssh2_execute(_queue, client_num=1, clients=1):
_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_sock.connect((ssh_host, ssh_port))
start = datetime.now()
now = datetime.now()
s = Session()
try:
s.handshake(_sock)
s.agent_auth(USER)
except Exception:
data = {'ssh2.failure': '1'}
queue_data(_queue, data, clients)
return
auth = datetime.now() - now
now = datetime.now()
channel = s.open_session()
channel_open = datetime.now() - now
now = datetime.now()
try:
channel.execute(CMD)
except Exception:
data = {'ssh2.failure': '1'}
queue_data(_queue, data, clients)
return
execute = datetime.now() - now
now = datetime.now()
size, data = channel.read()
while size > 0:
# print(data)
size, data = channel.read()
chan_read = datetime.now() - now
now = datetime.now()
channel.close()
# Get exit status
channel.get_exit_status()
close_and_exit_status = datetime.now() - now
del s
_sock.close()
total = datetime.now() - start
data = _make_data('ssh2', auth, channel_open, execute, chan_read,
close_and_exit_status, total,
client_num=client_num, clients=clients)
queue_data(_queue, data, clients)
def make_message(data):
"""Make and return metrics message(s)"""
dt = datetime.now()
test_data = [b"%s %s %s\n" % (serie.encode('utf-8'),
data[serie].encode('utf-8'),
dt.strftime("%s").encode('utf-8'))
for serie in data]
test_data = b"".join(test_data)
return test_data
def start_workers(target_func, app, num_workers=10):
graph_thread = Thread(target=send_to_graphite, args=(_QUEUE,))
graph_thread.daemon = True
graph_thread.start()
threads = [Thread(target=target_func, args=(_QUEUE, i, num_workers,))
for i in range(1, num_workers+1)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
_QUEUE.join()
def run_paramiko_workers(num_workers=10):
return start_workers(paramiko_execute, 'paramiko',
num_workers=num_workers)
def run_ssh2_workers(num_workers=10):
return start_workers(ssh2_execute, 'ssh2',
num_workers=num_workers)
if __name__ == "__main__":
# run_test()
# run_ssh2_workers(num_workers=2)
# run_paramiko_workers(num_workers=2)
max_workers = 100
for _max in range(max_workers):
run_paramiko_workers(num_workers=_max)
run_ssh2_workers(num_workers=_max)
import os
import socket
import sys
from threading import Thread
from Queue import PriorityQueue
from datetime import datetime
import pwd
from decimal import Decimal
import time
from ssh2.session import Session
from paramiko import SSHClient, RSAKey, MissingHostKeyPolicy
CMD = 'cat ssh2-python/LICENSE'
graph_host = 'localhost'
graph_port = 2003
ssh_host = 'localhost'
ssh_port = 22
USER = pwd.getpwuid(os.geteuid()).pw_name
PUBLICKEY = os.path.expanduser('~/.ssh/id_rsa.pub')
PRIVATEKEY = os.path.expanduser('~/.ssh/id_rsa')
_QUEUE = PriorityQueue()
def send_to_graphite(queue):
graph_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
graph_sock.connect((graph_host, graph_port))
while True:
message = queue.get()
graph_sock.sendall(message)
queue.task_done()
def _make_data(app, auth, channel_open, execute, chan_read,
close_and_exit_status, total,
client_num=1, clients=1):
data = {
'.'.join([app, 'auth']): format(Decimal(
str(auth.total_seconds() * 1000)), '.3f'),
'.'.join([app, 'channel_open']): format(Decimal(
str(channel_open.total_seconds() * 1000)), '.3f'),
'.'.join([app,'execute']): format(Decimal(
(execute.total_seconds() * 1000)), '.3f'),
'.'.join([app,'channel_read']): format(Decimal(
str(chan_read.total_seconds() * 1000)), '.3f'),
'.'.join([app,'close_and_exit_status']): format(Decimal(
str(close_and_exit_status.total_seconds() * 1000)), '.3f'),
'.'.join([app,'total']): format(Decimal(
str(total.total_seconds() * 1000)), '.3f'),
'.'.join([app,'client_num']): str(client_num),
'.'.join([app,'clients']): str(clients),
}
_client_num = '.'.join([app,'client_num'])
# print("Sending graphite data for client %s" % data[_client_num])
return data
def queue_data(queue, data, priority):
message = make_message(data)
queue.put(message, priority)
def paramiko_execute(_queue, client_num=1, clients=1):
_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_sock.connect((ssh_host, ssh_port))
start = datetime.now()
now = datetime.now()
client = SSHClient()
client.set_missing_host_key_policy(MissingHostKeyPolicy())
try:
client.connect(ssh_host, sock=_sock, look_for_keys=False)
except Exception:
data = {'paramiko.failure': '1'}
queue_data(_queue, data, clients)
return
auth = datetime.now() - now
try:
transport = client.get_transport()
channel = transport.open_session()
while channel is None:
channel = transport.open_session()
except Exception:
data = {'paramiko.failure': '1'}
queue_data(_queue, data, clients)
return
channel_open = datetime.now() - now
now = datetime.now()
stdout = channel.makefile('rb')
channel.exec_command(CMD)
execute = datetime.now() - now
now = datetime.now()
for line in stdout:
# print(line)
pass
chan_read = datetime.now() - now
now = datetime.now()
channel.close()
while not channel.closed:
pass
channel.recv_exit_status()
close_and_exit_status = datetime.now() - now
client.close()
_sock.close()
total = datetime.now() - start
data = _make_data('paramiko', auth, channel_open, execute, chan_read,
close_and_exit_status, total,
client_num=client_num, clients=clients)
queue_data(_queue, data, clients)
def ssh2_execute(_queue, client_num=1, clients=1):
_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_sock.connect((ssh_host, ssh_port))
start = datetime.now()
now = datetime.now()
s = Session()
try:
s.handshake(_sock)
s.agent_auth(USER)
except Exception:
data = {'ssh2.failure': '1'}
queue_data(_queue, data, clients)
return
auth = datetime.now() - now
now = datetime.now()
channel = s.open_session()
channel_open = datetime.now() - now
now = datetime.now()
try:
channel.execute(CMD)
except Exception:
data = {'ssh2.failure': '1'}
queue_data(_queue, data, clients)
return
execute = datetime.now() - now
now = datetime.now()
size, data = channel.read()
while size > 0:
# print(data)
size, data = channel.read()
chan_read = datetime.now() - now
now = datetime.now()
channel.close()
# Get exit status
channel.get_exit_status()
close_and_exit_status = datetime.now() - now
del s
_sock.close()
total = datetime.now() - start
data = _make_data('ssh2', auth, channel_open, execute, chan_read,
close_and_exit_status, total,
client_num=client_num, clients=clients)
queue_data(_queue, data, clients)
def make_message(data):
"""Make and return metrics message(s)"""
dt = datetime.now()
test_data = [b"%s %s %s\n" % (serie.encode('utf-8'),
data[serie].encode('utf-8'),
dt.strftime("%s").encode('utf-8'))
for serie in data]
test_data = b"".join(test_data)
return test_data
def start_workers(target_func, app, num_workers=10):
graph_thread = Thread(target=send_to_graphite, args=(_QUEUE,))
graph_thread.daemon = True
graph_thread.start()
threads = [Thread(target=target_func, args=(_QUEUE, i, num_workers,))
for i in range(1, num_workers+1)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
_QUEUE.join()
def run_paramiko_workers(num_workers=10):
return start_workers(paramiko_execute, 'paramiko',
num_workers=num_workers)
def run_ssh2_workers(num_workers=10):
return start_workers(ssh2_execute, 'ssh2',
num_workers=num_workers)
if __name__ == "__main__":
# run_test()
# run_ssh2_workers(num_workers=2)
# run_paramiko_workers(num_workers=2)
max_workers = 50
for _max in range(max_workers):
run_paramiko_workers(num_workers=_max)
run_ssh2_workers(num_workers=_max)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment