Work for DisplayHTMLBlockTableWithGraph class

This commit is contained in:
Grégory Soutadé 2014-12-02 16:53:54 +01:00
parent 2846394dad
commit 63a9b40b46
3 changed files with 77 additions and 10 deletions

View File

@ -31,6 +31,5 @@ multimedia_files = ['png', 'jpg', 'jpeg', 'gif', 'ico',
'css', 'js'] 'css', 'js']
resources_path = ['resources'] resources_path = ['resources']
css_path = [os.path.join( '/', icon_path = ['/%s/%s' % (os.path.basename(resources_path[0]), 'icon')]
os.path.basename(resources_path[0]), css_path = ['/%s/%s/%s' % (os.path.basename(resources_path[0]), 'css', 'iwla.css')]
os.path.join('css', 'iwla.css'))]

View File

@ -138,20 +138,85 @@ class DisplayHTMLBlockTable(DisplayHTMLBlock):
html += '</tr>' html += '</tr>'
html += '</table>' html += '</table>'
self.html = html self.html += html
super(DisplayHTMLBlockTable, self)._buildHTML() super(DisplayHTMLBlockTable, self)._buildHTML()
class DisplayHTMLBlockTableWithGraph(DisplayHTMLBlockTable): 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) 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 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): def setNbValidRows(self, nb_valid_rows):
self.nb_valid_rows = 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 = '<table>'
html += '<tr>'
for i in range(0, self.nb_valid_rows):
row = self.rows[i]
html += '<td>'
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 += '<img%s align="bottom" src="%s" height="%d" width="6" alt="%s" title="%s" />' % (style, icon, height, alt, alt)
html += '</td>'
html += '</tr>'
html += '<tr>'
for i in range(0, len(self.short_titles)):
style = self.getCellCSSClass(0, j)
if style: style = ' class="%s"' % (style)
html += '<td%s>%s</td>' % (style, self.short_titles[i])
html += '</tr>'
html += '</table>'
self.html += html
super(DisplayHTMLBlockTableWithGraph, self)._buildHTML()
class DisplayHTMLPage(object): class DisplayHTMLPage(object):
def __init__(self, title, filename, css_path): def __init__(self, title, filename, css_path):

11
iwla.py
View File

@ -240,21 +240,24 @@ class IWLA(object):
print '==> Generate display (%s)' % (filename) print '==> Generate display (%s)' % (filename)
page = DisplayHTMLPage(title, filename, conf.css_path) 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']) days.setColsCSSClass(['', 'iwla_visit', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', 'iwla_bandwidth'])
nb_visits = 0 nb_visits = 0
nb_days = 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): for i in range(0, nb_month_days+1):
if i in self.current_analysis['days_stats'].keys(): if i in self.current_analysis['days_stats'].keys():
stats = self.current_analysis['days_stats'][i] stats = self.current_analysis['days_stats'][i]
row = [i, stats['nb_visitors'], stats['viewed_pages'], stats['viewed_hits'], 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_visits += stats['nb_visitors']
nb_days += 1 nb_days += 1
else: else:
row = [i, '', '', '', '', ''] row = [i, 0, 0, 0, 0, 0]
days.appendRow(row) 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'] stats = self.current_analysis['month_stats']