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
+