fixed charts
diff --git a/report.py b/report.py
index dff1ed1..c36a87e 100644
--- a/report.py
+++ b/report.py
@@ -6,6 +6,23 @@
 import storage_api
 
 
+def ssize_to_kb(ssize):
+    try:
+        smap = dict(k=1, K=1, M=1024, m=1024, G=1024**2, g=1024**2)
+        for ext, coef in smap.items():
+            if ssize.endswith(ext):
+                return int(ssize[:-1]) * coef
+
+        if int(ssize) % 1024 != 0:
+            raise ValueError()
+
+        return int(ssize) / 1024
+
+    except (ValueError, TypeError, AttributeError):
+        tmpl = "Unknow size format {0!r} (or size not multiples 1024)"
+        raise ValueError(tmpl.format(ssize))
+
+
 def parse_args(argv):
     parser = argparse.ArgumentParser()
     parser.add_argument('-s', '--storage', help='storage location', dest="url")
@@ -16,15 +33,12 @@
     return parser.parse_args(argv)
 
 
-def report(url, email=None, password=None):
-    storage = storage_api.create_storage(url, email, password)
-    results = storage.recent_builds()
-
+def build_vertical_bar(results):
     data = {}
+    charts_url = []
 
-    # render vertical bar
     for build, results in results.items():
-        for key, value in results.items():
+        for key, value in results.results.items():
             keys = key.split(' ')
             if not data.get(keys[2]):
                 data[keys[2]] = {}
@@ -47,7 +61,60 @@
 
         bar = charts.render_vertical_bar(title, legend, dataset,
                                          scale_x=scale_x)
-        print "Vertical bar for %s:\n %s" % (name, str(bar))
+        charts_url.append(str(bar))
+    return charts_url
+
+
+def build_lines_chart(results):
+    data = {}
+    charts_url = []
+
+    for build, results in results.items():
+        for key, value in results.results.items():
+            keys = key.split(' ')
+            if not data.get(' '.join([keys[0], keys[1]])):
+                data[' '.join([keys[0], keys[1]])] = {}
+            if not data[' '.join([keys[0], keys[1]])].get(build):
+                data[' '.join([keys[0], keys[1]])][build] = {}
+            data[' '.join([keys[0], keys[1]])][build][keys[2]] = value
+
+    for name, value in data.items():
+        title = name
+        legend = []
+        dataset = []
+        scale_x = []
+        for build_id, build_results in value.items():
+            legend.append(build_id)
+            ordered_build_results = OrderedDict(sorted(build_results.items(),
+                                                key=lambda t: ssize_to_kb(t[0])))
+            if not scale_x:
+                scale_x = ordered_build_results.keys()
+            dataset.append(zip(*ordered_build_results.values())[0])
+
+        chart = charts.render_lines(title, legend, dataset, scale_x)
+        charts_url.append(str(chart))
+
+    return charts_url
+
+
+def render_html(charts_urls):
+    templ = open("report.html", 'r').read()
+    body = "<div><ol>%s</ol></div>"
+    li = "<li><img src='%s'></li>"
+    ol = []
+    for chart in charts_urls:
+        ol.append(li % chart)
+    html = templ % {'body': body % '\n'.join(ol)}
+    open('results.html', 'w').write(html)
+
+
+def report(url, email=None, password=None):
+    storage = storage_api.create_storage(url, email, password)
+    results = storage.recent_builds()
+    bars = build_vertical_bar(results)
+    lines = build_lines_chart(results)
+
+    render_html(bars + lines)
 
 
 def main(argv):