Initial commit
This commit is contained in:
		
							
								
								
									
										1
									
								
								plugins/display/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								plugins/display/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| # | ||||
							
								
								
									
										99
									
								
								plugins/display/all_visits.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								plugins/display/all_visits.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| # Copyright Grégory Soutadé 2015 | ||||
|  | ||||
| # This file is part of iwla | ||||
|  | ||||
| # iwla is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # iwla is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with iwla.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
|  | ||||
| import time | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
| from display import * | ||||
|  | ||||
| """ | ||||
| Display hook | ||||
|  | ||||
| Create All visits page | ||||
|  | ||||
| Plugin requirements : | ||||
|     None | ||||
|  | ||||
| Conf values needed : | ||||
|     display_visitor_ip* | ||||
|  | ||||
| Output files : | ||||
|     OUTPUT_ROOT/year/month/all_visits.html | ||||
|     OUTPUT_ROOT/year/month/index.html | ||||
|  | ||||
| Statistics creation : | ||||
|     None | ||||
|  | ||||
| Statistics update : | ||||
|     None | ||||
|  | ||||
| Statistics deletion : | ||||
|     None | ||||
| """ | ||||
|  | ||||
| class IWLADisplayAllVisits(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLADisplayAllVisits, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|  | ||||
|     def hook(self): | ||||
|         display = self.iwla.getDisplay() | ||||
|         hits = self.iwla.getValidVisitors() | ||||
|         display_visitor_ip = self.iwla.getConfValue('display_visitor_ip', False) | ||||
|  | ||||
|         last_access = sorted(hits.values(), key=lambda t: t['last_access'], reverse=True) | ||||
|  | ||||
|         title = createCurTitle(self.iwla, u'All visits') | ||||
|  | ||||
|         filename = 'all_visits.html' | ||||
|         path = self.iwla.getCurDisplayPath(filename) | ||||
|  | ||||
|         page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) | ||||
|         table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Last seen'), [self.iwla._(u'Host'), self.iwla._(u'Pages'), self.iwla._(u'Hits'), self.iwla._(u'Bandwidth'), self.iwla._(u'Last seen')]) | ||||
|         table.setColsCSSClass(['', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', '']) | ||||
|          | ||||
|         for super_hit in last_access: | ||||
|             address = super_hit['remote_addr'] | ||||
|             if display_visitor_ip and\ | ||||
|                     super_hit.get('dns_name_replaced', False): | ||||
|                 address = '%s [%s]' % (address, super_hit['remote_ip']) | ||||
|  | ||||
|             row = [ | ||||
|                 address, | ||||
|                 super_hit['viewed_pages'], | ||||
|                 super_hit['viewed_hits'], | ||||
|                 bytesToStr(super_hit['bandwidth']), | ||||
|                 time.asctime(super_hit['last_access']) | ||||
|                 ] | ||||
|             table.appendRow(row) | ||||
|         page.appendBlock(table) | ||||
|  | ||||
|         display.addPage(page) | ||||
|  | ||||
|         index = self.iwla.getDisplayIndex() | ||||
|         link = '<a href=\'%s\'>%s</a>' % (filename, self.iwla._(u'All visits')) | ||||
|         block = index.getBlock(self.iwla._(u'Top visitors')) | ||||
|         if block: | ||||
|             block.setTitle('%s - %s' % (block.getTitle(), link)) | ||||
|         else: | ||||
|             block = display.createBlock(DisplayHTMLRawBlock) | ||||
|             block.setRawHTML(link) | ||||
|             index.appendBlock(block) | ||||
							
								
								
									
										225
									
								
								plugins/display/referers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										225
									
								
								plugins/display/referers.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,225 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| # Copyright Grégory Soutadé 2015 | ||||
|  | ||||
| # This file is part of iwla | ||||
|  | ||||
| # iwla is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # iwla is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with iwla.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
| from display import * | ||||
|  | ||||
| """ | ||||
| Display hook | ||||
|  | ||||
| Create Referers page | ||||
|  | ||||
| Plugin requirements : | ||||
|     post_analysis/referers | ||||
|  | ||||
| Conf values needed : | ||||
|     max_referers_displayed* | ||||
|     create_all_referers_page* | ||||
|     max_key_phrases_displayed* | ||||
|     create_all_key_phrases_page* | ||||
|  | ||||
| Output files : | ||||
|     OUTPUT_ROOT/year/month/referers.html | ||||
|     OUTPUT_ROOT/year/month/key_phrases.html | ||||
|     OUTPUT_ROOT/year/month/index.html | ||||
|  | ||||
| Statistics creation : | ||||
|     None | ||||
|  | ||||
| Statistics update : | ||||
|     None | ||||
|  | ||||
| Statistics deletion : | ||||
|     None | ||||
| """ | ||||
|  | ||||
| class IWLADisplayReferers(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLADisplayReferers, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|         self.requires = ['IWLAPostAnalysisReferers'] | ||||
|         self.max_referers = self.iwla.getConfValue('max_referers_displayed', 0) | ||||
|         self.create_all_referers = self.iwla.getConfValue('create_all_referers_page', True) | ||||
|         self.max_key_phrases = self.iwla.getConfValue('max_key_phrases_displayed', 0) | ||||
|         self.create_all_key_phrases = self.iwla.getConfValue('create_all_key_phrases_page', True) | ||||
|  | ||||
|     def hook(self): | ||||
|         display = self.iwla.getDisplay() | ||||
|         month_stats = self.iwla.getMonthStats() | ||||
|         referers = month_stats.get('referers', {}) | ||||
|         robots_referers = month_stats.get('robots_referers', {}) | ||||
|         search_engine_referers = month_stats.get('search_engine_referers', {}) | ||||
|         key_phrases = month_stats.get('key_phrases', {}) | ||||
|  | ||||
|         top_referers = [(k, referers[k]['pages']) for k in referers.keys()] | ||||
|         top_referers = sorted(top_referers, key=lambda t: t[1], reverse=True) | ||||
|  | ||||
|         top_robots_referers = [(k, robots_referers[k]['pages']) for k in robots_referers.keys()] | ||||
|         top_robots_referers = sorted(top_robots_referers, key=lambda t: t[1], reverse=True) | ||||
|  | ||||
|         top_search_engine_referers = [(k, search_engine_referers[k]['pages']) for k in search_engine_referers.keys()] | ||||
|         top_search_engine_referers = sorted(top_search_engine_referers, key=lambda t: t[1], reverse=True) | ||||
|  | ||||
|         top_key_phrases = key_phrases.items() | ||||
|         top_key_phrases = sorted(top_key_phrases, key=lambda t: t[1], reverse=True) | ||||
|  | ||||
|         cur_time = self.iwla.getCurTime() | ||||
|         index = self.iwla.getDisplayIndex() | ||||
|  | ||||
|         # All referers in a file | ||||
|         if self.create_all_referers: | ||||
|             title = createCurTitle(self.iwla, u'Connexion from') | ||||
|  | ||||
|             filename = 'referers.html' | ||||
|             path = self.iwla.getCurDisplayPath(filename) | ||||
|  | ||||
|             page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) | ||||
|             table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Connexion from'), [self.iwla._(u'Origin'), self.iwla._(u'Pages'), self.iwla._(u'Hits')]) | ||||
|             table.setColsCSSClass(['', 'iwla_page', 'iwla_hit']) | ||||
|  | ||||
|             total_search = [0]*3 | ||||
|             table.appendRow(['<b>%s</b>' % (self.iwla._(u'Search Engine')), '', '']) | ||||
|             new_list = self.max_referers and top_search_engine_referers[:self.max_referers] or top_search_engine_referers | ||||
|             for r,_ in new_list: | ||||
|                 row = [r, search_engine_referers[r]['pages'], search_engine_referers[r]['hits']] | ||||
|                 total_search[1] += search_engine_referers[r]['pages'] | ||||
|                 total_search[2] += search_engine_referers[r]['hits'] | ||||
|                 table.appendRow(row) | ||||
|             if self.max_referers: | ||||
|                 others = 0 | ||||
|                 for (uri, entrance) in top_referers[self.max_referers:]: | ||||
|                     others += entrance | ||||
|                 table.appendRow([self.iwla._(u'Others'), others]) | ||||
|                 table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|  | ||||
|             total_external = [0]*3 | ||||
|             table.appendRow(['<b>%s</b>' % (self.iwla._(u'External URL')), '', '']) | ||||
|             new_list = self.max_referers and top_referers[:self.max_referers] or top_referers | ||||
|             for r,_ in new_list: | ||||
|                 row = [generateHTMLLink(r), referers[r]['pages'], referers[r]['hits']] | ||||
|                 total_external[1] += referers[r]['pages'] | ||||
|                 total_external[2] += referers[r]['hits'] | ||||
|                 table.appendRow(row) | ||||
|             if self.max_referers: | ||||
|                 others = 0 | ||||
|                 for (uri, entrance) in top_referers[self.max_referers:]: | ||||
|                     others += entrance | ||||
|                 table.appendRow([self.iwla._(u'Others'), others]) | ||||
|                 table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|  | ||||
|             total_robot = [0]*3 | ||||
|             table.appendRow(['<b>%s</b>' % (self.iwla._(u'External URL (robot)')), '', '']) | ||||
|             new_list = self.max_referers and top_robots_referers[:self.max_referers] or top_robots_referers | ||||
|             for r,_ in new_list: | ||||
|                 row = [generateHTMLLink(r), robots_referers[r]['pages'], robots_referers[r]['hits']] | ||||
|                 total_robot[1] += robots_referers[r]['pages'] | ||||
|                 total_robot[2] += robots_referers[r]['hits'] | ||||
|                 table.appendRow(row) | ||||
|             if self.max_referers: | ||||
|                 others = 0 | ||||
|                 for (uri, entrance) in top_referers[self.max_referers:]: | ||||
|                     others += entrance | ||||
|                 table.appendRow([self.iwla._(u'Others'), others]) | ||||
|                 table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|  | ||||
|             page.appendBlock(table) | ||||
|  | ||||
|             display.addPage(page) | ||||
|  | ||||
|         title = self.iwla._(u'Top Referers') | ||||
|         if self.create_all_referers: | ||||
|             link = '<a href=\'%s\'>%s</a>' % (filename, self.iwla._(u'All Referers')) | ||||
|             title = '%s - %s' % (title, link) | ||||
|  | ||||
|         # Top referers in index | ||||
|         table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'Origin'), self.iwla._(u'Pages'), self.iwla._(u'Hits')]) | ||||
|         table.setColsCSSClass(['', 'iwla_page', 'iwla_hit']) | ||||
|  | ||||
|         table.appendRow(['<b>%s</b>' % (self.iwla._(u'Search Engine')), '', '']) | ||||
|         for r,_ in top_search_engine_referers[:10]: | ||||
|             row = [r, search_engine_referers[r]['pages'], search_engine_referers[r]['hits']] | ||||
|             total_search[1] -= search_engine_referers[r]['pages'] | ||||
|             total_search[2] -= search_engine_referers[r]['hits'] | ||||
|             table.appendRow(row) | ||||
|         if total_search[1] or total_search[2]: | ||||
|             total_search[0] = self.iwla._(u'Others') | ||||
|             table.appendRow(total_search) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|  | ||||
|         table.appendRow(['<b>%s</b>' % (self.iwla._(u'External URL')), '', '']) | ||||
|         for r,_ in top_referers[:10]: | ||||
|             row = [generateHTMLLink(r), referers[r]['pages'], referers[r]['hits']] | ||||
|             total_external[1] -= referers[r]['pages'] | ||||
|             total_external[2] -= referers[r]['hits']             | ||||
|             table.appendRow(row) | ||||
|         if total_external[1] or total_external[2]: | ||||
|             total_external[0] = self.iwla._(u'Others') | ||||
|             table.appendRow(total_external) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|  | ||||
|         table.appendRow(['<b>%s</b>' % (self.iwla._(u'External URL (robot)')), '', '']) | ||||
|         for r,_ in top_robots_referers[:10]: | ||||
|             row = [generateHTMLLink(r), robots_referers[r]['pages'], robots_referers[r]['hits']] | ||||
|             total_robot[1] -= robots_referers[r]['pages'] | ||||
|             total_robot[2] -= robots_referers[r]['hits'] | ||||
|             table.appendRow(row) | ||||
|         if total_robot[1] or total_robot[2]: | ||||
|             total_robot[0] = self.iwla._(u'Others') | ||||
|             table.appendRow(total_robot) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|  | ||||
|         index.appendBlock(table) | ||||
|  | ||||
|         # All key phrases in a file | ||||
|         if self.create_all_key_phrases: | ||||
|             title = createCurTitle(self.iwla, u'Key Phrases') | ||||
|  | ||||
|             filename = 'key_phrases.html' | ||||
|             path = self.iwla.getCurDisplayPath(filename) | ||||
|  | ||||
|             total_search = [0]*2 | ||||
|             page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) | ||||
|             table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Top key phrases'), [self.iwla._(u'Key phrase'), self.iwla._(u'Search')]) | ||||
|             table.setColsCSSClass(['', 'iwla_search']) | ||||
|             new_list = self.max_key_phrases and top_key_phrases[:self.max_key_phrases] or top_key_phrases | ||||
|             for phrase in new_list: | ||||
|                 table.appendRow([phrase[0], phrase[1]]) | ||||
|                 total_search[1] += phrase[1] | ||||
|             page.appendBlock(table) | ||||
|  | ||||
|             display.addPage(page) | ||||
|  | ||||
|         title = self.iwla._(u'Top key phrases') | ||||
|         if self.create_all_key_phrases: | ||||
|             link = '<a href=\'%s\'>%s</a>' % (filename, self.iwla._(u'All key phrases')) | ||||
|             title = '%s - %s' % (title, link) | ||||
|  | ||||
|         # Top key phrases in index | ||||
|         table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'Key phrase'), self.iwla._(u'Search')]) | ||||
|         table.setColsCSSClass(['', 'iwla_search']) | ||||
|         for phrase in top_key_phrases[:10]: | ||||
|             table.appendRow([phrase[0], phrase[1]]) | ||||
|             total_search[1] -= phrase[1] | ||||
|         if total_search[1]: | ||||
|             total_search[0] = self.iwla._(u'Others') | ||||
|             table.appendRow(total_search) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|         index.appendBlock(table) | ||||
							
								
								
									
										106
									
								
								plugins/display/top_downloads.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								plugins/display/top_downloads.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| # Copyright Grégory Soutadé 2015 | ||||
