Add top_downloads plugin
This commit is contained in:
		
							
								
								
									
										42
									
								
								plugins/display/top_downloads.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								plugins/display/top_downloads.py
									
									
									
									
									
										Normal file
									
								
							| @@ -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('<a href=\'%s\'>All Downloads</a>' % (filename)) | ||||||
|  |         index.appendBlock(block) | ||||||
							
								
								
									
										48
									
								
								plugins/post_analysis/top_downloads.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								plugins/post_analysis/top_downloads.py
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
		Reference in New Issue
	
	Block a user