summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Bostic <keith@wiredtiger.com>2015-02-19 12:37:58 -0500
committerKeith Bostic <keith@wiredtiger.com>2015-02-19 12:37:58 -0500
commitcb3358e5215fe2b0aa3b4e451ae08bdb4c3e2e12 (patch)
tree069063cb364a6159a38db00f9c71237ef4588894
parentb6e6433166d5f7284f02e977fbf4c117e9ef74a8 (diff)
downloadmongo-cb3358e5215fe2b0aa3b4e451ae08bdb4c3e2e12.tar.gz
With the commit of #1676, we should no longer need the wtperf_stats tool
or subdirectory.
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/CONTRIBUTORS16
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/MIT-LICENSE.txt24
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/NVD3Chart.py547
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/README.rst134
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/WIREDTIGER_README20
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/__init__.py30
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/cumulativeLineChart.py118
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/discreteBarChart.py96
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/lineChart.py111
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/linePlusBarChart.py125
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/linePlusBarWithFocusChart.py153
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/lineWithFocusChart.py101
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/multiBarChart.py93
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/multiBarHorizontalChart.py104
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/pieChart.py125
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/scatterChart.py137
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/stackedAreaChart.py112
-rw-r--r--tools/wtperf_stats/3rdparty/nvd3/translator.py71
-rw-r--r--tools/wtperf_stats/wt_nvd3_util.py57
-rw-r--r--tools/wtperf_stats/wtperf_stats.py177
20 files changed, 0 insertions, 2351 deletions
diff --git a/tools/wtperf_stats/3rdparty/nvd3/CONTRIBUTORS b/tools/wtperf_stats/3rdparty/nvd3/CONTRIBUTORS
deleted file mode 100644
index 17d06bec646..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/CONTRIBUTORS
+++ /dev/null
@@ -1,16 +0,0 @@
-areski (Areski Belaid)
-shrenik (Shrenik Patel)
-DZPM (David Arcos)
-goulu (Philippe Guglielmetti)
-jordanvg
-RodrigoPrior (Rodrigo Prior)
-DanMeakin
-nzjrs (John Stowers)
-RaD (Ruslan Popov)
-cmorgan (Chris Morgan)
-imom0
-kbsali (Kevin Saliou)
-zebulon2
-bevanj
-frewie
-agorrod
diff --git a/tools/wtperf_stats/3rdparty/nvd3/MIT-LICENSE.txt b/tools/wtperf_stats/3rdparty/nvd3/MIT-LICENSE.txt
deleted file mode 100644
index 1add6249e57..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/MIT-LICENSE.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-The MIT License (MIT)
-
-Python-nvd3
-
-Copyright (c) 2013 Arezqui Belaid <areski@gmail.com> and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/tools/wtperf_stats/3rdparty/nvd3/NVD3Chart.py b/tools/wtperf_stats/3rdparty/nvd3/NVD3Chart.py
deleted file mode 100644
index 52cbf168ddc..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/NVD3Chart.py
+++ /dev/null
@@ -1,547 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from optparse import OptionParser
-from string import Template
-import json
-
-template_content_nvd3 = """
-$container
-$jschart
-"""
-
-template_page_nvd3 = """
-<!DOCTYPE html>
-<html lang="en">
-<head>
-$header
-</head>
-<body>
-%s
-</body>
-""" % template_content_nvd3
-
-
-def stab(tab=1):
- """
- create space tabulation
- """
- return ' ' * 4 * tab
-
-
-class NVD3Chart:
- """
- NVD3Chart Base class
-
- **Attributes**:
-
- * ``axislist`` - All X, Y axis list
- * ``charttooltip_dateformat`` - date fromat for tooltip if x-axis is in date format
- * ``charttooltip`` - Custom tooltip string
- * ``color_category`` - Defien color category (eg. category10, category20, category20c)
- * ``color_list`` - used by pieChart (eg. ['red', 'blue', 'orange'])
- * ``container`` - Place for graph
- * ``containerheader`` - Header for javascript code
- * ``count`` - chart count
- * ``custom_tooltip_flag`` - False / True
- * ``d3_select_extra`` -
- * ``date_flag`` - x-axis contain date format or not
- * ``dateformat`` - see https://github.com/mbostock/d3/wiki/Time-Formatting
- * ``header_css`` - False / True
- * ``header_js`` - Custom tooltip string
- * ``height`` - Set graph height
- * ``htmlcontent`` - Contain the htmloutput
- * ``htmlheader`` - Contain the html header
- * ``jschart`` - Javascript code as string
- * ``margin_bottom`` - set the bottom margin
- * ``margin_left`` - set the left margin
- * ``margin_right`` - set the right margin
- * ``margin_top`` - set the top margin
- * ``model`` - set the model (ex. pieChart, LineWithFocusChart, MultiBarChart)
- * ``resize`` - False / True
- * ``series`` - Series are list of data that will be plotted
- * ``stacked`` - False / True
- * ``style`` - Special style
- * ``template_page_nvd3`` - template variable
- * ``width`` - Set graph width
- * ``x_axis_date`` - False / True
- * ``show_legend`` - False / True
- * ``show_labels`` - False / True
- * ``assets_directory`` directory holding the assets (./bower_components/)
- """
- count = 0
- dateformat = '%x'
- series = []
- axislist = {}
- style = ''
- htmlcontent = ''
- htmlheader = ''
- height = None
- width = None
- margin_bottom = None
- margin_left = None
- margin_right = None
- margin_top = None
- model = ''
- d3_select_extra = ''
- x_axis_date = False
- resize = False
- stacked = False
- template_page_nvd3 = None
- container = None
- containerheader = ''
- jschart = None
- custom_tooltip_flag = False
- date_flag = False
- charttooltip = ''
- tooltip_condition_string = ''
- color_category = 'category10' # category10, category20, category20c
- color_list = [] # for pie chart
- tag_script_js = True
- charttooltip_dateformat = None
- x_axis_format = ''
- show_legend = True
- show_labels = True
- assets_directory = './bower_components/'
-
- def __init__(self, **kwargs):
- """
- Constructor
- """
- #set the model
- self.model = self.__class__.__name__
-
- #Init Data
- self.series = []
- self.axislist = {}
- self.template_page_nvd3 = Template(template_page_nvd3)
- self.template_content_nvd3 = Template(template_content_nvd3)
- self.charttooltip_dateformat = '%d %b %Y'
-
- self.name = kwargs.get('name', self.model)
- self.jquery_on_ready = kwargs.get('jquery_on_ready', False)
- self.color_category = kwargs.get('color_category', None)
- self.color_list = kwargs.get('color_list', None)
- self.margin_bottom = kwargs.get('margin_bottom', 20)
- self.margin_left = kwargs.get('margin_left', 60)
- self.margin_right = kwargs.get('margin_right', 60)
- self.margin_top = kwargs.get('margin_top', 30)
- self.stacked = kwargs.get('stacked', False)
- self.resize = kwargs.get('resize', False)
- self.show_legend = kwargs.get('show_legend', True)
- self.show_labels = kwargs.get('show_labels', True)
- self.tag_script_js = kwargs.get('tag_script_js', True)
- self.chart_attr = kwargs.get("chart_attr", {})
- self.assets_directory = kwargs.get('assets_directory', './bower_components/')
-
- #CDN http://cdnjs.com/libraries/nvd3/ needs to make sure it's up to date
- self.header_css = [
- '<link href="%s" rel="stylesheet">\n' % h for h in
- (
- self.assets_directory + 'nvd3/src/nv.d3.css',
- )
- ]
-
- self.header_js = [
- '<script src="%s"></script>\n' % h for h in
- (
- self.assets_directory + 'd3/d3.min.js',
- self.assets_directory + 'nvd3/nv.d3.min.js'
- )
- ]
-
- def add_serie(self, y, x, name=None, extra={}, **kwargs):
- """
- add serie - Series are list of data that will be plotted
- y {1, 2, 3, 4, 5} / x {1, 2, 3, 4, 5}
-
- **Attributes**:
-
- * ``name`` - set Serie name
- * ``x`` - x-axis data
- * ``y`` - y-axis data
-
- kwargs:
-
- * ``shape`` - for scatterChart, you can set different shapes (circle, triangle etc...)
- * ``size`` - for scatterChart, you can set size of different shapes
- * ``type`` - for multiChart, type should be bar
- * ``bar`` - to display bars in Chart
- * ``color_list`` - define list of colors which will be used by pieChart
- * ``color`` - set axis color
- * ``disabled`` -
-
- extra:
-
- * ``tooltip`` - set tooltip flag
- * ``date_format`` - set date_format for tooltip if x-axis is in date format
-
- """
- if not name:
- name = "Serie %d" % (len(self.series) + 1)
-
- # For scatterChart shape & size fields are added in serie
- if 'shape' in kwargs or 'size' in kwargs:
- csize = kwargs.get('size', 1)
- cshape = kwargs.get('shape', 'circle')
-
- serie = [{
- 'x': x[i],
- 'y': y,
- 'shape': cshape,
- 'size': csize[i] if isinstance(csize, list) else csize
- } for i, y in enumerate(y)]
- else:
- if self.model == 'pieChart':
- serie = [{'label': x[i], 'value': y} for i, y in enumerate(y)]
- elif self.model == 'linePlusBarWithFocusChart':
- serie = [[x[i], y] for i, y in enumerate(y)]
- else:
- serie = [{'x': x[i], 'y': y} for i, y in enumerate(y)]
-
- data_keyvalue = {'values': serie, 'key': name}
-
- #multiChart
- #Histogram type='bar' for the series
- if 'type' in kwargs and kwargs['type']:
- data_keyvalue['type'] = kwargs['type']
-
- if self.model == 'pieChart':
- if 'color_list' in extra and extra['color_list']:
- self.color_list = extra['color_list']
-
- #Define on which Y axis the serie is related
- #a chart can have 2 Y axis, left and right, by default only one Y Axis is used
- if 'yaxis' in kwargs and kwargs['yaxis']:
- data_keyvalue['yAxis'] = kwargs['yaxis']
- else:
- if self.model != 'pieChart' and self.model != 'linePlusBarWithFocusChart':
- data_keyvalue['yAxis'] = '1'
-
- if 'bar' in kwargs and kwargs['bar']:
- data_keyvalue['bar'] = 'true'
-
- if 'disabled' in kwargs and kwargs['disabled']:
- data_keyvalue['disabled'] = 'true'
-
- if 'color' in extra and extra['color']:
- data_keyvalue['color'] = extra['color']
-
- if extra.get('date_format'):
- self.charttooltip_dateformat = extra['date_format']
-
- if extra.get('tooltip'):
- self.custom_tooltip_flag = True
-
- if self.model != 'pieChart':
- _start = extra['tooltip']['y_start']
- _end = extra['tooltip']['y_end']
- _start = ("'" + str(_start) + "' + ") if _start else ''
- _end = (" + '" + str(_end) + "'") if _end else ''
-
- if self.model == 'linePlusBarChart' or self.model == 'linePlusBarWithFocusChart':
- self.tooltip_condition_string += stab(3) + "if(key.indexOf('" + name + "') > -1 ){\n" +\
- stab(4) + "var y = " + _start + " String(graph.point.y) " + _end + ";\n" +\
- stab(3) + "}\n"
- elif self.model == 'cumulativeLineChart':
- self.tooltip_condition_string += stab(3) + "if(key == '" + name + "'){\n" +\
- stab(4) + "var y = " + _start + " String(e) " + _end + ";\n" +\
- stab(3) + "}\n"
- else:
- self.tooltip_condition_string += stab(3) + "if(key == '" + name + "'){\n" +\
- stab(4) + "var y = " + _start + " String(graph.point.y) " + _end + ";\n" +\
- stab(3) + "}\n"
-
- if self.model == 'pieChart':
- _start = extra['tooltip']['y_start']
- _end = extra['tooltip']['y_end']
- _start = ("'" + str(_start) + "' + ") if _start else ''
- _end = (" + '" + str(_end) + "'") if _end else ''
- self.tooltip_condition_string += \
- "var y = " + _start + " String(y) " + _end + ";\n"
-
- self.series.append(data_keyvalue)
-
- def set_graph_height(self, height):
- """Set Graph height"""
- self.height = str(height)
-
- def set_graph_width(self, width):
- """Set Graph width"""
- self.width = str(width)
-
- def set_containerheader(self, containerheader):
- """Set containerheader"""
- self.containerheader = containerheader
-
- def set_date_flag(self, date_flag=False):
- """Set date falg"""
- self.date_flag = date_flag
-
- def set_custom_tooltip_flag(self, custom_tooltip_flag):
- """Set custom_tooltip_flag & date_flag"""
- self.custom_tooltip_flag = custom_tooltip_flag
-
- def __str__(self):
- """return htmlcontent"""
- self.buildhtml()
- return self.htmlcontent
-
- def buildcontent(self):
- """Build HTML content only, no header or body tags. To be useful this
- will usually require the attribute `juqery_on_ready` to be set which
- will wrap the js in $(function(){<regular_js>};)
- """
- self.buildcontainer()
- self.buildjschart()
- self.htmlcontent = self.template_content_nvd3.substitute(container=self.container,
- jschart=self.jschart)
-
- def buildhtml(self):
- """Build the HTML page
- Create the htmlheader with css / js
- Create html page
- Add Js code for nvd3
- """
- self.buildhtmlheader()
- self.buildcontainer()
- self.buildjschart()
-
- self.htmlcontent = self.template_page_nvd3.substitute(header=self.htmlheader,
- container=self.container,
- jschart=self.jschart)
-
- def buildhtmlheader(self):
- """generate HTML header content"""
- self.htmlheader = ''
- for css in self.header_css:
- self.htmlheader += css
- for js in self.header_js:
- self.htmlheader += js
-
- def buildcontainer(self):
- """generate HTML div"""
- self.container = self.containerheader
- #Create SVG div with style
- if self.width:
- if self.width[-1] != '%':
- self.style += 'width:%spx;' % self.width
- else:
- self.style += 'width:%s;' % self.width
- if self.height:
- if self.height[-1] != '%':
- self.style += 'height:%spx;' % self.height
- else:
- self.style += 'height:%s;' % self.height
- if self.style:
- self.style = 'style="%s"' % self.style
-
- self.container += '<div id="%s"><svg %s></svg></div>\n' % (self.name, self.style)
-
- def build_custom_tooltip(self):
- """generate custom tooltip for the chart"""
- if self.custom_tooltip_flag:
- if not self.date_flag:
- if self.model == 'pieChart':
- self.charttooltip = stab(2) + "chart.tooltipContent(function(key, y, e, graph) {\n" + \
- stab(3) + "var x = String(key);\n" +\
- stab(3) + self.tooltip_condition_string +\
- stab(3) + "tooltip_str = '<center><b>'+x+'</b></center>' + y;\n" +\
- stab(3) + "return tooltip_str;\n" + \
- stab(2) + "});\n"
- else:
- self.charttooltip = stab(2) + "chart.tooltipContent(function(key, y, e, graph) {\n" + \
- stab(3) + "var x = String(graph.point.x);\n" +\
- stab(3) + "var y = String(graph.point.y);\n" +\
- self.tooltip_condition_string +\
- stab(3) + "tooltip_str = '<center><b>'+key+'</b></center>' + y + ' at ' + x;\n" +\
- stab(3) + "return tooltip_str;\n" + \
- stab(2) + "});\n"
- else:
- self.charttooltip = stab(2) + "chart.tooltipContent(function(key, y, e, graph) {\n" + \
- stab(3) + "var x = d3.time.format('%s')(new Date(parseInt(graph.point.x)));\n" \
- % self.charttooltip_dateformat +\
- stab(3) + "var y = String(graph.point.y);\n" +\
- self.tooltip_condition_string +\
- stab(3) + "tooltip_str = '<center><b>'+key+'</b></center>' + y + ' on ' + x;\n" +\
- stab(3) + "return tooltip_str;\n" + \
- stab(2) + "});\n"
-
- def buildjschart(self):
- """generate javascript code for the chart"""
-
- self.jschart = ''
- if self.tag_script_js:
- self.jschart += '\n<script>\n'
-
- self.jschart += stab()
-
- if self.jquery_on_ready:
- self.jschart += '$(function(){'
-
- self.jschart += 'nv.addGraph(function() {\n'
-
- self.jschart += stab(2) + 'var chart = nv.models.%s();\n' % self.model
-
- if self.model != 'pieChart' and not self.color_list:
- if self.color_category:
- self.jschart += stab(2) + 'chart.color(d3.scale.%s().range());\n' % self.color_category
-
- if self.stacked:
- self.jschart += stab(2) + "chart.stacked(true);"
-
- self.jschart += stab(2) + \
- 'chart.margin({top: %s, right: %s, bottom: %s, left: %s})\n' % \
- (self.margin_top, self.margin_right, \
- self.margin_bottom, self.margin_left)
-
- """
- We want now to loop through all the defined Axis and add:
- chart.y2Axis
- .tickFormat(function(d) { return '$' + d3.format(',.2f')(d) });
- """
- if self.model != 'pieChart':
- for axis_name, a in list(self.axislist.items()):
- self.jschart += stab(2) + "chart.%s\n" % axis_name
- for attr, value in list(a.items()):
- self.jschart += stab(3) + ".%s(%s);\n" % (attr, value)
-
- if self.width:
- self.d3_select_extra += ".attr('width', %s)\n" % self.width
- if self.height:
- self.d3_select_extra += ".attr('height', %s)\n" % self.height
-
- if self.model == 'pieChart':
- datum = "data_%s[0].values" % self.name
- else:
- datum = "data_%s" % self.name
-
- # add custom tooltip string in jschart
- # default condition (if build_custom_tooltip is not called explicitly with date_flag=True)
- if self.tooltip_condition_string == '':
- self.tooltip_condition_string = 'var y = String(graph.point.y);\n'
-
- self.build_custom_tooltip()
- self.jschart += self.charttooltip
-
- # the shape attribute in kwargs is not applied when
- # not allowing other shapes to be rendered
- if self.model == 'scatterChart':
- self.jschart += 'chart.scatter.onlyCircles(false);'
-
- if self.model != 'discreteBarChart':
- if self.show_legend:
- self.jschart += stab(2) + "chart.showLegend(true);\n"
- else:
- self.jschart += stab(2) + "chart.showLegend(false);\n"
-
- #showLabels only supported in pieChart
- if self.model == 'pieChart':
- if self.show_labels:
- self.jschart += stab(2) + "chart.showLabels(true);\n"
- else:
- self.jschart += stab(2) + "chart.showLabels(false);\n"
-
- # add custom chart attributes
- for attr, value in self.chart_attr.items():
- self.jschart += stab(2) + "chart.%s(%s);\n" % (attr, value)
-
- #Inject data to D3
- self.jschart += stab(2) + "d3.select('#%s svg')\n" % self.name + \
- stab(3) + ".datum(%s)\n" % datum + \
- stab(3) + ".transition().duration(500)\n" + \
- stab(3) + self.d3_select_extra + \
- stab(3) + ".call(chart);\n\n"
-
- if self.resize:
- self.jschart += stab(1) + "nv.utils.windowResize(chart.update);\n"
- self.jschart += stab(1) + "return chart;\n});"
-
- if self.jquery_on_ready:
- self.jschart += "\n});"
-
- #Include data
- series_js = json.dumps(self.series)
-
- if self.model == 'linePlusBarWithFocusChart':
- append_to_data = ".map(function(series) {" + \
- "series.values = series.values.map(function(d) { return {x: d[0], y: d[1] } });" + \
- "return series; })"
- self.jschart += """data_%s=%s%s;\n""" % (self.name, series_js, append_to_data)
- else:
- self.jschart += """data_%s=%s;\n""" % (self.name, series_js)
-
- if self.tag_script_js:
- self.jschart += "</script>"
-
- def create_x_axis(self, name, label=None, format=None, date=False, custom_format=False):
- """
- Create X-axis
- """
- axis = {}
- if custom_format and format:
- axis['tickFormat'] = format
- else:
- if format:
- if format == 'AM_PM':
- axis['tickFormat'] = "function(d) { return get_am_pm(parseInt(d)); }"
- else:
- axis['tickFormat'] = "d3.format(',%s')" % format
-
- if label:
- axis['axisLabel'] = label
-
- #date format : see https://github.com/mbostock/d3/wiki/Time-Formatting
- if date:
- self.dateformat = format
- axis['tickFormat'] = "function(d) { return d3.time.format('%s')(new Date(parseInt(d))) }\n" % self.dateformat
- #flag is the x Axis is a date
- if name[0] == 'x':
- self.x_axis_date = True
-
- #Add new axis to list of axis
- self.axislist[name] = axis
-
- def create_y_axis(self, name, label=None, format=None, custom_format=False):
- """
- Create Y-axis
- """
- axis = {}
-
- if custom_format and format:
- axis['tickFormat'] = format
- else:
- if format:
- axis['tickFormat'] = "d3.format(',%s')" % format
-
- if label:
- axis['axisLabel'] = label
-
- #Add new axis to list of axis
- self.axislist[name] = axis
-
-
-def _main():
- """
- Parse options and process commands
- """
- # Parse arguments
- usage = "usage: nvd3.py [options]"
- parser = OptionParser(usage=usage, version="python-nvd3 - Charts generator with nvd3.js and d3.js")
- parser.add_option("-q", "--quiet",
- action="store_false", dest="verbose", default=True,
- help="don't print messages to stdout")
-
- (options, args) = parser.parse_args()
-
-
-if __name__ == '__main__':
- _main()
diff --git a/tools/wtperf_stats/3rdparty/nvd3/README.rst b/tools/wtperf_stats/3rdparty/nvd3/README.rst
deleted file mode 100644
index 31a04d958cc..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/README.rst
+++ /dev/null
@@ -1,134 +0,0 @@
-Python Wrapper for NVD3 - It's time for beautiful charts
-========================================================
-
-:Description: Python-nvd3 is a wrapper for NVD3 graph library
-:nvd3: NVD3 http://nvd3.org/
-:d3: Data-Driven Documents http://d3js.org/
-
-
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js offers you.
-
-
-.. image:: https://www.travis-ci.org/areski/python-nvd3.png?branch=master
-
-
-Installation
-------------
-
-Install, upgrade and uninstall python-nvd3 with these commands::
-
- $ pip install python-nvd3
- $ pip install --upgrade python-nvd3
- $ pip uninstall python-nvd3
-
-
-Dependecies
------------
-
-D3 and NvD3 can be installed through bower (which itself can be installed through npm). See http://bower.io/ and https://npmjs.org for further information.
-To install bower globally execute::
-
- $ npm install -g bower
-
-Note : you might prefer to save your npm dependencies locally in a ``package.json`` file.
-
-Then in the directory where you will use python-nvd3, just execute the following commands::
-
- $ bower install d3#3.3.8
- $ bower install nvd3#1.1.12-beta
-
-This will create a directory "bower_components" where d3 & nvd3 will be saved.
-
-Note : you might prefer to save your bower dependencies locally in a ``bower.json`` file. You can also configure the directory where your bower dependencies will be saved adding a ``.bowerrc`` file in your project root directory.
-
-
-Usage
------
-
-After installation use python-nvd3 as follows ::
-
- from nvd3 import pieChart
-
- #Open File to write the D3 Graph
- output_file = open('test-nvd3.html', 'w')
-
- type = 'pieChart'
- chart = pieChart(name=type, color_category='category20c', height=450, width=450)
- chart.set_containerheader("\n\n<h2>" + type + "</h2>\n\n")
-
- #Create the keys
- xdata = ["Orange", "Banana", "Pear", "Kiwi", "Apple", "Strawberry", "Pineapple"]
- ydata = [3, 4, 0, 1, 5, 7, 3]
-
- #Add the serie
- extra_serie = {"tooltip": {"y_start": "", "y_end": " cal"}}
- chart.add_serie(y=ydata, x=xdata, extra=extra_serie)
- chart.buildhtml()
- output_file.write(chart.htmlcontent)
-
- #close Html file
- output_file.close()
-
-
-See the file examples.py for more samples.
-
-
-Live demo of NVD3
------------------
-
-See a live demo on jsfiddle : http://jsfiddle.net/areski/z4zuH/3/
-
-
-Supported nvd3 charts
----------------------
-
-Charts list:
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/lineWithFocusChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/lineChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/multiBarChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/pieChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/stackedAreaChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/multiBarHorizontalChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/linePlusBarChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/cumulativeLineChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/discreteBarChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/scatterChart.png
-
-.. image:: https://raw.github.com/areski/python-nvd3/master/docs/source/_static/screenshot/linePlusBarWithFocusChart.png
-
-
-Documentation
--------------
-
-Documentation is available on 'Read the Docs':
-http://python-nvd3.readthedocs.org
-
-
-Changelog
----------
-
-Changelog summary : https://github.com/areski/python-nvd3/blob/master/CHANGELOG.rst
-
-
-Do you like Django?
--------------------
-
-There is also a django wrapper for nvd3 available:
-https://github.com/areski/django-nvd3
-
-
-License
--------
-
-Python-nvd3 is licensed under MIT, see `MIT-LICENSE.txt`.
diff --git a/tools/wtperf_stats/3rdparty/nvd3/WIREDTIGER_README b/tools/wtperf_stats/3rdparty/nvd3/WIREDTIGER_README
deleted file mode 100644
index e9eb0a8b081..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/WIREDTIGER_README
+++ /dev/null
@@ -1,20 +0,0 @@
-This is a pre-build python-nvd3 library. It was built from the
-Git repository:
-https://github.com/areski/python-nvd3
-
-Based on revision:
-commit deb12255fa61f0ff3fa4b41699e0ef8e62fbd4a6
-Author: Areski Belaid <areski@gmail.com>
-Date: Mon Feb 10 15:27:20 2014 +0100
-
-Using Python 2.7.5
-
-To reproduce run:
-
-$ cd wiredtiger/tools/third_party
-$ git clone https://github.com/areski/python-nvd3
-$ cd python-nvd3
-$ git checkout deb12255
-$ python27 setup.py build
-$ cp build/lib/nvd3/* nvd3/
-
diff --git a/tools/wtperf_stats/3rdparty/nvd3/__init__.py b/tools/wtperf_stats/3rdparty/nvd3/__init__.py
deleted file mode 100644
index 72bb4608230..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-__version__ = '0.11.0' # edit also docs/source/conf.py
-__all__ = ['lineChart', 'pieChart', 'lineWithFocusChart',
- 'stackedAreaChart', 'multiBarHorizontalChart',
- 'linePlusBarChart', 'cumulativeLineChart',
- 'scatterChart', 'discreteBarChart', 'multiBarChart',
- 'linePlusBarWithFocusChart']
-
-
-from .lineChart import lineChart
-from .pieChart import pieChart
-from .lineWithFocusChart import lineWithFocusChart
-from .stackedAreaChart import stackedAreaChart
-from .multiBarHorizontalChart import multiBarHorizontalChart
-from .linePlusBarChart import linePlusBarChart
-from .cumulativeLineChart import cumulativeLineChart
-from .scatterChart import scatterChart
-from .discreteBarChart import discreteBarChart
-from .multiBarChart import multiBarChart
-from .linePlusBarWithFocusChart import linePlusBarWithFocusChart
diff --git a/tools/wtperf_stats/3rdparty/nvd3/cumulativeLineChart.py b/tools/wtperf_stats/3rdparty/nvd3/cumulativeLineChart.py
deleted file mode 100644
index 3ffbc66127c..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/cumulativeLineChart.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart
-
-
-class cumulativeLineChart(NVD3Chart):
- """
- A cumulative line chart is used when you have one important grouping representing
- an ordered set of data and one value to show, summed over time.
-
- .. image:: ../_static/screenshot/cumulativeLineChart.png
-
- Python example::
-
- from nvd3 import cumulativeLineChart
- chart = cumulativeLineChart(name='cumulativeLineChart', x_is_date=True)
- xdata = [1365026400000000, 1365026500000000, 1365026600000000]
- ydata = [-6, 5, -1]
- y2data = [36, 55, 11]
-
- extra_serie = {"tooltip": {"y_start": "There are ", "y_end": " calls"}}
- chart.add_serie(name="Serie 1", y=ydata, x=xdata, extra=extra_serie)
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " mins"}}
- chart.add_serie(name="Serie 2", y=y2data, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data_lineWithFocusChart = [
- {
- "key" : "Serie 1",
- "values" : [
- { "x" : "1365026400000000",
- "y" : -6
- },
- { "x" : "1365026500000000",
- "y" : -5
- },
- { "x" : "1365026600000000",
- "y" : -1
- },
- ],
- },
- {
- "key" : "Serie 2",
- "values" : [
- { "x" : "1365026400000000",
- "y" : 34
- },
- { "x" : "1365026500000000",
- "y" : 56
- },
- { "x" : "1365026600000000",
- "y" : 32
- },
- ],
- }
- ]
-
- nv.addGraph(function() {
- var chart = nv.models.cumulativeLineChart();
-
- chart.xAxis
- .tickFormat(function(d) { return d3.time.format('%d %b %Y')(new Date(d)) });
- chart.y1Axis
- .tickFormat(d3.format('.1%'));
- chart.tooltipContent(function(key, y, e, graph) {
- var x = d3.time.format('%d %b %Y')(new Date(parseInt(graph.point.x)));
- var y = String(graph.point.y);
- if(key == 'Serie 1'){
- var y = 'There are ' + String(e) + ' calls';
- }
- if(key == 'Serie 2'){
- var y = String(e) + ' mins';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' on ' + x;
- return tooltip_str;
- });
- d3.select('#cumulativeLineChart svg')
- .datum(data_linePlusBarChart)
- .transition().duration(500)
- .attr('height', 350)
- .call(chart);
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
-
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
- self.create_x_axis('xAxis',
- format=kwargs.get('x_axis_format', '%d %b %Y'),
- date=True)
- self.set_custom_tooltip_flag(True)
- else:
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '.2f'))
-
- self.create_y_axis('yAxis', format=kwargs.get('y_axis_format', '.1%'))
-
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
diff --git a/tools/wtperf_stats/3rdparty/nvd3/discreteBarChart.py b/tools/wtperf_stats/3rdparty/nvd3/discreteBarChart.py
deleted file mode 100644
index a16c32a9265..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/discreteBarChart.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart
-
-
-class discreteBarChart(NVD3Chart):
- """
- A discrete bar chart or bar graph is a chart with rectangular bars with
- lengths proportional to the values that they represent.
-
- .. image:: ../_static/screenshot/discreteBarChart.png
-
- Python example::
-
- from nvd3 import discreteBarChart
- chart = discreteBarChart(name='discreteBarChart', height=400, width=400)
-
- xdata = ["A", "B", "C", "D", "E"]
- ydata = [3, 4, 0, -3, 5, 7]
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " balls"}}
- chart.add_serie(y=ydata, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data = [{ key: "Cumulative Return",
- values: [
- {
- "label": "A",
- "value" : 10
- },
- {
- "label": "B",
- "value" : 0
- },
- {
- "label": "C",
- "value" : -3
- },
- ]
- }]
-
- nv.addGraph(function() {
- var chart = nv.models.discreteBarChart()
- .x(function(d) { return d.label })
- .y(function(d) { return d.value })
- .showLabels(true);
- chart.tooltipContent(function(key, y, e, graph) {
- var x = String(graph.point.x);
- var y = String(graph.point.y);
- if(key == 'Serie 1'){
- var y = String(graph.point.y) + ' balls';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' at ' + x;
- return tooltip_str;
- });
- d3.select("#div_id")
- .datum(data)
- .transition()
- .duration(1200)
- .call(chart);
-
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- self.name = kwargs.get('name', 'discreteBarChart')
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
- self.create_x_axis('xAxis',
- format=kwargs.get('x_axis_format', "%d %b %Y %H %S"),
- date=True)
- else:
- self.create_x_axis('xAxis', format=None)
-
- self.set_custom_tooltip_flag(True)
-
- # must have a specified height, otherwise it superimposes both charts
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
diff --git a/tools/wtperf_stats/3rdparty/nvd3/lineChart.py b/tools/wtperf_stats/3rdparty/nvd3/lineChart.py
deleted file mode 100644
index b0dc1796863..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/lineChart.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart, stab
-
-
-class lineChart(NVD3Chart):
- """
- A line chart or line graph is a type of chart which displays information
- as a series of data points connected by straight line segments.
-
- .. image:: ../_static/screenshot/lineChart.png
-
- Python example::
-
- from nvd3 import lineChart
- chart = lineChart(name='lineChart', height=400, width=400, x_is_date=True, x_axis_format="%d %b %Y %H")
- xdata = [1365026400000000, 1365026500000000, 1365026600000000]
- ydata = [-6, 5, -1]
-
- extra_serie = {"tooltip": {"y_start": "There is ", "y_end": " calls"},
- "date_format": "%d %b %Y %H:%S"}
- chart.add_serie(name="Serie 1", y=ydata, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data_lineChart = [{
- "key" : "Serie 1",
- "values" : [
- { "x" : "1365026400000000",
- "y" : -6
- },
- { "x" : "1365026500000000",
- "y" : -5
- },
- { "x" : "1365026600000000",
- "y" : -1
- },
- ],
- "yAxis" : "1"
- }]
-
- nv.addGraph(function() {
- var chart = nv.models.lineChart();
- chart.xAxis
- .tickFormat(function(d) { return d3.time.format('%d %b %y %H')(new Date(d)) });
- chart.yAxis
- .tickFormat(d3.format(',.2f'));
- chart.tooltipContent(function(key, y, e, graph) {
- var x = d3.time.format('%d %b %Y %H:%S')(new Date(parseInt(graph.point.x)));
- var y = String(graph.point.y);
- if(key == 'Serie 1'){
- var y = 'There is ' + String(graph.point.y) + ' calls';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' on ' + x;
- return tooltip_str;
- });
- d3.select('#lineChart svg')
- .datum(data_lineChart)
- .transition()
- .duration(500)
- .call(chart);
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
- self.create_x_axis('xAxis',
- format=kwargs.get('x_axis_format', '%d %b %Y'),
- date=True)
- self.set_custom_tooltip_flag(True)
- else:
- if kwargs.get('x_axis_format') == 'AM_PM':
- self.x_axis_format = format = 'AM_PM'
- else:
- format = kwargs.get('x_axis_format', 'r')
- self.create_x_axis('xAxis', format=format)
- self.create_y_axis('yAxis', format=kwargs.get('y_axis_format', '.02f'))
-
- # must have a specified height, otherwise it superimposes both chars
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
-
- def buildjschart(self):
- NVD3Chart.buildjschart(self)
- am_pm_js = ''
- if self.x_axis_format == 'AM_PM':
- am_pm_js += stab(2) + "function get_am_pm(d){\n"
- am_pm_js += stab(3) + "if(d > 12){ d = d - 12; return (String(d) + 'PM');}\n"
- am_pm_js += stab(3) + "else{ return (String(d) + 'AM');}\n"
- am_pm_js += stab(2) + "};\n"
-
- start_js = self.jschart.find('nv.addGraph')
- replace_index = start_js
- if start_js > 0:
- self.jschart = self.jschart[:replace_index] + am_pm_js + self.jschart[replace_index:]
diff --git a/tools/wtperf_stats/3rdparty/nvd3/linePlusBarChart.py b/tools/wtperf_stats/3rdparty/nvd3/linePlusBarChart.py
deleted file mode 100644
index b4b3ca139b0..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/linePlusBarChart.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart
-
-
-class linePlusBarChart(NVD3Chart):
- """
- A linePlusBarChart Chart is a type of chart which displays information
- as a series of data points connected by straight line segments
- and with some series with rectangular bars with lengths proportional
- to the values that they represent
-
- .. image:: ../_static/screenshot/linePlusBarChart.png
-
- Python example::
-
- from nvd3 import linePlusBarChart
- chart = linePlusBarChart(name='linePlusBarChart', x_is_date=True, x_axis_format="%d %b %Y")
-
- xdata = [1365026400000000, 1365026500000000, 1365026600000000]
- ydata = [-6, 5, -1]
- y2data = [36, 55, 11]
-
- extra_serie = {"tooltip": {"y_start": "There is ", "y_end": " calls"},
- "date_format": "%d %b %Y %H:%S" }
- chart.add_serie(name="Serie 1", y=ydata, x=xdata, extra=extra_serie)
-
- extra_serie = {"tooltip": {"y_start": "There is ", "y_end": " min"}}
- chart.add_serie(name="Serie 2", y=y2data, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data_lineWithFocusChart = [
- {
- "key" : "Serie 1",
- "bar": "true",
- "values" : [
- { "x" : "1365026400000000",
- "y" : -6
- },
- { "x" : "1365026500000000",
- "y" : -5
- },
- { "x" : "1365026600000000",
- "y" : -1
- },
- ],
- },
- {
- "key" : "Serie 2",
- "values" : [
- { "x" : "1365026400000000",
- "y" : 34
- },
- { "x" : "1365026500000000",
- "y" : 56
- },
- { "x" : "1365026600000000",
- "y" : 32
- },
- ],
- }
- ]
-
- nv.addGraph(function() {
- var chart = nv.models.linePlusBarChart();
-
- chart.xAxis
- .tickFormat(function(d) { return d3.time.format('%d %b %Y')(new Date(d)) });
- chart.y1Axis
- .tickFormat(d3.format(',f'));
- chart.y2Axis
- .tickFormat(function(d) { return '$' + d3.format(',f')(d) });
- chart.tooltipContent(function(key, y, e, graph) {
- var x = d3.time.format('%d %b %Y %H:%S')(new Date(parseInt(graph.point.x)));
- var y = String(graph.point.y);
- if(key.indexOf('Serie 1') > -1 ){
- var y = '$ ' + String(graph.point.y) ;
- }
- if(key.indexOf('Serie 2') > -1 ){
- var y = String(graph.point.y) + ' min';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' on ' + x;
- return tooltip_str;
- });
- d3.select('#linePlusBarChart svg')
- .datum(data_linePlusBarChart)
- .transition().duration(500)
- .attr('height', 350)
- .call(chart);
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
- self.create_x_axis('xAxis',
- format=kwargs.get('x_axis_format', '%d %b %Y %H %S'),
- date=True)
- self.set_custom_tooltip_flag(True)
- else:
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '.2f'))
-
- self.create_y_axis('y1Axis', format="f")
- self.create_y_axis('y2Axis', format="function(d) { return d3.format(',f')(d) }", custom_format=True)
-
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
diff --git a/tools/wtperf_stats/3rdparty/nvd3/linePlusBarWithFocusChart.py b/tools/wtperf_stats/3rdparty/nvd3/linePlusBarWithFocusChart.py
deleted file mode 100644
index 6067b7a5bbb..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/linePlusBarWithFocusChart.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart, stab
-
-
-class linePlusBarWithFocusChart(NVD3Chart):
- """
- A linePlusBarWithFocusChart Chart is a type of chart which displays information
- as a series of data points connected by straight line segments
- and with some series with rectangular bars with lengths proportional
- to the values that they represent
-
- .. image:: ../_static/screenshot/linePlusBarWithFocusChart.png
-
- Python example::
-
- from nvd3 import linePlusBarWithFocusChart
- chart = linePlusBarWithFocusChart(name='linePlusBarChart', x_is_date=True, x_axis_format="%d %b %Y")
-
- xdata = [1365026400000000, 1365026500000000, 1365026600000000]
- ydata = [-6, 5, -1]
- y2data = [36, 55, 11]
- kwargs = {}
- kwargs['bar'] = True
- extra_serie = {"tooltip": {"y_start": "There is ", "y_end": " calls"},
- "date_format": "%d %b %Y %H:%S" }
- chart.add_serie(name="Serie 1", y=ydata, x=xdata, extra=extra_serie, **kwargs)
-
- extra_serie = {"tooltip": {"y_start": "There is ", "y_end": " min"}}
- chart.add_serie(name="Serie 2", y=y2data, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data_linePlusBarWithFocusChart = [
- {
- "key" : "Quantity" ,
- "bar": true,
- "values" : [ [ 1136005200000 , 1271000.0] , [ 1138683600000 , 1271000.0] , ]
- },
- {
- "key" : "Price" ,
- "values" : [ [ 1136005200000 , 71.89] , [ 1138683600000 , 75.51]]
- }
- ].map(function(series) {
- series.values = series.values.map(function(d) { return {x: d[0], y: d[1] } });
- return series;
- });
-
- nv.addGraph(function() {
- var chart = nv.models.linePlusBarWithFocusChart()
- .margin({top: 30, right: 60, bottom: 50, left: 70})
- .x(function(d,i) { return i })
- .color(d3.scale.category10().range());
-
- chart.xAxis.tickFormat(function(d) {
-
- var dx = testdata[0].values[d] && testdata[0].values[d].x || 0;
- if (dx > 0) {
- return d3.time.format('%x')(new Date(dx))
- }
- return null;
- });
-
- chart.x2Axis.tickFormat(function(d) {
- var dx = testdata[0].values[d] && testdata[0].values[d].x || 0;
- return d3.time.format('%x')(new Date(dx))
- });
-
- chart.y1Axis.tickFormat(d3.format(',f'));
-
- chart.y3Axis.tickFormat(d3.format(',f'));
-
- chart.y2Axis.tickFormat(function(d) { return '$' + d3.format(',.2f')(d) });
-
- chart.y4Axis.tickFormat(function(d) { return '$' + d3.format(',.2f')(d) });
-
- chart.bars.forceY([0]);
- chart.bars2.forceY([0]);
- //chart.lines.forceY([0]);
- nv.log(testdata);
- d3.select('#linePlusBarWithFocusChart svg')
- .datum(testdata)
- .call(chart);
-
- nv.utils.windowResize(chart.update);
-
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
-
- with_focus_chart_1 = """function(d) {
- var dx = data_%s[0].values[d] && data_%s[0].values[d].x || 0;
- if (dx > 0) { return d3.time.format('%s')(new Date(dx)) }
- return null;
- }""" % (self.name, self.name, kwargs.get('x_axis_format', '%d %b %Y %H %S'))
- self.create_x_axis('xAxis', format=with_focus_chart_1, date=False, custom_format=True)
-
- with_focus_chart_2 = """function(d) {
- var dx = data_%s[0].values[d] && data_%s[0].values[d].x || 0;
- return d3.time.format('%s')(new Date(dx));
- }""" % (self.name, self.name, kwargs.get('x_axis_format', '%d %b %Y %H %S'))
-
- self.create_x_axis('x2Axis', format=with_focus_chart_2, date=False, custom_format=True)
-
- self.set_custom_tooltip_flag(True)
- else:
- self.create_x_axis('xAxis', format=".2f")
-
- self.create_y_axis('y1Axis', format="f")
- self.create_y_axis('y3Axis', format="f")
-
- self.create_y_axis('y2Axis', format="function(d) { return d3.format(',.2f')(d) }", custom_format=True)
-
- self.create_y_axis('y4Axis', format="function(d) { return d3.format(',.2f')(d) }", custom_format=True)
-
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
-
- def buildjschart(self):
- NVD3Chart.buildjschart(self)
-
- string_jschart = '\n' + stab(2) + 'chart.margin({top: 30, right: 60, bottom: 50, left: 70})\n' + \
- stab(3) + '.x(function(d,i) { return i });\n'
- if self.width:
- string_jschart += stab(2) + 'chart.width(%s);\n' % self.width
- if self.height:
- string_jschart += stab(2) + 'chart.height(%s);\n' % self.height
-
- start_index = self.jschart.find('.linePlusBarWithFocusChart();')
- string_len = len('.linePlusBarWithFocusChart();')
- replace_index = start_index + string_len
- if start_index > 0:
- self.jschart = self.jschart[:replace_index] + string_jschart + self.jschart[replace_index:]
diff --git a/tools/wtperf_stats/3rdparty/nvd3/lineWithFocusChart.py b/tools/wtperf_stats/3rdparty/nvd3/lineWithFocusChart.py
deleted file mode 100644
index 4a6cd778551..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/lineWithFocusChart.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart
-
-
-class lineWithFocusChart(NVD3Chart):
- """
- A lineWithFocusChart or line graph is a type of chart which displays information
- as a series of data points connected by straight line segments.
- The lineWithFocusChart provide a smaller chart that act as a selector,
- this is very useful if you want to zoom on a specific time period.
-
- .. image:: ../_static/screenshot/lineWithFocusChart.png
-
- Python example::
-
- from nvd3 import lineWithFocusChart
- chart = lineWithFocusChart(name='lineWithFocusChart', x_is_date=True, x_axis_format="%d %b %Y")
- xdata = [1365026400000000, 1365026500000000, 1365026600000000]
- ydata = [-6, 5, -1]
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " ext"},
- "date_format": "%d %b %Y"}
- chart.add_serie(name="Serie 1", y=ydata, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data_lineWithFocusChart = [{ "key" : "Serie 1",
- "values" : [
- { "x" : "1365026400000000",
- "y" : -6
- },
- { "x" : "1365026500000000",
- "y" : -5
- },
- { "x" : "1365026600000000",
- "y" : -1
- },
- ],
- "yAxis" : "1"
- }]
-
- nv.addGraph(function() {
- var chart = nv.models.lineWithFocusChart();
- chart.yAxis
- .tickFormat(d3.format(',.2f'));
- chart.y2Axis
- .tickFormat(d3.format(',.2f'));
- chart.xAxis
- .tickFormat(function(d) { return d3.time.format('%d %b %y')(new Date(d)) });
- chart.x2Axis
- .tickFormat(function(d) { return d3.time.format('%d %b %y')(new Date(d)) });
- chart.tooltipContent(function(key, y, e, graph) {
- var x = d3.time.format('%d %b %Y')(new Date(parseInt(graph.point.x)));
- var y = String(graph.point.y);
- if(key == 'serie 1'){
- var y = 'There is ' + String(graph.point.y) + ' calls';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' on ' + x;
- return tooltip_str;
- });
- d3.select('#lineWithFocusChart svg')
- .datum(data_lineWithFocusChart)
- .transition()
- .duration(500)
- .call(chart);
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '%d %b %Y %H %S'), date=True)
- self.create_x_axis('x2Axis', format=kwargs.get('x_axis_format', '%d %b %Y %H %S'), date=True)
- self.set_custom_tooltip_flag(True)
- else:
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '.2f'))
- self.create_x_axis('x2Axis', format=kwargs.get('x_axis_format', '.2f'))
-
- self.create_y_axis('yAxis', format=kwargs.get('y_axis_format', '.2f'))
- self.create_y_axis('y2Axis', format=kwargs.get('y_axis_format', '.2f'))
-
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
diff --git a/tools/wtperf_stats/3rdparty/nvd3/multiBarChart.py b/tools/wtperf_stats/3rdparty/nvd3/multiBarChart.py
deleted file mode 100644
index 991f0f48174..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/multiBarChart.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart
-
-
-class multiBarChart(NVD3Chart):
- """
- A multiple bar graph contains comparisons of two or more categories or bars.
- One axis represents a quantity and the other axis identifies a specific feature
- about the categories. Reading a multiple bar graph includes looking at extremes
- (tallest/longest vs. shortest) in each grouping.
-
- .. image:: ../_static/screenshot/multiBarChart.png
-
- Python example::
-
- from nvd3 import multiBarChart
- chart = multiBarChart(name='multiBarChart', height=400, width=400)
- xdata = [0, 1, 3, 4]
- ydata = [6, 12, 9, 16]
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " balls"}}
- chart.add_serie(name="Serie 1", y=ydata, x=xdata)
- chart.buildhtml()
-
- Javascript generated::
-
- data_MultiBarChart = [{ "key" : "Serie 1",
- "values" : [
- { "x" : 0
- "y" : 6
- },
- { "x" : 1,
- "y" : 12
- },
- { "x" : 3,
- "y" : 9
- },
- ],
- "yAxis" : "1"
- }]
-
- nv.addGraph(function() {
- var chart = nv.models.multiBarChart();
- chart.xAxis
- .tickFormat(d3.format(',.2f'));
- chart.yAxis
- .tickFormat(d3.format(',.2f'));
- chart.tooltipContent(function(key, y, e, graph) {
- var x = String(graph.point.x);
- var y = String(graph.point.y);
- if(key == 'Serie 1'){
- var y = String(graph.point.y) + ' balls';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' at ' + x;
- return tooltip_str;
- });
- d3.select('#MultiBarChart svg')
- .datum(data_MultiBarChart)
- .transition()
- .duration(500)
- .call(chart);
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
- self.create_x_axis('xAxis',
- format=kwargs.get('x_axis_format', '%d %b %Y'),
- date=True)
- self.set_custom_tooltip_flag(True)
- else:
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '.2f'))
- self.create_y_axis('yAxis', format=kwargs.get('y_axis_format', '.2f'))
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
diff --git a/tools/wtperf_stats/3rdparty/nvd3/multiBarHorizontalChart.py b/tools/wtperf_stats/3rdparty/nvd3/multiBarHorizontalChart.py
deleted file mode 100644
index 8f2c8dbaaee..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/multiBarHorizontalChart.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart
-
-
-class multiBarHorizontalChart(NVD3Chart):
- """
- A multiple horizontal bar graph contains comparisons of two or more categories or bars.
-
- .. image:: ../_static/screenshot/multiBarHorizontalChart.png
-
- Python example::
-
- from nvd3 import multiBarHorizontalChart
- chart = multiBarHorizontalChart(name='multiBarHorizontalChart', height=400, width=400)
- xdata = [-14, -7, 7, 14]
- ydata = [-6, 5, -1, 9]
- y2data = [-23, -6, -32, 9]
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " balls"}}
- chart.add_serie(name="Serie 1", y=ydata, x=xdata, extra=extra_serie)
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " calls"}}
- chart.add_serie(name="Serie 2", y=y2data, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data_lineChart = [ { "key" : "Serie 1",
- "values" : [ { "x" : 0,
- "y" : -2
- },
- { "x" : 1,
- "y" : 4
- },
- { "x" : 2,
- "y" : -7
- },
- ],
- "yAxis" : "1"
- },
- { "key" : "Serie 2",
- "values" : [ { "x" : 0,
- "y" : -4
- },
- { "x" : 1,
- "y" : 8
- },
- { "x" : 2,
- "y" : -14
- },
- ],
- "yAxis" : "1"
- }
- ]
-
- nv.addGraph(function() {
- var chart = nv.models.multiBarHorizontalChart();
- chart.xAxis
- .tickFormat(d3.format(',.2f'));
- chart.yAxis
- .tickFormat(d3.format(',.2f'));
- chart.tooltipContent(function(key, y, e, graph) {
- var x = String(graph.point.x);
- var y = String(graph.point.y);
- if(key == 'Serie 1'){
- var y = String(graph.point.y) + ' balls';
- }
- if(key == 'Serie 2'){
- var y = String(graph.point.y) + ' calls';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' at ' + x;
- return tooltip_str;
- });
- d3.select('#multiBarHorizontalChart svg')
- .datum(data_multiBarHorizontalChart)
- .transition().duration(500)
- .attr('height', 350)
- .call(chart);
-
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '.2f'))
- self.create_y_axis('yAxis', format=kwargs.get('y_axis_format', '.2f'))
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
diff --git a/tools/wtperf_stats/3rdparty/nvd3/pieChart.py b/tools/wtperf_stats/3rdparty/nvd3/pieChart.py
deleted file mode 100644
index 5c542bd8d3c..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/pieChart.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart, stab
-
-
-class pieChart(NVD3Chart):
- """
- A pie chart (or a circle graph) is a circular chart divided into sectors,
- illustrating numerical proportion. In chart, the arc length of each sector
- is proportional to the quantity it represents.
-
- .. image:: ../_static/screenshot/pieChart.png
-
- Python example::
-
- from nvd3 import pieChart
- chart = pieChart(name='pieChart', color_category='category20c', height=400, width=400)
-
- xdata = ["Orange", "Banana", "Pear", "Kiwi", "Apple", "Strawberry", "Pineapple"]
- ydata = [3, 4, 0, 1, 5, 7, 3]
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " cal"}}
- chart.add_serie(y=ydata, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data = [{ key: "Cumulative Return",
- values: [
- {
- "label": "One",
- "value" : 29.765957771107
- },
- {
- "label": "Two",
- "value" : 0
- },
- {
- "label": "Three",
- "value" : 32.807804682612
- },
- ]
- }]
-
- nv.addGraph(function() {
- var chart = nv.models.pieChart()
- .x(function(d) { return d.label })
- .y(function(d) { return d.value })
- .showLabels(true);
-
- chart.color(d3.scale.category20c().range());
-
- chart.tooltipContent(function(key, y, e, graph) {
- var x = String(key);
- var y = String(y) + ' cal';
- tooltip_str = '<center><b>'+x+'</b></center>' + y;
- return tooltip_str;
- });
-
- d3.select("#div_id")
- .datum(data)
- .transition()
- .duration(1200)
- .call(chart);
-
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- self.create_x_axis('xAxis', format=None)
- self.create_y_axis('yAxis', format=None)
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
-
- def buildjschart(self):
- NVD3Chart.buildjschart(self)
-
- color_js = ''
- if self.color_list:
- color_js += "var mycolor = new Array();\n"
- color_count = 0
- for i in self.color_list:
- color_js += stab(2) + "mycolor[" + str(color_count) + "] = '" + i + "';\n"
- color_count = int(color_count) + 1
-
- # add mycolor var in js before nv.addGraph starts
- if self.color_list:
- start_js = self.jschart.find('nv.addGraph')
- #start_js_len = len('nv.addGraph')
- replace_index = start_js
- if start_js > 0:
- self.jschart = self.jschart[:replace_index] + color_js + self.jschart[replace_index:]
-
- pie_jschart = '\n' + stab(2) + 'chart.x(function(d) { return d.label })\n' + \
- stab(3) + '.y(function(d) { return d.value });\n'
- if self.width:
- pie_jschart += stab(2) + 'chart.width(%s);\n' % self.width
- if self.height:
- pie_jschart += stab(2) + 'chart.height(%s);\n' % self.height
-
- # add custom colors for pieChart
- if self.color_list and color_js:
- pie_jschart += stab(2) + 'chart.color(mycolor);\n'
-
- start_index = self.jschart.find('.pieChart();')
- string_len = len('.pieChart();')
- replace_index = start_index + string_len
- if start_index > 0:
- self.jschart = self.jschart[:replace_index] + pie_jschart + self.jschart[replace_index:]
diff --git a/tools/wtperf_stats/3rdparty/nvd3/scatterChart.py b/tools/wtperf_stats/3rdparty/nvd3/scatterChart.py
deleted file mode 100644
index 74e1e08475f..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/scatterChart.py
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart, stab
-
-
-class scatterChart(NVD3Chart):
- """
- A scatter plot or scattergraph is a type of mathematical diagram using Cartesian
- coordinates to display values for two variables for a set of data.
- The data is displayed as a collection of points, each having the value of one variable
- determining the position on the horizontal axis and the value of the other variable
- determining the position on the vertical axis.
-
- .. image:: ../_static/screenshot/scatterChart.png
-
- Python example::
-
- from nvd3 import scatterChart
- chart = scatterChart(name='scatterChart', height=400, width=400)
- xdata = [3, 4, 0, -3, 5, 7]
- ydata = [-1, 2, 3, 3, 15, 2]
- ydata = [1, -2, 4, 7, -5, 3]
-
- kwargs1 = {'shape': 'circle', 'size': '1'}
- kwargs2 = {'shape': 'cross', 'size': '10'}
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " call"}}
- chart.add_serie(name="series 1", y=ydata, x=xdata, extra=extra_serie, **kwargs1)
-
- extra_serie = {"tooltip": {"y_start": "", "y_end": " min"}}
- chart.add_serie(name="series 2", y=ydata, x=xdata, extra=extra_serie, **kwargs2)
- chart.buildhtml()
-
- Javascript generated::
-
- data = [{ key: "series 1",
- values: [
- {
- "x": 2,
- "y": 10,
- "shape": "circle"
- },
- {
- "x": -2,
- "y" : 0,
- "shape": "circle"
- },
- {
- "x": 5,
- "y" : -3,
- "shape": "circle"
- },
- ]
- },
- { key: "series 2",
- values: [
- {
- "x": 4,
- "y": 10,
- "shape": "cross"
- },
- {
- "x": 4,
- "y" : 0,
- "shape": "cross"
- },
- {
- "x": 3,
- "y" : -3,
- "shape": "cross"
- },
- ]
- }]
-
- nv.addGraph(function() {
- var chart = nv.models.scatterChart()
- .showLabels(true);
-
- chart.showDistX(true);
- chart.showDistY(true);
-
- chart.tooltipContent(function(key, y, e, graph) {
- var x = String(graph.point.x);
- var y = String(graph.point.y);
- if(key == 'serie 1'){
- var y = String(graph.point.y) + ' calls';
- }
- if(key == 'serie 2'){
- var y = String(graph.point.y) + ' min';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' at ' + x;
- return tooltip_str;
- });
-
- d3.select("#div_id")
- .datum(data)
- .transition()
- .duration(1200)
- .call(chart);
-
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '.02f'))
- self.create_y_axis('yAxis', format=kwargs.get('y_axis_format', '.02f'))
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
-
- def buildjschart(self):
- NVD3Chart.buildjschart(self)
-
- scatter_jschart = '\n' + stab(3) + '.showDistX(true)\n' + \
- stab(3) + '.showDistY(true)\n' + \
- stab(3) + '.color(d3.scale.category10().range())'
-
- start_index = self.jschart.find('.scatterChart()')
- string_len = len('.scatterChart()')
- replace_index = start_index + string_len
- if start_index > 0:
- self.jschart = self.jschart[:replace_index] + scatter_jschart + self.jschart[replace_index:]
diff --git a/tools/wtperf_stats/3rdparty/nvd3/stackedAreaChart.py b/tools/wtperf_stats/3rdparty/nvd3/stackedAreaChart.py
deleted file mode 100644
index 9913929f4cf..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/stackedAreaChart.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-"""
-Python-nvd3 is a Python wrapper for NVD3 graph library.
-NVD3 is an attempt to build re-usable charts and chart components
-for d3.js without taking away the power that d3.js gives you.
-
-Project location : https://github.com/areski/python-nvd3
-"""
-
-from .NVD3Chart import NVD3Chart
-
-
-class stackedAreaChart(NVD3Chart):
- """
- The stacked area chart is identical to the area chart, except the areas are stacked
- on top of each other, rather than overlapping. This can make the chart much easier to read.
-
- .. image:: ../_static/screenshot/stackedAreaChart.png
-
- Python example::
-
- from nvd3 import stackedAreaChart
- chart = stackedAreaChart(name='stackedAreaChart', height=400, width=400)
-
- xdata = [100, 101, 102, 103, 104, 105, 106,]
- ydata = [6, 11, 12, 7, 11, 10, 11]
- ydata2 = [8, 20, 16, 12, 20, 28, 28]
-
- extra_serie = {"tooltip": {"y_start": "There is ", "y_end": " min"}}
- chart.add_serie(name="Serie 1", y=ydata, x=xdata, extra=extra_serie)
- chart.add_serie(name="Serie 2", y=ydata2, x=xdata, extra=extra_serie)
- chart.buildhtml()
-
- Javascript generated::
-
- data_stackedAreaChart = [{
- "values":[
- {
- "y":9,
- "x":100
- },
- {
- "y":5,
- "x":101
- },
- ],
- "key":"Serie 1",
- "yAxis":"1"
- },
- {
- "values":[
- {
- "y":18,
- "x":100
- },
- {
- "y":10,
- "x":101
- },
- ],
- "key":"Serie 2",
- "yAxis":"1"
- }
- ]
-
- nv.addGraph(function() {
- var chart = nv.models.stackedAreaChart();
- chart.xAxis
- .tickFormat(d3.format(',.2f'));
- chart.yAxis
- .tickFormat(d3.format(',.2f'));
- chart.tooltipContent(function(key, y, e, graph) {
- var x = String(graph.point.x);
- var y = String(graph.point.y);
- if(key == 'serie 1'){
- var y = 'There is ' + String(graph.point.y) + ' min';
- }
- if(key == 'serie 2'){
- var y = 'There is ' + String(graph.point.y) + ' min';
- }
- tooltip_str = '<center><b>'+key+'</b></center>' + y + ' at ' + x;
- return tooltip_str;
- });
- d3.select('#stackedAreaChart svg')
- .datum(data_stackedAreaChart)
- .transition()
- .duration(500)
- .call(chart);
- return chart;
- });
- """
- def __init__(self, **kwargs):
- NVD3Chart.__init__(self, **kwargs)
- height = kwargs.get('height', 450)
- width = kwargs.get('width', None)
-
- if kwargs.get('x_is_date', False):
- self.set_date_flag(True)
- self.create_x_axis('xAxis',
- format=kwargs.get('x_axis_format', '%d %b %Y'),
- date=True)
- self.set_custom_tooltip_flag(True)
- else:
- self.create_x_axis('xAxis', format=kwargs.get('x_axis_format', '.2f'))
- self.create_y_axis('yAxis', format=kwargs.get('y_axis_format', '.2f'))
- # must have a specified height, otherwise it superimposes both chars
- if height:
- self.set_graph_height(height)
- if width:
- self.set_graph_width(width)
diff --git a/tools/wtperf_stats/3rdparty/nvd3/translator.py b/tools/wtperf_stats/3rdparty/nvd3/translator.py
deleted file mode 100644
index ffde2c2a1ce..00000000000
--- a/tools/wtperf_stats/3rdparty/nvd3/translator.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: UTF-8 -*-
-
-
-class Tag(object):
- """Tag class"""
-
- def __init__(self, content=None):
- self.content = content
- self.attrs = ' '.join(['%s="%s"' % (attr, value)
- for attr, value in self.attrs])
-
- def __str__(self):
- return '<%s%s>\n %s\n</%s>' % (self.name,
- ' ' + self.attrs if self.attrs else '',
- self.content,
- self.name)
-
-
-class ScriptTag(Tag):
- name = 'script'
- attrs = (('type', 'text/javascript'),)
-
-
-class AnonymousFunction(object):
- def __init__(self, arguments, content):
- self.arguments = arguments
- self.content = content
-
- def __str__(self):
- return 'function(%s) { %s }' % (self.arguments, self.content)
-
-
-class Function(object):
-
- def __init__(self, name):
- self.name = name
- self._calls = []
-
- def __str__(self):
- operations = [self.name]
- operations.extend(str(call) for call in self._calls)
- return '%s' % ('.'.join(operations),)
-
- def __getattr__(self, attr):
- self._calls.append(attr)
- return self
-
- def __call__(self, *args):
- if not args:
- self._calls[-1] = self._calls[-1] + '()'
- else:
- arguments = ','.join([str(arg) for arg in args])
- self._calls[-1] = self._calls[-1] + '(%s)' % (arguments,)
- return self
-
-
-class Assignment(object):
-
- def __init__(self, key, value, scoped=True):
- self.key = key
- self.value = value
- self.scoped = scoped
-
- def __str__(self):
- return '%s%s = %s;' % ('var ' if self.scoped else '', self.key, self.value)
-
-
-def indent(func):
- # TODO: Add indents to function str
- return str(func)
diff --git a/tools/wtperf_stats/wt_nvd3_util.py b/tools/wtperf_stats/wt_nvd3_util.py
deleted file mode 100644
index fe058d25c1d..00000000000
--- a/tools/wtperf_stats/wt_nvd3_util.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-#
-# Public Domain 2008-2014 WiredTiger, Inc.
-#
-# This is free and unencumbered software released into the public domain.
-#
-# Anyone is free to copy, modify, publish, use, compile, sell, or
-# distribute this software, either in source code form or as a compiled
-# binary, for any purpose, commercial or non-commercial, and by any
-# means.
-#
-# In jurisdictions that recognize copyright laws, the author or authors
-# of this software dedicate any and all copyright interest in the
-# software to the public domain. We make this dedication for the benefit
-# of the public at large and to the detriment of our heirs and
-# successors. We intend this dedication to be an overt act of
-# relinquishment in perpetuity of all present and future rights to this
-# software under copyright law.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-# OTHER DEALINGS IN THE SOFTWARE.
-#
-import os, sys
-from datetime import datetime
-
-tool_dir = os.path.split(sys.argv[0])[0]
-# Make sure Python finds the NVD3 in our third party directory, to
-# avoid compatability issues
-sys.path.append(os.path.join(tool_dir, "3rdparty"))
-
-try:
- from nvd3 import lineChart
-except ImportError:
- print >>sys.stderr, "Could not import nvd3. It should be installed locally."
- sys.exit(-1)
-
-# Add a multiChart type so we can overlay line graphs
-class multiChart(lineChart):
- def __init__(self, **kwargs):
- lineChart.__init__(self, **kwargs)
-
- # Fix the axes
- del self.axislist['yAxis']
- self.create_y_axis('yAxis1', format=kwargs.get('y_axis_format', '.02f'))
- self.create_y_axis('yAxis2', format=kwargs.get('y_axis_format', '.02f'))
-
-TIMEFMT = "%b %d %H:%M:%S"
-
-thisyear = datetime.today().year
-def parsetime(s):
- return datetime.strptime(s, TIMEFMT).replace(year=thisyear)
-
diff --git a/tools/wtperf_stats/wtperf_stats.py b/tools/wtperf_stats/wtperf_stats.py
deleted file mode 100644
index f87ca2d3254..00000000000
--- a/tools/wtperf_stats/wtperf_stats.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/env python
-#
-# Public Domain 2008-2014 WiredTiger, Inc.
-#
-# This is free and unencumbered software released into the public domain.
-#
-# Anyone is free to copy, modify, publish, use, compile, sell, or
-# distribute this software, either in source code form or as a compiled
-# binary, for any purpose, commercial or non-commercial, and by any
-# means.
-#
-# In jurisdictions that recognize copyright laws, the author or authors
-# of this software dedicate any and all copyright interest in the
-# software to the public domain. We make this dedication for the benefit
-# of the public at large and to the detriment of our heirs and
-# successors. We intend this dedication to be an overt act of
-# relinquishment in perpetuity of all present and future rights to this
-# software under copyright law.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-# OTHER DEALINGS IN THE SOFTWARE.
-#
-
-import os, csv, operator, sys
-from time import mktime
-
-tool_dir = os.path.split(sys.argv[0])[0]
-sys.path.append(tool_dir)
-
-try:
- from wt_nvd3_util import multiChart, parsetime
-except ImportError:
- print >>sys.stderr, "Could not import wt_nvd3_util.py, it should be\
- in the same directory as %s" % sys.argv[0]
- sys.exit(-1)
-
-def timesort(s):
- # Sort the timestr via its parsetime() value so that the year gets
- # added and it properly sorts. Times are only %b %d %H:%M:%S and
- # may improperly sort if the data crosses a month boundary.
- t = operator.itemgetter('#time')
- timestr = t(s)
- return parsetime(timestr)
-
-# Fixup the names and values in a dictionary read in from a csv file. One
-# field must be "#time" - which is used to calculate the interval.
-# Input is a dictionary, output is a list of dictionaries with a single entry.
-def munge_dict(values_dict, abstime):
- sorted_values = sorted(values_dict, key=timesort)
- start_time = parsetime(sorted_values[0]['#time'])
-
- ret = []
- for v in sorted_values:
- if abstime:
- # Build the time series, milliseconds since the epoch
- v['#time'] = int(mktime(parsetime(v['#time']).timetuple())) * 1000
- else:
- # Build the time series as seconds since the start of the data
- v['#time'] = (parsetime(v['#time']) - start_time).seconds
- next_val = {}
- for title, value in v.items():
- if title.find('uS') != -1:
- title = title.replace('uS', 'ms')
- value = float(value) / 1000
- if title == 'totalsec':
- value = 0
- if title == 'checkpoints' and value == 'N':
- value = 0
- elif title.find('time') != -1:
- title = 'time'
- elif title.find('latency') == -1 and \
- title.find('checkpoints') == -1:
- title = title + ' (thousands)'
- value = float(value) / 1000
- next_val[title] = value
- ret.append(next_val)
-
- # After building the series, eliminate constants
- d0 = ret[0]
- for t0, v0 in d0.items():
- skip = True
- for d in ret:
- v = d[t0]
- if v != v0:
- skip = False
- break
- if skip:
- for dicts in ret:
- del dicts[t0]
-
- return ret
-
-def addPlotsToChart(chart, graph_data, wtstat_chart = False):
- # Extract the times - they are the same for all lines.
- times = []
- for v in graph_data:
- times.append(v['time'])
-
- # Add a line to the graph for each field in the CSV file in alphabetical
- # order, so the key is sorted.
- for field in sorted(graph_data[0].keys()):
- if field == 'time':
- continue
- # Split the latency and non-latency measurements onto different scales
- axis = "1"
- if not wtstat_chart and field.find('latency') == -1:
- axis="2"
- ydata = []
- for v in graph_data:
- ydata.append(v[field])
- chart.add_serie(x=times, y=ydata, name=field, type="line", yaxis=axis)
-
-# Input parameters are a chart populated with WiredTiger statistics and
-# the directory where the wtperf monitor file can be found.
-def addPlotsToStatsChart(chart, dirname, abstime):
- fname = os.path.join(dirname, 'monitor')
- try:
- with open(fname, 'rb') as csvfile:
- reader = csv.DictReader(csvfile)
- # Transform the data into something NVD3 can digest
- graph_data = munge_dict(reader, abstime)
- except IOError:
- print >>sys.stderr, "Could not open wtperf monitor file."
- sys.exit(-1)
- addPlotsToChart(chart, graph_data, 1)
-
-def main():
- # Parse the command line
- import argparse
-
- parser = argparse.ArgumentParser(description='Create graphs from WiredTiger statistics.')
- parser.add_argument('--abstime', action='store_true',
- help='use absolute time on the x axis')
- parser.add_argument('--output', '-o', metavar='file',
- default='wtperf_stats.html', help='HTML output file')
- parser.add_argument('files', metavar='file', nargs='+',
- help='input monitor file generated by WiredTiger wtperf application')
- args = parser.parse_args()
-
- output_file = open(args.output, 'w')
-
- if len(args.files) != 1:
- print 'Script currently only supports a single monitor file'
- exit (1)
-
- chart_extra = {}
- # Add in the x axis if the user wants time.
- if args.abstime:
- chart_extra['x_axis_format'] = '%H:%M:%S'
-
- for f in args.files:
- with open(f, 'rb') as csvfile:
- reader = csv.DictReader(csvfile)
- # Transform the data into something NVD3 can digest
- graph_data = munge_dict(reader, args.abstime)
-
- chart = multiChart(name='wtperf',
- height=450 + 10*len(graph_data[0].keys()),
- resize=True,
- x_is_date=args.abstime,
- assets_directory='http://source.wiredtiger.com/graphs/',
- **chart_extra)
-
- addPlotsToChart(chart, graph_data)
-
- chart.buildhtml()
- output_file.write(chart.htmlcontent)
- output_file.close()
-
-if __name__ == '__main__':
- main()
-