summaryrefslogtreecommitdiff
path: root/buildscripts/benchmark_tools.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/benchmark_tools.py')
-rw-r--r--buildscripts/benchmark_tools.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/buildscripts/benchmark_tools.py b/buildscripts/benchmark_tools.py
new file mode 100644
index 0000000..54a86b0
--- /dev/null
+++ b/buildscripts/benchmark_tools.py
@@ -0,0 +1,62 @@
+import os
+import urllib
+import urllib2
+import sys
+
+try:
+ import json
+except:
+ import simplejson as json # need simplejson for python < 2.6
+
+sys.path.append( "." )
+sys.path.append( ".." )
+sys.path.append( "../../" )
+sys.path.append( "../../../" )
+
+
+import settings
+
+def machine_info(extra_info=""):
+ """Get a dict representing the "machine" section of a benchmark result.
+
+ ie:
+ {
+ "os_name": "OS X",
+ "os_version": "10.5",
+ "processor": "2.4 GHz Intel Core 2 Duo",
+ "memory": "3 GB 667 MHz DDR2 SDRAM",
+ "extra_info": "Python 2.6"
+ }
+
+ Must have a settings.py file on sys.path that defines "processor" and "memory"
+ variables.
+ """
+ machine = {}
+ (machine["os_name"], _, machine["os_version"], _, _) = os.uname()
+ machine["processor"] = settings.processor
+ machine["memory"] = settings.memory
+ machine["extra_info"] = extra_info
+ return machine
+
+def post_data(data, machine_extra_info="", post_url="http://mongo-db.appspot.com/benchmark"):
+ """Post a benchmark data point.
+
+ data should be a Python dict that looks like:
+ {
+ "benchmark": {
+ "project": "http://github.com/mongodb/mongo-python-driver",
+ "name": "insert test",
+ "description": "test inserting 10000 documents with the C extension enabled",
+ "tags": ["insert", "python"]
+ },
+ "trial": {
+ "server_hash": "4f5a8d52f47507a70b6c625dfb5dbfc87ba5656a",
+ "client_hash": "8bf2ad3d397cbde745fd92ad41c5b13976fac2b5",
+ "result": 67.5,
+ "extra_info": "some logs or something"
+ }
+ }
+ """
+ data["machine"] = machine_info(machine_extra_info)
+ urllib2.urlopen(post_url, urllib.urlencode({"payload": json.dumps(data)}))
+ return data