Rework plugins with classes
This commit is contained in:
		| @@ -1,37 +1,27 @@ | ||||
| import time | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
| from display import * | ||||
|  | ||||
| PLUGIN_CLASS = 'HTTP' | ||||
| API_VERSION = 1 | ||||
| class IWLADisplayTopVisitors(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLADisplayTopVisitors, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|         self.requires = ['IWLAPostAnalysisTopVisitors'] | ||||
|  | ||||
| def get_plugins_infos(): | ||||
|     infos = { | ||||
|         'class' : PLUGIN_CLASS, | ||||
|         'min_version' : API_VERSION, | ||||
|         'max_version' : -1 | ||||
|     } | ||||
|     return infos | ||||
|     def hook(self, iwla): | ||||
|         stats = iwla.getMonthStats() | ||||
|  | ||||
| def load(): | ||||
|     return True | ||||
|  | ||||
| def hook(iwla): | ||||
|     stats = iwla.getMonthStats() | ||||
|  | ||||
|     top_visitors = stats.get('top_visitors', None) | ||||
|     if not top_visitors: | ||||
|         print 'Top visitors post analysis plugin not installed' | ||||
|         return | ||||
|  | ||||
|     index = iwla.getDisplayIndex() | ||||
|     table = DisplayHTMLBlockTable('Top visitors', ['Host', 'Pages', 'Hits', 'Bandwidth', 'Last seen']) | ||||
|     for super_hit in top_visitors: | ||||
|         row = [ | ||||
|             super_hit['remote_addr'], | ||||
|             super_hit['viewed_pages'], | ||||
|             super_hit['viewed_hits'], | ||||
|             bytesToStr(super_hit['bandwidth']), | ||||
|             time.asctime(super_hit['last_access']) | ||||
|             ] | ||||
|         table.appendRow(row) | ||||
|     index.appendBlock(table) | ||||
|         index = iwla.getDisplayIndex() | ||||
|         table = DisplayHTMLBlockTable('Top visitors', ['Host', 'Pages', 'Hits', 'Bandwidth', 'Last seen']) | ||||
|         for super_hit in stats['top_visitors']: | ||||
|             row = [ | ||||
|                 super_hit['remote_addr'], | ||||
|                 super_hit['viewed_pages'], | ||||
|                 super_hit['viewed_hits'], | ||||
|                 bytesToStr(super_hit['bandwidth']), | ||||
|                 time.asctime(super_hit['last_access']) | ||||
|                 ] | ||||
|             table.appendRow(row) | ||||
|         index.appendBlock(table) | ||||
|   | ||||
| @@ -1,30 +1,20 @@ | ||||
| import socket | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
|  | ||||
| PLUGIN_CLASS = 'HTTP' | ||||
| API_VERSION = 1 | ||||
| class IWLAPostAnalysisReverseDNS(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLAPostAnalysisReverseDNS, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|  | ||||
| def get_plugins_infos(): | ||||
|     infos = { | ||||
|         'class' : PLUGIN_CLASS, | ||||
|         'min_version' : API_VERSION, | ||||
|         'max_version' : -1 | ||||
|     } | ||||
|     return infos | ||||
|  | ||||
| def load(): | ||||
|     socket.setdefaulttimeout(0.5) | ||||
|     return True | ||||
|  | ||||
| def hook(iwla): | ||||
|     hits = iwla.getValidVisitors() | ||||
|     for (k, hit) in hits.items(): | ||||
|         if hit.get('dns_analysed', False): continue | ||||
|         try: | ||||
|             name, _, _ = socket.gethostbyaddr(k) | ||||
|             hit['remote_addr'] = name | ||||
|         except: | ||||
|             pass | ||||
|         finally: | ||||
|             hit['dns_analysed'] = True | ||||
|     def hook(self, iwla): | ||||
|         hits = iwla.getValidVisitors() | ||||
|         for (k, hit) in hits.items(): | ||||
|             if hit.get('dns_analysed', False): continue | ||||
|             try: | ||||
|                 name, _, _ = socket.gethostbyaddr(k) | ||||
|                 hit['remote_addr'] = name | ||||
|             except: | ||||
|                 pass | ||||
|             finally: | ||||
|                 hit['dns_analysed'] = True | ||||
|  | ||||
|   | ||||
| @@ -1,23 +1,15 @@ | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
|  | ||||
| PLUGIN_CLASS = 'HTTP' | ||||
| API_VERSION = 1 | ||||
| class IWLAPostAnalysisTopVisitors(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLAPostAnalysisTopVisitors, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|  | ||||
| def get_plugins_infos(): | ||||
|     infos = { | ||||
|         'class' : PLUGIN_CLASS, | ||||
|         'min_version' : API_VERSION, | ||||
|         'max_version' : -1 | ||||
|     } | ||||
|     return infos | ||||
|  | ||||
| def load(): | ||||
|     return True | ||||
|  | ||||
| def hook(iwla): | ||||
|     hits = iwla.getValidVisitors() | ||||
|     stats = iwla.getMonthStats() | ||||
|     top_bandwidth = [(k,hits[k]['bandwidth']) for (k,v) in hits.items()] | ||||
|     top_bandwidth = sorted(top_bandwidth, key=lambda t: t[1], reverse=True) | ||||
|     stats['top_visitors'] = [hits[h[0]] for h in top_bandwidth[:10]] | ||||
|     def hook(self, iwla): | ||||
|         hits = iwla.getValidVisitors() | ||||
|         stats = iwla.getMonthStats() | ||||
|         top_bandwidth = [(k,hits[k]['bandwidth']) for (k,v) in hits.items()] | ||||
|         top_bandwidth = sorted(top_bandwidth, key=lambda t: t[1], reverse=True) | ||||
|         stats['top_visitors'] = [hits[h[0]] for h in top_bandwidth[:10]] | ||||
|  | ||||
|   | ||||
| @@ -1,68 +0,0 @@ | ||||
| import re | ||||
| from iwla import IWLA | ||||
|  | ||||
| from awstats_robots_data import awstats_robots | ||||
|  | ||||
| PLUGIN_CLASS = 'HTTP' | ||||
| API_VERSION = 1 | ||||
|  | ||||
| def get_plugins_infos(): | ||||
|     infos = {'class' : PLUGIN_CLASS, | ||||
|              'min_version' : API_VERSION, | ||||
|              'max_version' : -1} | ||||
|     return infos | ||||
|  | ||||
| def load(): | ||||
|     global awstats_robots | ||||
|     print '==> Generating robot dictionary' | ||||
|  | ||||
|     awstats_robots = map(lambda (x) : re.compile(x, re.IGNORECASE), awstats_robots) | ||||
|      | ||||
|     return True | ||||
|  | ||||
| # Basic rule to detect robots | ||||
|  | ||||
| def hook(iwla): | ||||
|     hits = iwla.getCurrentVisists() | ||||
|     for k in hits.keys(): | ||||
|         super_hit = hits[k] | ||||
|  | ||||
|         if super_hit['robot']: continue | ||||
|  | ||||
|         isRobot = False | ||||
|         referers = 0 | ||||
|  | ||||
|         first_page = super_hit['requests'][0] | ||||
|         if first_page['time_decoded'].tm_mday == super_hit['last_access'].tm_mday: | ||||
|             for r in awstats_robots: | ||||
|                 if r.match(first_page['http_user_agent']): | ||||
|                     super_hit['robot'] = 1 | ||||
|                     continue | ||||
|  | ||||
| # 1) no pages view --> robot | ||||
|         if not super_hit['viewed_pages']: | ||||
|             super_hit['robot'] = 1 | ||||
|             continue | ||||
|  | ||||
| # 2) pages without hit --> robot | ||||
|         if not super_hit['viewed_hits']: | ||||
|             super_hit['robot'] = 1 | ||||
|             continue | ||||
|  | ||||
|         for hit in super_hit['requests']: | ||||
| # 3) /robots.txt read | ||||
|             if hit['extract_request']['http_uri'] == '/robots.txt': | ||||
|                 isRobot = True | ||||
|                 break | ||||
|  | ||||
| # 4) Any referer for hits | ||||
|             if not hit['is_page'] and hit['http_referer']: | ||||
|                 referers += 1 | ||||
|  | ||||
|         if isRobot: | ||||
|             super_hit['robot'] = 1 | ||||
|             continue | ||||
|  | ||||
|         if super_hit['viewed_hits'] and not referers: | ||||
|             super_hit['robot'] = 1 | ||||
|             continue | ||||
| @@ -1,38 +0,0 @@ | ||||
| import re | ||||
| from iwla import IWLA | ||||
|  | ||||
| # Remove logo from indefero | ||||
| logo_re = re.compile(r'^.+/logo/$') | ||||
|  | ||||
| PLUGIN_CLASS = 'HTTP' | ||||
| API_VERSION = 1 | ||||
|  | ||||
| def get_plugins_infos(): | ||||
|     infos = { | ||||
|         'class' : PLUGIN_CLASS, | ||||
|         'min_version' : API_VERSION, | ||||
|         'max_version' : -1 | ||||
|     } | ||||
|     return infos | ||||
|  | ||||
| def load(): | ||||
|     return True | ||||
|  | ||||
| # Basic rule to detect robots | ||||
|  | ||||
| def hook(iwla): | ||||
|     hits = iwla.getCurrentVisists() | ||||
|  | ||||
|     for k in hits.keys(): | ||||
|         super_hit = hits[k] | ||||
|  | ||||
|         if super_hit['robot']: continue | ||||
|  | ||||
|         for p in super_hit['requests']: | ||||
|             if not p['is_page']: continue | ||||
|             if int(p['status']) != 200: continue | ||||
|             if p['time_decoded'].tm_mday != super_hit['last_access'].tm_mday: continue | ||||
|             if logo_re.match(p['extract_request']['extract_uri']): | ||||
|                 p['is_page'] = False | ||||
|                 super_hit['viewed_pages'] -= 1 | ||||
|                 super_hit['viewed_hits'] += 1 | ||||
							
								
								
									
										64
									
								
								plugins/pre_analysis/robots.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								plugins/pre_analysis/robots.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| import re | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
|  | ||||
| from awstats_robots_data import awstats_robots | ||||
|  | ||||
| class IWLAPreAnalysisRobots(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLAPreAnalysisRobots, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|  | ||||
|     def load(self): | ||||
|         global awstats_robots | ||||
|  | ||||
|         self.awstats_robots = map(lambda (x) : re.compile(x, re.IGNORECASE), awstats_robots) | ||||
|      | ||||
|         return True | ||||
|  | ||||
| # Basic rule to detect robots | ||||
|     def hook(self, iwla): | ||||
|         hits = iwla.getCurrentVisists() | ||||
|         for k in hits.keys(): | ||||
|             super_hit = hits[k] | ||||
|  | ||||
|             if super_hit['robot']: continue | ||||
|  | ||||
|             isRobot = False | ||||
|             referers = 0 | ||||
|  | ||||
|             first_page = super_hit['requests'][0] | ||||
|             if first_page['time_decoded'].tm_mday == super_hit['last_access'].tm_mday: | ||||
|                 for r in self.awstats_robots: | ||||
|                     if r.match(first_page['http_user_agent']): | ||||
|                         super_hit['robot'] = 1 | ||||
|                         continue | ||||
|  | ||||
| # 1) no pages view --> robot | ||||
|             if not super_hit['viewed_pages']: | ||||
|                 super_hit['robot'] = 1 | ||||
|                 continue | ||||
|  | ||||
| # 2) pages without hit --> robot | ||||
|             if not super_hit['viewed_hits']: | ||||
|                 super_hit['robot'] = 1 | ||||
|                 continue | ||||
|  | ||||
|             for hit in super_hit['requests']: | ||||
| # 3) /robots.txt read | ||||
|                 if hit['extract_request']['http_uri'] == '/robots.txt': | ||||
|                     isRobot = True | ||||
|                     break | ||||
|  | ||||
| # 4) Any referer for hits | ||||
|                 if not hit['is_page'] and hit['http_referer']: | ||||
|                     referers += 1 | ||||
|  | ||||
|             if isRobot: | ||||
|                 super_hit['robot'] = 1 | ||||
|                 continue | ||||
|  | ||||
|             if super_hit['viewed_hits'] and not referers: | ||||
|                 super_hit['robot'] = 1 | ||||
|                 continue | ||||
							
								
								
									
										35
									
								
								plugins/pre_analysis/soutade.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								plugins/pre_analysis/soutade.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| import re | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
|  | ||||
| # Basic rule to detect robots | ||||
|  | ||||
| class IWLAPreAnalysisSoutade(IPlugin): | ||||
|  | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLAPreAnalysisSoutade, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|  | ||||
|     def load(self): | ||||
| # Remove logo from indefero | ||||
|         self.logo_re = re.compile(r'^.+/logo/$') | ||||
|  | ||||
|         return True | ||||
|  | ||||
|     def hook(self, iwla): | ||||
|         hits = iwla.getCurrentVisists() | ||||
|  | ||||
|         for k in hits.keys(): | ||||
|             super_hit = hits[k] | ||||
|  | ||||
|             if super_hit['robot']: continue | ||||
|  | ||||
|             for p in super_hit['requests']: | ||||
|                 if not p['is_page']: continue | ||||
|                 if int(p['status']) != 200: continue | ||||
|                 if p['time_decoded'].tm_mday != super_hit['last_access'].tm_mday: continue | ||||
|                 if self.logo_re.match(p['extract_request']['extract_uri']): | ||||
|                     p['is_page'] = False | ||||
|                     super_hit['viewed_pages'] -= 1 | ||||
|                     super_hit['viewed_hits'] += 1 | ||||
		Reference in New Issue
	
	Block a user