From 63a9b40b4699c6f54bdb98089b9006ad23ec4241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Tue, 2 Dec 2014 16:53:54 +0100 Subject: [PATCH] Work for DisplayHTMLBlockTableWithGraph class --- default_conf.py | 5 ++-- display.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++--- iwla.py | 11 +++++--- 3 files changed, 77 insertions(+), 10 deletions(-) diff --git a/default_conf.py b/default_conf.py index ec62210..6e78888 100644 --- a/default_conf.py +++ b/default_conf.py @@ -31,6 +31,5 @@ multimedia_files = ['png', 'jpg', 'jpeg', 'gif', 'ico', 'css', 'js'] resources_path = ['resources'] -css_path = [os.path.join( '/', - os.path.basename(resources_path[0]), - os.path.join('css', 'iwla.css'))] +icon_path = ['/%s/%s' % (os.path.basename(resources_path[0]), 'icon')] +css_path = ['/%s/%s/%s' % (os.path.basename(resources_path[0]), 'css', 'iwla.css')] diff --git a/display.py b/display.py index 33b9f13..50fbbeb 100644 --- a/display.py +++ b/display.py @@ -138,20 +138,85 @@ class DisplayHTMLBlockTable(DisplayHTMLBlock): html += '' html += '' - self.html = html + self.html += html super(DisplayHTMLBlockTable, self)._buildHTML() class DisplayHTMLBlockTableWithGraph(DisplayHTMLBlockTable): - def __init__(self, title, cols, short_title, nb_valid_rows=0): + def __init__(self, title, cols, short_titles=[], nb_valid_rows=0): super(DisplayHTMLBlockTableWithGraph, self).__init__(title=title, cols=cols) - self.short_title = short_title + self.short_titles = short_titles self.nb_valid_rows = nb_valid_rows + # TOFIX + self.icon_path = '/resources/icon' + # self.icon_path = self.iwla.getConfValue('icon_path', '/') + self.raw_rows = [] + self.maxes = [0 for c in cols] + + def appendRow(self, row): + self.raw_rows.append(row) + super(DisplayHTMLBlockTableWithGraph, self).appendRow(row) + + def appendShortTitle(self, short_title): + self.short_titles.append(short_title) + + def setShortTitle(self, short_titles): + self.short_titles = short_titles def setNbValidRows(self, nb_valid_rows): self.nb_valid_rows = nb_valid_rows + def _computeMax(self): + for i in range(0, self.nb_valid_rows): + row = self.raw_rows[i] + for j in range(1, len(row)): + if row[j] > self.maxes[j]: + self.maxes[j] = row[j] + + def _getIconFromStyle(self, style): + if style.startswith('iwla_page'): icon = 'vp.png' + elif style.startswith('iwla_hit'): icon = 'vh.png' + elif style.startswith('iwla_bandwidth'): icon = 'vk.png' + elif style.startswith('iwla_visit'): icon = 'vv.png' + elif style.startswith('iwla_search'): icon = 'vu.png' + else: return '' + + return '%s/%s' % (self.icon_path, icon) + + def _buildHTML(self): + self._computeMax() + + html = '' + html += '' + for i in range(0, self.nb_valid_rows): + row = self.rows[i] + html += '' + html += '' + html += '' + for i in range(0, len(self.short_titles)): + style = self.getCellCSSClass(0, j) + if style: style = ' class="%s"' % (style) + html += '%s' % (style, self.short_titles[i]) + html += '' + html += '
' + for j in range(1, len(row)): + style = self.getColCSSClass(j) + icon = self._getIconFromStyle(style) + if not icon: continue + if style: style = ' class="%s"' % (style) + alt = '%s: %s' % (row[j], self.cols[j]) + if self.maxes[j]: + height = int((self.raw_rows[i][j] * 100) / self.maxes[j]) + else: + height = 0 + html += '' % (style, icon, height, alt, alt) + html += '
' + + self.html += html + + super(DisplayHTMLBlockTableWithGraph, self)._buildHTML() + class DisplayHTMLPage(object): def __init__(self, title, filename, css_path): diff --git a/iwla.py b/iwla.py index 2dea3f5..5fd1bde 100755 --- a/iwla.py +++ b/iwla.py @@ -240,21 +240,24 @@ class IWLA(object): print '==> Generate display (%s)' % (filename) page = DisplayHTMLPage(title, filename, conf.css_path) - days = DisplayHTMLBlockTable('By day', ['Day', 'Visits', 'Pages', 'Hits', 'Bandwidth', 'Not viewed Bandwidth']) + _, nb_month_days = monthrange(cur_time.tm_year, cur_time.tm_mon) + days = DisplayHTMLBlockTableWithGraph('By day', ['Day', 'Visits', 'Pages', 'Hits', 'Bandwidth', 'Not viewed Bandwidth'], nb_valid_rows=nb_month_days) days.setColsCSSClass(['', 'iwla_visit', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', 'iwla_bandwidth']) nb_visits = 0 nb_days = 0 - _, nb_month_days = monthrange(cur_time.tm_year, cur_time.tm_mon) for i in range(0, nb_month_days+1): if i in self.current_analysis['days_stats'].keys(): stats = self.current_analysis['days_stats'][i] row = [i, stats['nb_visitors'], stats['viewed_pages'], stats['viewed_hits'], - bytesToStr(stats['viewed_bandwidth']), bytesToStr(stats['not_viewed_bandwidth'])] + stats['viewed_bandwidth'], stats['not_viewed_bandwidth']] nb_visits += stats['nb_visitors'] nb_days += 1 else: - row = [i, '', '', '', '', ''] + row = [i, 0, 0, 0, 0, 0] days.appendRow(row) + days.setCellValue(i, 4, bytesToStr(row[4])) + days.setCellValue(i, 5, bytesToStr(row[5])) + days.appendShortTitle(str(i)) stats = self.current_analysis['month_stats']