|  | ||||
| # This file is part of iwla | ||||
|  | ||||
| # iwla is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # iwla is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with iwla.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
| from display import * | ||||
|  | ||||
| """ | ||||
| Display hook | ||||
|  | ||||
| Create TOP downloads page | ||||
|  | ||||
| Plugin requirements : | ||||
|     post_analysis/top_downloads | ||||
|  | ||||
| Conf values needed : | ||||
|     max_downloads_displayed* | ||||
|     create_all_downloads_page* | ||||
|  | ||||
| Output files : | ||||
|     OUTPUT_ROOT/year/month/top_downloads.html | ||||
|     OUTPUT_ROOT/year/month/index.html | ||||
|  | ||||
| Statistics creation : | ||||
|     None | ||||
|  | ||||
| Statistics update : | ||||
|     None | ||||
|  | ||||
| Statistics deletion : | ||||
|     None | ||||
| """ | ||||
|  | ||||
| class IWLADisplayTopDownloads(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLADisplayTopDownloads, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|         self.requires = ['IWLAPostAnalysisTopDownloads'] | ||||
|         self.max_downloads = self.iwla.getConfValue('max_downloads_displayed', 0) | ||||
|         self.create_all_downloads = self.iwla.getConfValue('create_all_downloads_page', True) | ||||
|  | ||||
|     def hook(self): | ||||
|         display = self.iwla.getDisplay() | ||||
|         top_downloads = self.iwla.getMonthStats()['top_downloads'] | ||||
|         top_downloads = sorted(top_downloads.items(), key=lambda t: t[1], reverse=True) | ||||
|  | ||||
|         # All in a file | ||||
|         if self.create_all_downloads: | ||||
|             filename = 'top_downloads.html' | ||||
|             path = self.iwla.getCurDisplayPath(filename) | ||||
|             title = createCurTitle(self.iwla, u'All Downloads') | ||||
|  | ||||
|             page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) | ||||
|             table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'All Downloads'), [self.iwla._(u'URI'), self.iwla._(u'Hit')]) | ||||
|             table.setColsCSSClass(['', 'iwla_hit']) | ||||
|          | ||||
|             total_entrance = [0]*2 | ||||
|             new_list = self.max_downloads and top_downloads[:self.max_downloads] or top_downloads | ||||
|             for (uri, entrance) in new_list: | ||||
|                 table.appendRow([generateHTMLLink(uri), entrance]) | ||||
|                 total_entrance[1] += entrance | ||||
|             if self.max_downloads: | ||||
|                 others = 0 | ||||
|                 for (uri, entrance) in top_downloads[self.max_downloads:]: | ||||
|                     others += entrance | ||||
|                 table.appendRow([self.iwla._(u'Others'), others]) | ||||
|                 table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|             page.appendBlock(table) | ||||
|                          | ||||
|             display.addPage(page) | ||||
|  | ||||
|         title = self.iwla._(u'Top Downloads') | ||||
|         if self.create_all_downloads: | ||||
|             link = '<a href=\'%s\'>%s</a>' % (filename, self.iwla._(u'All Downloads')) | ||||
|             title = '%s - %s' % (title, link) | ||||
|  | ||||
|         # Top in index | ||||
|         index = self.iwla.getDisplayIndex() | ||||
|          | ||||
|         table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'URI'), self.iwla._(u'Hits')]) | ||||
|         table.setColsCSSClass(['', 'iwla_hit']) | ||||
|         for (uri, entrance) in top_downloads[:10]: | ||||
|             table.appendRow([generateHTMLLink(uri), entrance]) | ||||
|             total_entrance[1] -= entrance | ||||
|         if total_entrance[1]: | ||||
|             total_entrance[0] = self.iwla._(u'Others') | ||||
|             table.appendRow(total_entrance) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|         index.appendBlock(table) | ||||
							
								
								
									
										106
									
								
								plugins/display/top_hits.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								plugins/display/top_hits.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| # Copyright Grégory Soutadé 2015 | ||||
