db_annotate
  • Overview
  • Repository
  • Tickets
  • Statistics
  • Projects

Repository

Render graphs on mutliple html pages

Parent commits : b0ab918ea0c555dd6354d5c759bfd2325a28ae95,
Children commits : 801dd2abdd737f924a8431b8fedf6e1673deae41,

By Laurent Defert on 2015-01-13 00:06:58
Render graphs on mutliple html pages

  • # TODO: Refactor the sorting and humanize call with db_size module
  • Empty pies on empty dbs

Browse content
Difference with parent commit b0ab918ea0c555dd6354d5c759bfd2325a28ae95
Files deleted:
tickets/bugs/empty_graphs

Files modified:
db_size.py
--- 
+++ 
@@ -103,7 +103,7 @@
 
             filename = self._get_filename(graph, i)
             title = '%s %s' % (self.GRAPHS[graph]['title'], 'Total Top %i' % TOP_N_VALUES)
-            imgs.append({'title': title, 'filename':filename})
+            imgs.append([{'title': title, 'filename':filename}])
             if not self.exists(filename):
                 # Totals graphs
                 total_values = copy.copy(sorted_values[:TOP_N_VALUES])
@@ -125,7 +125,7 @@
             for j, values in enumerate(groups):
                 filename = self._get_filename(graph + str(i), j)
                 title = '%s %s' % (self.GRAPHS[graph]['title'], 'All %i/%i' % (j + 1, len(groups)))
-                imgs.append({'title': title, 'filename':filename})
+                imgs[-1].append({'title': title, 'filename':filename})
                 if self.exists(filename):
                     continue
                 _values = [val[1] for val in values]

html.py
--- 
+++ 
@@ -1,5 +1,6 @@
 import os
 
+from db_size import humanize
 from output_file import OutputFile
 
 HTML_BODY = """
@@ -17,11 +18,57 @@
 </html>
 """
 
-class HtmlFile(OutputFile):
+
+class DBSizeFile(OutputFile):
+    def __init__(self, filename, dbsize_no):
+        OutputFile.__init__(self, '%s%i.html' % (filename, dbsize_no))
+        self.dbsize_no = dbsize_no
+
     def render(self, objects):
         self.write(HTML_BODY % self.filename)
         for obj in objects:
-            obj['url'] = os.path.basename(obj['filename'])
-            self.write('<figure><embed type="image/svg+xml" src="%s" width="50%%" height="50%%"/></figure>'
-                    % obj['url'])
+            self.write('''<figure style="display: inline"><embed type="image/svg+xml" src="%s" width="40%%" height="40%%"/>
+            </figure>''' % (obj['url']))
         self.write(HTML_FOOTER)
+
+
+class HtmlFile(OutputFile):
+    def render(self, objects, db_size):
+        for obj in objects:
+            for _obj in obj:
+                _obj['url'] = os.path.basename(_obj['filename'])
+
+        self.write(HTML_BODY % self.filename)
+
+        for i, obj in enumerate(objects):
+            self.write('''
+                <figure style="display: inline">
+                    <a href="graph_%i.html"><embed type="image/svg+xml" src="%s" width="40%%" height="40%%"/>More...</a>
+                </figure>''' % (i, obj[0]['url']))
+            page = DBSizeFile('graph_', i)
+            page.render(obj)
+
+        # Sort tables by total size of the first type of graph
+        # TODO: Refactor the sorting and humanize call with db_size module
+        tables = []
+        for table in sorted(db_size.total_size, key=db_size.total_size.get, reverse=True):
+            _table = [table]
+            for graph in db_size.GRAPHS.keys():
+                val = getattr(db_size, graph + '_size')
+                _table.append(humanize(val[table], db_size.GRAPHS[graph]['counter_type']))
+            tables.append(_table)
+
+        self.write('<table><tr>')
+        self.write('<th>Table name</th>')
+        for graph_conf in db_size.GRAPHS.values():
+            self.write('<th>%s</th>' % graph_conf['title'])
+        self.write('</tr>')
+
+        for table in tables:
+            self.write('<tr>')
+            for _table in table:
+                self.write('<td>%s</td>' % _table)
+            self.write('</tr>')
+        self.write('</table>')
+
+        self.write(HTML_FOOTER)

main.py
--- 
+++ 
@@ -78,4 +78,4 @@
 
     # Generate HTML files
     html_file = HtmlFile('index.html')
-    html_file.render(imgs)
+    html_file.render(imgs, db_size)

output_file.py
--- 
+++ 
@@ -14,7 +14,8 @@
             os.mkdir(OUTPUT_DIR)
 
     def close(self):
-        self.fd.close()
+        if self.fd is not None:
+            self.fd.close()
 
     def write(self, buf):
         if self.fd is None:

Generated with KisssPM