diff --git a/data_generator.py b/data_generator.py
new file mode 100644
index 0000000..3692389
--- /dev/null
+++ b/data_generator.py
@@ -0,0 +1,29 @@
+import sys
+import uuid
+import random
+import itertools
+
+from petname import Generate as pet_generate
+from storage_api import create_storage
+
+
+types = ["GA", "master"] + [pet_generate(2, '-') for _ in range(10)]
+random.shuffle(types)
+tp = itertools.cycle(types)
+
+sz = ["4k", "64k", "1m"]
+op_type = ["randread", "read", "randwrite", "write"]
+is_sync = ["s", "a"]
+
+storage = create_storage(sys.argv[1])
+
+for i in range(30):
+    row = {"build_id": pet_generate(2, " "),
+           "type": next(tp),
+           "iso_md5": uuid.uuid4().get_hex()}
+
+    for sz, op_type, is_sync in itertools.product(op_type, is_sync, sz):
+        row[" ".join([sz, op_type, is_sync])] = (random.random(),
+                                                 random.random() / 5)
+
+    storage.store(row)
diff --git a/fix_rally_subnets.sh b/fix_rally_subnets.sh
deleted file mode 100644
index b1073d4..0000000
--- a/fix_rally_subnets.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-
-port_ids=$(neutron port-list | tail -n+4 | head -n-1 | awk '{print $2}')
-
-for port_id in $port_ids; do
-	neutron port-delete $port_id
-done
-
-subnet_list=$(neutron subnet-list | grep rally | awk '{print $2}')
-
-for subnet_id in $subnet_id; do
-	neutron subnet-delete $subnet_id
-done
-
-net_ids=$(neutron net-list | grep rally | awk '{print $2}')
-
-for net_id in $net_ids; do
-	neutron net-delete $net_id
-done
diff --git a/requirements.txt b/requirements.txt
index bedadd8..f3fd43f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,2 @@
 argparse==1.2.1
-gspread==0.2.2
 wsgiref==0.1.2
diff --git a/storage_api.py b/storage_api.py
index a7e9cf2..7af126d 100644
--- a/storage_api.py
+++ b/storage_api.py
@@ -1,7 +1,8 @@
 from urlparse import urlparse
-from gspread import WorksheetNotFound, login
+# from gspread import WorksheetNotFound, login
 import json
 import os
+from gspread import login
 from config import ROW_COUNT, DOCUMENT_ID, WORK_SHEET
 
 
@@ -48,16 +49,20 @@
             "": (float, float)
         }
 
+    def __str__(self):
+        return self.build + " " + self.build_type + " " + \
+        self.md5 + " " + str(self.results)
 
-def create_storage(url, email, password):
-        u = urlparse(url)
 
-        if u.scheme == 'file':
-            storage = DiskStorage(u.path)
-        else:
-            storage = GoogleDocsStorage(DOCUMENT_ID, WORK_SHEET, email, password)
+def create_storage(url, email=None, password=None):
+    u = urlparse(url)
 
-        return storage
+    if u.scheme == 'file':
+        storage = DiskStorage(u.path)
+    else:
+        storage = GoogleDocsStorage(DOCUMENT_ID, WORK_SHEET, email, password)
+
+    return storage
 
 
 class Storage(object):
@@ -149,7 +154,7 @@
                     m.build = row.pop("build_id")
                     m.build_type = row.pop("type")
                     m.md5 = row.pop("iso_md5")
-                    m.results = {k: row[k] for k in row.keys()}
+                    m.results = {k.split(" "): row[k] for k in row.keys()}
 
                     return m
         return None
@@ -160,20 +165,25 @@
             document = json.loads(raw_data)
             d = {}
             result = []
+            build_types = {"GA", "master"}
 
             for i in range(len(document) - 1, -1, - 1):
-                if document[i]["type"] not in d:
-                    d[document[i]["type"]] = document[i]
+                if document[i]["type"] in build_types:
+                    if document[i]["type"] not in d:
+                        d[document[i]["type"]] = document[i]
+                elif "other" not in d:
+                    d["other"] = document[i]
 
             for k in d.keys():
                 m = Measurement()
                 m.build = d[k].pop("build_id")
                 m.build_type = d[k].pop("type")
                 m.md5 = d[k].pop("iso_md5")
-                m.results = {k: d[key] for key in d.keys()}
+                m.results = {k: v for k, v in d[k].items()}
                 result.append(m)
 
-        return d
+        return result
 
 if __name__ == "__main__":
-    create_storage("file:///home/gstepanov/bla?email=aaa.gmail.com&password=1234")
\ No newline at end of file
+    storage = create_storage("file:///home/gstepanov/rally-results-processor/sample.json", "", "")
+    print storage.recent_builds()