|  | ||||
| # This file is part of iwla | ||||
|  | ||||
| # iwla is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # iwla is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with iwla.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
| from display import * | ||||
|  | ||||
| """ | ||||
| Display hook | ||||
|  | ||||
| Create TOP hits page | ||||
|  | ||||
| Plugin requirements : | ||||
|     post_analysis/top_hits | ||||
|  | ||||
| Conf values needed : | ||||
|     max_hits_displayed* | ||||
|     create_all_hits_page* | ||||
|  | ||||
| Output files : | ||||
|     OUTPUT_ROOT/year/month/top_hits.html | ||||
|     OUTPUT_ROOT/year/month/index.html | ||||
|  | ||||
| Statistics creation : | ||||
|     None | ||||
|  | ||||
| Statistics update : | ||||
|     None | ||||
|  | ||||
| Statistics deletion : | ||||
|     None | ||||
| """ | ||||
|  | ||||
| class IWLADisplayTopHits(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLADisplayTopHits, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|         self.requires = ['IWLAPostAnalysisTopHits'] | ||||
|         self.max_hits = self.iwla.getConfValue('max_hits_displayed', 0) | ||||
|         self.create_all_hits = self.iwla.getConfValue('create_all_hits_page', True) | ||||
|  | ||||
|     def hook(self): | ||||
|         display = self.iwla.getDisplay() | ||||
|         top_hits = self.iwla.getMonthStats()['top_hits'] | ||||
|         top_hits = sorted(top_hits.items(), key=lambda t: t[1], reverse=True) | ||||
|  | ||||
|         # All in a file | ||||
|         if self.create_all_hits:         | ||||
|             title = createCurTitle(self.iwla, u'All Hits') | ||||
|             filename = 'top_hits.html' | ||||
|             path = self.iwla.getCurDisplayPath(filename) | ||||
|  | ||||
|             page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) | ||||
|             table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'All Hits'), [self.iwla._(u'URI'), self.iwla._(u'Entrance')])         | ||||
|             table.setColsCSSClass(['', 'iwla_hit']) | ||||
|             total_hits = [0]*2 | ||||
|             new_list = self.max_hits and top_hits[:self.max_hits] or top_hits | ||||
|             for (uri, entrance) in new_list: | ||||
|                 table.appendRow([generateHTMLLink(uri), entrance]) | ||||
|                 total_hits[1] += entrance | ||||
|             if self.max_hits: | ||||
|                 others = 0 | ||||
|                 for (uri, entrance) in top_hits[self.max_hits:]: | ||||
|                     others += entrance | ||||
|                 table.appendRow([self.iwla._(u'Others'), others]) | ||||
|                 table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|                  | ||||
|             page.appendBlock(table) | ||||
|                          | ||||
|             display.addPage(page) | ||||
|  | ||||
|         title = 'Top Hits' | ||||
|         if self.create_all_hits: | ||||
|             link = '<a href=\'%s\'>%s</a>' % (filename, self.iwla._(u'All Hits')) | ||||
|             title = '%s - %s' % (title, link) | ||||
|  | ||||
|         # Top in index | ||||
|         index = self.iwla.getDisplayIndex() | ||||
|          | ||||
|         table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'URI'), self.iwla._(u'Entrance')])         | ||||
|         table.setColsCSSClass(['', 'iwla_hit']) | ||||
|         for (uri, entrance) in top_hits[:10]: | ||||
|             table.appendRow([generateHTMLLink(uri), entrance]) | ||||
|             total_hits[1] -= entrance | ||||
|         if total_hits[1]: | ||||
|             total_hits[0] = self.iwla._(u'Others') | ||||
|             table.appendRow(total_hits) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|         index.appendBlock(table) | ||||
							
								
								
									
										105
									
								
								plugins/display/top_pages.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								plugins/display/top_pages.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| # Copyright Grégory Soutadé 2015 | ||||
