From e0d6b5dbbcfff919cf0c8dfcd71d7f4e51dc729b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Thu, 27 Nov 2014 12:35:41 +0100 Subject: [PATCH] Add top_downloads plugin --- plugins/display/top_downloads.py | 42 ++++++++++++++++++++++ plugins/post_analysis/top_downloads.py | 48 ++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 plugins/display/top_downloads.py create mode 100644 plugins/post_analysis/top_downloads.py diff --git a/plugins/display/top_downloads.py b/plugins/display/top_downloads.py new file mode 100644 index 0000000..47fedaf --- /dev/null +++ b/plugins/display/top_downloads.py @@ -0,0 +1,42 @@ +import time + +from iwla import IWLA +from iplugin import IPlugin +from display import * + +class IWLADisplayTopDownloads(IPlugin): + def __init__(self, iwla): + super(IWLADisplayTopDownloads, self).__init__(iwla) + self.API_VERSION = 1 + self.requires = ['IWLAPostAnalysisTopDownloads'] + + def hook(self): + top_downloads = self.iwla.getMonthStats()['top_downloads'] + + top_downloads = sorted(top_downloads.items(), key=lambda t: t[1], reverse=True) + + index = self.iwla.getDisplayIndex() + + table = DisplayHTMLBlockTable('Top Downloads', ['URI', 'Hits']) + for (uri, entrance) in top_downloads[:10]: + table.appendRow([uri, entrance]) + index.appendBlock(table) + + cur_time = self.iwla.getCurTime() + title = time.strftime('Top Downloads - %B %Y', cur_time) + + filename = 'top_downloads_%d.html' % (cur_time.tm_mon) + path = '%d/%s' % (cur_time.tm_year, filename) + + page = DisplayHTMLPage(title, path) + table = DisplayHTMLBlockTable('Top Downloads', ['URI', 'Hit']) + for (uri, entrance) in top_downloads: + table.appendRow([uri, entrance]) + page.appendBlock(table) + + display = self.iwla.getDisplay() + display.addPage(page) + + block = DisplayHTMLRawBlock() + block.setRawHTML('All Downloads' % (filename)) + index.appendBlock(block) diff --git a/plugins/post_analysis/top_downloads.py b/plugins/post_analysis/top_downloads.py new file mode 100644 index 0000000..3ea7a38 --- /dev/null +++ b/plugins/post_analysis/top_downloads.py @@ -0,0 +1,48 @@ +import re + +from iwla import IWLA +from iplugin import IPlugin + +class IWLAPostAnalysisTopDownloads(IPlugin): + def __init__(self, iwla): + super(IWLAPostAnalysisTopDownloads, self).__init__(iwla) + self.API_VERSION = 1 + self.conf_requires = ['multimedia_files', 'viewed_http_codes'] + + def hook(self): + stats = self.iwla.getCurrentVisists() + month_stats = self.iwla.getMonthStats() + + multimedia_files = self.iwla.getConfValue('multimedia_files') + viewed_http_codes = self.iwla.getConfValue('viewed_http_codes') + + top_downloads = month_stats.get('top_downloads', {}) + + for (k, super_hit) in stats.items(): + if super_hit['robot']: continue + for r in super_hit['requests']: + if r['is_page']: continue + + if not self.iwla.isValidForCurrentAnalysis(r): continue + + if not int(r['status']) in viewed_http_codes: continue + + uri = r['extract_request']['extract_uri'].lower() + + isMultimedia = False + for ext in multimedia_files: + if uri.endswith(ext): + isMultimedia = True + break + + if isMultimedia: continue + + uri = "%s%s" % (r.get('server_name', ''), + r['extract_request']['extract_uri']) + + if not uri in top_downloads.keys(): + top_downloads[uri] = 1 + else: + top_downloads[uri] += 1 + + month_stats['top_downloads'] = top_downloads