large commit. new code, with sensors, line count dropped, etc
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/__init__.py
diff --git a/tests/io.py b/tests/io.py
new file mode 100644
index 0000000..2405f53
--- /dev/null
+++ b/tests/io.py
@@ -0,0 +1,97 @@
+import sys
+import time
+import json
+import select
+import pprint
+import argparse
+import subprocess
+from StringIO import StringIO
+from ConfigParser import RawConfigParser
+
+
+def run_fio(benchmark_config):
+ cmd = ["fio", "--output-format=json", "-"]
+ p = subprocess.Popen(cmd, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ raw_out, _ = p.communicate(benchmark_config)
+ job_output = json.loads(raw_out)["jobs"][0]
+
+ if job_output['write']['iops'] != 0:
+ raw_result = job_output['write']
+ else:
+ raw_result = job_output['read']
+
+ res = {}
+
+ # 'bw_dev bw_mean bw_max bw_min'.split()
+ for field in ["bw_mean", "iops"]:
+ res[field] = raw_result[field]
+
+ res["lat"] = raw_result["lat"]["mean"]
+ res["clat"] = raw_result["clat"]["mean"]
+ res["slat"] = raw_result["slat"]["mean"]
+ res["util"] = json.loads(raw_out)["disk_util"][0]
+
+ res["util"] = dict((str(k), v) for k, v in res["util"].items())
+
+ return res
+
+
+def run_benchmark(binary_tp, *argv, **kwargs):
+ if 'fio' == binary_tp:
+ return run_fio(*argv, **kwargs)
+ raise ValueError("Unknown behcnmark {0}".format(binary_tp))
+
+
+def parse_args(argv):
+ parser = argparse.ArgumentParser(
+ description="Run fio' and return result")
+ parser.add_argument(
+ "--type", metavar="BINARY_TYPE",
+ choices=['fio'], required=True)
+ parser.add_argument("--start-at", metavar="START_TIME", type=int)
+ parser.add_argument("--json", action="store_true", default=False)
+ parser.add_argument("jobfile")
+ return parser.parse_args(argv)
+
+
+def main(argv):
+ argv_obj = parse_args(argv)
+ if argv_obj.jobfile == '-':
+ job_cfg = ""
+ dtime = 10
+ while True:
+ r, w, x = select.select([sys.stdin], [], [], dtime)
+ if len(r) == 0:
+ raise IOError("No config provided")
+ char = sys.stdin.read(1)
+ if '' == char:
+ break
+ job_cfg += char
+ dtime = 1
+ else:
+ job_cfg = open(argv_obj.jobfile).read()
+
+ rcp = RawConfigParser()
+ rcp.readfp(StringIO(job_cfg))
+ assert len(rcp.sections()) == 1
+
+ if argv_obj.start_at is not None:
+ ctime = time.time()
+ if argv_obj.start_at >= ctime:
+ time.sleep(ctime - argv_obj.start_at)
+
+ res = run_benchmark(argv_obj.type, job_cfg)
+ res['__meta__'] = dict(rcp.items(rcp.sections()[0]))
+ res['__meta__']['raw'] = job_cfg
+
+ if argv_obj.json:
+ sys.stdout.write(json.dumps(res))
+ else:
+ sys.stdout.write(pprint.pformat(res))
+ sys.stdout.write("\n")
+ return 0
+
+if __name__ == '__main__':
+ exit(main(sys.argv[1:]))
diff --git a/tests/postgres/__init__.py b/tests/postgres/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/postgres/__init__.py
diff --git a/tests/postgres/prepare.sh b/tests/postgres/prepare.sh
new file mode 100755
index 0000000..e7ca3bc
--- /dev/null
+++ b/tests/postgres/prepare.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+set -e
+
+if [ ! -d /etc/postgresql ]; then
+ apt-get update
+ apt-get install -y postgresql postgresql-contrib
+ err=$(pg_createcluster 9.3 main --start 2>&1 /dev/null )
+ if [ $? -ne 0 ]; then
+ echo "There was an error while creating cluster"
+ exit 1
+ fi
+fi
+
+sed -i 's/^local\s\+all\s\+all\s\+peer/local all all trust/g' /etc/postgresql/9.3/main/pg_hba.conf
+sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/9.3/main/postgresql.conf
+
+service postgresql restart
+
+exit 0
\ No newline at end of file
diff --git a/tests/postgres/run.sh b/tests/postgres/run.sh
new file mode 100755
index 0000000..b71a082
--- /dev/null
+++ b/tests/postgres/run.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+
+CLIENTS=$(echo $1 | tr ',' '\n')
+TRANSACTINOS_PER_CLIENT=$(echo $2 | tr ',' '\n')
+
+
+sudo -u postgres createdb -O postgres pgbench
+sudo -u postgres pgbench -i -U postgres pgbench
+
+
+for num_clients in $CLIENTS; do
+ for trans_per_cl in $TRANSACTINOS_PER_CLIENT; do
+ tps_all=''
+ for i in 1 2 3 4 5 6 7 8 9 10; do
+ echo -n "$num_clients $trans_per_cl:"
+ sudo -u postgres pgbench -c $num_clients -n -t $trans_per_cl -j 4 -r -U postgres pgbench |
+ grep "(excluding connections establishing)" | awk {'print $3'}
+ done
+ done
+done
+
+sudo -u postgres dropdb pgbench
+
+exit 0
+