|  | ||||
| # This file is part of iwla | ||||
|  | ||||
| # iwla is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # iwla is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with iwla.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
| from display import * | ||||
|  | ||||
| """ | ||||
| Display hook | ||||
|  | ||||
| Create TOP pages page | ||||
|  | ||||
| Plugin requirements : | ||||
|     post_analysis/top_pages | ||||
|  | ||||
| Conf values needed : | ||||
|     max_pages_displayed* | ||||
|     create_all_pages_page* | ||||
|  | ||||
| Output files : | ||||
|     OUTPUT_ROOT/year/month/top_pages.html | ||||
|     OUTPUT_ROOT/year/month/index.html | ||||
|  | ||||
| Statistics creation : | ||||
|     None | ||||
|  | ||||
| Statistics update : | ||||
|     None | ||||
|  | ||||
| Statistics deletion : | ||||
|     None | ||||
| """ | ||||
|  | ||||
| class IWLADisplayTopPages(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLADisplayTopPages, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|         self.requires = ['IWLAPostAnalysisTopPages'] | ||||
|         self.max_pages = self.iwla.getConfValue('max_pages_displayed', 0) | ||||
|         self.create_all_pages = self.iwla.getConfValue('create_all_pages_page', True) | ||||
|  | ||||
|     def hook(self): | ||||
|         display = self.iwla.getDisplay() | ||||
|         top_pages = self.iwla.getMonthStats()['top_pages'] | ||||
|         top_pages = sorted(top_pages.items(), key=lambda t: t[1], reverse=True) | ||||
|  | ||||
|         # All in a page | ||||
|         if self.create_all_pages: | ||||
|             title = createCurTitle(self.iwla, u'All Pages') | ||||
|             filename = 'top_pages.html' | ||||
|             path = self.iwla.getCurDisplayPath(filename) | ||||
|  | ||||
|             page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) | ||||
|             table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'All Pages'), [self.iwla._(u'URI'), self.iwla._(u'Entrance')]) | ||||
|             table.setColsCSSClass(['', 'iwla_hit']) | ||||
|             total_hits = [0]*2         | ||||
|             new_list = self.max_pages and top_pages[:self.max_pages] or top_pages | ||||
|             for (uri, entrance) in new_list: | ||||
|                 table.appendRow([generateHTMLLink(uri), entrance]) | ||||
|                 total_hits[1] += entrance | ||||
|             if self.max_pages: | ||||
|                 others = 0 | ||||
|                 for (uri, entrance) in top_pages[self.max_pages:]: | ||||
|                     others += entrance | ||||
|                 table.appendRow([self.iwla._(u'Others'), others]) | ||||
|                 table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|             page.appendBlock(table) | ||||
|  | ||||
|             display.addPage(page) | ||||
|  | ||||
|         title = self.iwla._(u'Top Pages') | ||||
|         if self.create_all_pages: | ||||
|             link = '<a href=\'%s\'>%s</a>' % (filename, self.iwla._(u'All Pages')) | ||||
|             title = '%s - %s' % (title, link) | ||||
|  | ||||
|         # Top in index | ||||
|         index = self.iwla.getDisplayIndex() | ||||
|          | ||||
|         table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'URI'), self.iwla._(u'Entrance')]) | ||||
|         table.setColsCSSClass(['', 'iwla_hit']) | ||||
|         for (uri, entrance) in top_pages[:10]: | ||||
|             table.appendRow([generateHTMLLink(uri), entrance]) | ||||
|             total_hits[1] -= entrance | ||||
|         if total_hits[1]: | ||||
|             total_hits[0] = self.iwla._(u'Others') | ||||
|             table.appendRow(total_hits) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|         index.appendBlock(table) | ||||
							
								
								
									
										97
									
								
								plugins/display/top_visitors.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								plugins/display/top_visitors.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| # Copyright Grégory Soutadé 2015 | ||||
