diff --git a/plugins/display/top_hits.py b/plugins/display/top_hits.py new file mode 100644 index 0000000..4809d0b --- /dev/null +++ b/plugins/display/top_hits.py @@ -0,0 +1,42 @@ +import time + +from iwla import IWLA +from iplugin import IPlugin +from display import * + +class IWLADisplayTopHits(IPlugin): + def __init__(self, iwla): + super(IWLADisplayTopHits, self).__init__(iwla) + self.API_VERSION = 1 + self.requires = ['IWLAPostAnalysisTopHits'] + + def hook(self): + top_hits = self.iwla.getMonthStats()['top_hits'] + + top_hits = sorted(top_hits.items(), key=lambda t: t[1], reverse=True) + + index = self.iwla.getDisplayIndex() + + table = DisplayHTMLBlockTable('Top Hits', ['URI', 'Entrance']) + for (uri, entrance) in top_hits[:10]: + table.appendRow([uri, entrance]) + index.appendBlock(table) + + cur_time = self.iwla.getCurTime() + title = time.strftime('All Hits - %B %Y', cur_time) + + filename = 'top_hits_%d.html' % (cur_time.tm_mon) + path = '%d/%s' % (cur_time.tm_year, filename) + + page = DisplayHTMLPage(title, path) + table = DisplayHTMLBlockTable('Top Hits', ['URI', 'Entrance']) + for (uri, entrance) in top_hits: + table.appendRow([uri, entrance]) + page.appendBlock(table) + + display = self.iwla.getDisplay() + display.addPage(page) + + block = DisplayHTMLRawBlock() + block.setRawHTML('All hits' % (filename)) + index.appendBlock(block) diff --git a/plugins/post_analysis/top_hits.py b/plugins/post_analysis/top_hits.py new file mode 100644 index 0000000..b4f7ebf --- /dev/null +++ b/plugins/post_analysis/top_hits.py @@ -0,0 +1,33 @@ +from iwla import IWLA +from iplugin import IPlugin + +class IWLAPostAnalysisTopHits(IPlugin): + def __init__(self, iwla): + super(IWLAPostAnalysisTopHits, self).__init__(iwla) + self.API_VERSION = 1 + + def hook(self): + stats = self.iwla.getCurrentVisists() + month_stats = self.iwla.getMonthStats() + + top_hits = month_stats.get('top_hits', {}) + + 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) or\ + not self.iwla.hasBeenViewed(r): + continue + + uri = r['extract_request']['extract_uri'] + + uri = "%s%s" % (r.get('server_name', ''), uri) + + if not uri in top_hits.keys(): + top_hits[uri] = 1 + else: + top_hits[uri] += 1 + + month_stats['top_hits'] = top_hits