summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorKeith Bostic <keith@wiredtiger.com>2015-01-16 16:02:45 -0500
committerKeith Bostic <keith@wiredtiger.com>2015-01-16 16:02:45 -0500
commit749a3f3143abfba6c116e004f225a2496035cc31 (patch)
tree556a182d594b4544aeb210b9a96908810cec2190 /tools
parent0be45a41302b39adc4d0c8c1595ce35a4282cd94 (diff)
downloadmongo-749a3f3143abfba6c116e004f225a2496035cc31.tar.gz
Remove the (really, really old) gnuplot versions of the graph tools,
they're no longer in use.
Diffstat (limited to 'tools')
-rw-r--r--tools/statlog.py125
-rw-r--r--tools/wtperf_graph.py235
2 files changed, 0 insertions, 360 deletions
diff --git a/tools/statlog.py b/tools/statlog.py
deleted file mode 100644
index a597eb060ae..00000000000
--- a/tools/statlog.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env python
-#
-# Public Domain 2014-2015 MongoDB, Inc.
-# 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 fileinput, os, shutil, sys, textwrap
-from collections import defaultdict
-from datetime import datetime
-from subprocess import call
-
-# Import the data describing which statistics should not be scaled
-from stat_data import no_scale_per_second_list
-
-TIMEFMT = "%b %d %H:%M:%S"
-reportno = 0
-
-# Plot a set of entries for a title.
-def plot(title, values):
- global reportno
-
- # Ignore entries where the value never changes.
- skip = True
- t0, v0 = values[0]
- for t, v in values:
- if v != v0:
- skip = False
- break
- if skip:
- print 'skipping: ' + title
- return
-
- print 'building: ' + title
- reportno = reportno + 1
- num = "%03d" % reportno
-
- ylabel = 'Value'
- if title.split(' ')[1] != 'spinlock' and \
- title.split(' ', 1)[1] in no_scale_per_second_list:
- seconds = 1
- else:
- t1, v1 = values[1]
- seconds = (datetime.strptime(t1, TIMEFMT) -
- datetime.strptime(t0, TIMEFMT)).seconds
- if seconds == 0:
- seconds = 1
- ylabel += ' per second'
-
- # Write the raw data into a file for processing.
- of = open("reports/raw/report.%s.raw" % num, "w")
- for t, v in sorted(values):
- print >>of, "%s %g" % (t, float(v) / seconds)
- of.close()
-
- # Write a command file for gnuplot.
- of = open("gnuplot.cmd", "w")
- of.write('''
-set terminal png nocrop size 800,600
-set autoscale
-set grid
-set style data linespoints
-set title "%(title)s"
-set xlabel "Time"
-set xtics rotate by -45
-set xdata time
-set timefmt "%(timefmt)s"
-set format x "%(timefmt)s"
-set ylabel "%(ylabel)s"
-set yrange [0:]
-set output 'reports/report.%(num)s.png'
-plot "reports/raw/report.%(num)s.raw" using 1:4 notitle''' % {
- 'num' : num,
- 'timefmt' : TIMEFMT,
- 'title' : title,
- 'ylabel' : ylabel,
- })
- of.close()
-
- # Run gnuplot.
- call(["gnuplot", "gnuplot.cmd"])
-
- # Remove the command file.
- os.remove("gnuplot.cmd")
-
-# Read the input into a dictionary of lists.
-if sys.argv[1:] == []:
- print "usage: " + sys.argv[0] + " file ..."
- sys.exit(1)
-
-# Remove and re-create the reports folder.
-shutil.rmtree("reports", True)
-os.makedirs("reports/raw")
-
-d = defaultdict(list)
-for line in fileinput.input(sys.argv[1:]):
- month, day, time, v, desc = line.strip('\n').split(" ", 4)
- d[desc].append((month + " " + day + " " + time, v))
-
-# Plot each entry in the dictionary.
-for items in sorted(d.iteritems()):
- plot('\\n'.join(l for l in textwrap.wrap(items[0], 60)), items[1])
-
diff --git a/tools/wtperf_graph.py b/tools/wtperf_graph.py
deleted file mode 100644
index d80eb0cbce5..00000000000
--- a/tools/wtperf_graph.py
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/env python
-#
-# Public Domain 2014-2015 MongoDB, Inc.
-# 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 csv, os, sys
-from subprocess import call
-# Python script to read wtperf monitor output and create a performance
-# graph.
-
-TIMEFMT = "%b %d %H:%M:%S"
-
-def process_monitor(fname, sfx, ckptlist, opdict):
- # Read the monitor file and figure out when a checkpoint was running.
- in_ckpt = 'N'
-
- ckptlist=[]
-
- ofname = 'monitor%s.png' % (sfx)
- # Monitor output format currently is:
- # time,totalsec,read,insert,update,ckpt,...latencies...
- ops = ('read', 'insert', 'update')
- csvcol = (2, 3, 4)
- with open(fname, 'r') as csvfile:
- reader = csv.reader(csvfile)
- for row in reader:
- if row[0].lstrip().startswith('#'):
- continue
- # Look for checkpoints and operations.
- if row[5] != in_ckpt:
- ckptlist.append(row[0])
- in_ckpt = row[5]
- for op, col in zip(ops, csvcol):
- if row[col] != '0' and opdict[op] == 0:
- opdict[op] = 1
-
- if in_ckpt == 'Y':
- ckptlist.append(row[0])
-
- # Graph time vs. read, insert and update operations per second.
- gcmd = "gnuplot.mon.cmd"
- of = open(gcmd, "w")
- of.write('''
-set autoscale
-set datafile sep ','
-set grid
-set style data lines
-set terminal png nocrop size 800,600
-set timefmt "%(TIMEFMT)s"
-set title "read, insert and update operations per second"
-set format x "%(TIMEFMT)s"
-set xlabel "Time"
-set xtics rotate by -45
-set xdata time
-set ylabel "Operations per second (thousands)"
-set yrange [0:]\n''' % {
- 'TIMEFMT' : TIMEFMT
- })
- it = iter(ckptlist)
- for start, stop in zip(it, it):
- of.write("set object rectangle from first '%s',\
- graph 0 to first '%s',\
- graph 1 fc rgb \"gray\" back\n" % (start, stop))
- of.write('set output "%s"\n' % (ofname))
- of.write("""plot "{name}" using 1:($3/1000) title "Reads", \\
- "{name}" using 1:($4/1000) title "Inserts",\\
- "{name}" using 1:($5/1000) title "Updates"
- """.format(name=fname))
- of.close()
- call(["gnuplot", gcmd])
- os.remove(gcmd)
-
-# Graph time vs. average, minimium, maximum latency for an operation.
-def plot_latency_operation(name, fname, sfx, ckptlist, col_avg, col_min, col_max):
- gcmd = "gnuplot." + name + ".l1.cmd"
- of = open(gcmd, "w")
- of.write('''
-set autoscale
-set datafile sep ','
-set grid
-set style data lines
-set terminal png nocrop size 800,600
-set timefmt "%(TIMEFMT)s"
-set title "%(NAME)s: average, minimum and maximum latency"
-set format x "%(TIMEFMT)s"
-set xlabel "Time"
-set xtics rotate by -45
-set xdata time
-set ylabel "Latency (us)"
-set logscale y
-set yrange [1:]\n''' % {
- 'NAME' : name,
- 'TIMEFMT' : TIMEFMT
- })
- it = iter(ckptlist)
- for start, stop in zip(it, it):
- of.write('set object rectangle from first \'' + start +\
- '\', graph 0 ' + ' to first \'' + stop +\
- '\', graph 1 fc rgb "gray" back\n')
- ofname = name + sfx + '.latency1.png'
- of.write('set output "' + ofname + '"\n')
- of.write('plot "' +\
- fname + '" using 1:($' + repr(col_avg) +\
- ') title "Average Latency", "' + fname +'" using 1:($' +\
- repr(col_min) + ') title "Minimum Latency", "' +\
- fname + '" using 1:($' + repr(col_max) +\
- ') title "Maximum Latency"\n')
- of.close()
- call(["gnuplot", gcmd])
- os.remove(gcmd)
-
-
-# Graph latency vs. % operations
-def plot_latency_percent(name, dirname, sfx, ckptlist):
- lfile = os.path.join(dirname, 'latency.' + name)
- if not os.path.exists(lfile):
- return
- gcmd = "gnuplot." + name + ".l2.cmd"
- of = open(gcmd, "w")
- of.write('''
-set autoscale
-set datafile sep ','
-set grid
-set style data points
-set terminal png nocrop size 800,600\n''')
- of.write('set title "' + name + ': latency distribution"\n')
- of.write('''
-set xlabel "Latency (us)"
-set xrange [1:]
-set xtics rotate by -45
-set logscale x
-set ylabel "%% operations"
-set yrange [0:]\n''')
- ofname = name + sfx + '.latency2.png'
- of.write('set output "' + ofname + '"\n')
- of.write('plot "' + lfile + sfx +\
- '" using (($2 * 100)/$4) title "' + name + '"\n')
- of.close()
- call(["gnuplot", gcmd])
- os.remove(gcmd)
-
-
-# Graph latency vs. % operations (cumulative)
-def plot_latency_cumulative_percent(name, dirname, sfx, ckptlist):
- lfile = os.path.join(dirname, 'latency.' + name)
- if not os.path.exists(lfile):
- return
- # Latency plot: cumulative operations vs. latency
- gcmd = "gnuplot." + name + ".l3.cmd"
- of = open(gcmd, "w")
- of.write('''
-set autoscale
-set datafile sep ','
-set grid
-set style data lines
-set terminal png nocrop size 800,600
-set title "%(NAME)s: cumulative latency distribution"
-set xlabel "Latency (us)"
-set xrange [1:]
-set xtics rotate by -45
-set logscale x
-set ylabel "%% operations"
-set yrange [0:]\n''' % {
- 'NAME' : name
- })
- ofname = name + sfx + '.latency3.png'
- of.write('set output "' + ofname + '"\n')
- of.write('plot "' + lfile + sfx +\
- '" using 1:(($3 * 100)/$4) title "' + name + '"\n')
- of.close()
- call(["gnuplot", gcmd])
- os.remove(gcmd)
-
-def process_file(fname):
- ckptlist = []
- # NOTE: The operations below must be in this exact order to match
- # the operation latency output in the monitor file.
- opdict={'read':0, 'insert':0, 'update':0}
-
- # This assumes the monitor file has the string "monitor"
- # and any other (optional) characters in the filename are a suffix.
- sfx = os.path.basename(fname).replace('monitor','')
- dirname = os.path.dirname(fname)
-
- process_monitor(fname, sfx, ckptlist, opdict)
- column = 7 # average, minimum, maximum start in column 7
- for k, v in opdict.items():
- if v != 0:
- plot_latency_operation(
- k, fname, sfx, ckptlist, column, column + 1, column + 2)
- plot_latency_percent(k, dirname, sfx, ckptlist)
- plot_latency_cumulative_percent(k, dirname, sfx, ckptlist)
- else:
- print fname + ': no ' + k + ' operations found. Skip.'
- column = column + 3
-
-def main():
- # This program takes a list of monitor files generated by
- # wtperf. If no args are given, it looks for a single file
- # named 'monitor'.
- numargs = len(sys.argv)
- if numargs < 2:
- process_file('monitor')
- else:
- d = 1
- while d < numargs:
- process_file(sys.argv[d])
- d += 1
-
-if __name__ == '__main__':
- main()