|  | ||||
| # This file is part of iwla | ||||
|  | ||||
| # iwla is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # iwla is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with iwla.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
|  | ||||
| import time | ||||
|  | ||||
| from iwla import IWLA | ||||
| from iplugin import IPlugin | ||||
| from display import * | ||||
|  | ||||
| """ | ||||
| Display hook | ||||
|  | ||||
| Create TOP visitors block | ||||
|  | ||||
| Plugin requirements : | ||||
|     None | ||||
|  | ||||
| Conf values needed : | ||||
|     display_visitor_ip* | ||||
|  | ||||
| Output files : | ||||
|     OUTPUT_ROOT/year/month/index.html | ||||
|  | ||||
| Statistics creation : | ||||
|     None | ||||
|  | ||||
| Statistics update : | ||||
|     None | ||||
|  | ||||
| Statistics deletion : | ||||
|     None | ||||
| """ | ||||
|  | ||||
| class IWLADisplayTopVisitors(IPlugin): | ||||
|     def __init__(self, iwla): | ||||
|         super(IWLADisplayTopVisitors, self).__init__(iwla) | ||||
|         self.API_VERSION = 1 | ||||
|  | ||||
|     def hook(self): | ||||
|         hits = self.iwla.getValidVisitors() | ||||
|         display = self.iwla.getDisplay() | ||||
|         display_visitor_ip = self.iwla.getConfValue('display_visitor_ip', False) | ||||
|  | ||||
|         total = [0]*5 | ||||
|         for super_hit in hits.values(): | ||||
|             total[1] += super_hit['viewed_pages'] | ||||
|             total[2] += super_hit['viewed_hits'] | ||||
|             total[3] += super_hit['bandwidth'] | ||||
|  | ||||
|         top_bandwidth = [(k,v['bandwidth']) for (k,v) in hits.items()] | ||||
|         top_bandwidth = sorted(top_bandwidth, key=lambda t: t[1], reverse=True) | ||||
|         top_visitors = [hits[h[0]] for h in top_bandwidth[:10]] | ||||
|  | ||||
|         index = self.iwla.getDisplayIndex() | ||||
|         table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Top visitors'), [self.iwla._(u'Host'), self.iwla._(u'Pages'), self.iwla._(u'Hits'), self.iwla._(u'Bandwidth'), self.iwla._(u'Last seen')]) | ||||
|         table.setColsCSSClass(['', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', '']) | ||||
|         for super_hit in top_visitors: | ||||
|             address = super_hit['remote_addr'] | ||||
|             if display_visitor_ip and\ | ||||
|                     super_hit.get('dns_name_replaced', False): | ||||
|                 address = '%s [%s]' % (address, super_hit['remote_ip']) | ||||
|  | ||||
|             row = [ | ||||
|                 address, | ||||
|                 super_hit['viewed_pages'], | ||||
|                 super_hit['viewed_hits'], | ||||
|                 bytesToStr(super_hit['bandwidth']), | ||||
|                 time.asctime(super_hit['last_access']) | ||||
|                 ] | ||||
|             total[1] -= super_hit['viewed_pages'] | ||||
|             total[2] -= super_hit['viewed_hits'] | ||||
|             total[3] -= super_hit['bandwidth'] | ||||
|             table.appendRow(row) | ||||
|         if total[1] or total[2] or total[3]: | ||||
|             total[0] = self.iwla._(u'Others') | ||||
|             total[3] = bytesToStr(total[3]) | ||||
|             total[4] = '' | ||||
|             table.appendRow(total) | ||||
|             table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') | ||||
|         index.appendBlock(table) | ||||
		Reference in New Issue
	
	Block a user