From dc4695f539d2290d90d004bb354b4a06641a1921 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Sun, 25 Sep 2016 20:38:49 +0200 Subject: [PATCH] Add robot bandwidth display plugin --- plugins/display/robot_bandwidth.py | 121 +++++++++++++++++++++++++++++ plugins/display/top_hits.py | 2 +- 2 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 plugins/display/robot_bandwidth.py diff --git a/plugins/display/robot_bandwidth.py b/plugins/display/robot_bandwidth.py new file mode 100644 index 0000000..59bf048 --- /dev/null +++ b/plugins/display/robot_bandwidth.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +# +# Copyright Grégory Soutadé 2016 + +# 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 . +# + +import time + +from iwla import IWLA +from iplugin import IPlugin +from display import * + +""" +Display hook + +Display top 10 robot bandwidth use + +Plugin requirements : + None + +Conf values needed : + display_visitor_ip* + create_all_robot_bandwidth_page* + +Output files : + OUTPUT_ROOT/year/month/top_robots_bandwidth.html + OUTPUT_ROOT/year/month/index.html + +Statistics creation : + None + +Statistics update : + None + +Statistics deletion : + None +""" + +class IWLADisplayRobotBandwidth(IPlugin): + def __init__(self, iwla): + super(IWLADisplayRobotBandwidth, self).__init__(iwla) + self.API_VERSION = 1 + self.display_visitor_ip = self.iwla.getConfValue('display_visitor_ip', False) + self.create_all_pages = self.iwla.getConfValue('create_all_robot_bandwidth_page', True) + + def load(self): + return True + + def hook(self): + display = self.iwla.getDisplay() + hits = self.iwla.getCurrentVisits() + + bandwidths = [] + for (k, super_hit) in hits.items(): + if not self.iwla.isRobot(super_hit): + continue + bandwidths.append((super_hit, super_hit['bandwidth'])) + bandwidths.sort(key=lambda tup: tup[1], reverse=True) + + # All in a page + if self.create_all_pages: + title = createCurTitle(self.iwla, u'Robots bandwidth') + filename = 'top_robots_bandwidth.html' + path = self.iwla.getCurDisplayPath(filename) + + page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) + table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'Host'), self.iwla._(u'Bandwidth'), self.iwla._(u'Last seen')]) + table.setColsCSSClass(['', 'iwla_bandwidth', '']) + for (super_hit, bandwidth) in bandwidths: + address = super_hit['remote_addr'] + if self.display_visitor_ip and\ + super_hit.get('dns_name_replaced', False): + address = '%s [%s]' % (address, super_hit['remote_ip']) + + row = [ + address, + bytesToStr(bandwidth), + time.asctime(super_hit['last_access']) + ] + table.appendRow(row) + page.appendBlock(table) + + display.addPage(page) + + title = self.iwla._(u'Robots bandwidth') + if self.create_all_pages: + link = '%s' % (filename, self.iwla._(u'All robots bandwidth')) + title = '%s - %s' % (title, link) + + # Top in index + index = self.iwla.getDisplayIndex() + table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'Host'), self.iwla._(u'Bandwidth'), self.iwla._(u'Last seen')]) + table.setColsCSSClass(['', 'iwla_bandwidth', '']) + + for (super_hit, bandwidth) in bandwidths[:10]: + address = super_hit['remote_addr'] + if self.display_visitor_ip and\ + super_hit.get('dns_name_replaced', False): + address = '%s [%s]' % (address, super_hit['remote_ip']) + + row = [ + address, + bytesToStr(bandwidth), + time.asctime(super_hit['last_access']) + ] + table.appendRow(row) + index.appendBlock(table) diff --git a/plugins/display/top_hits.py b/plugins/display/top_hits.py index 412b3fe..379be7b 100644 --- a/plugins/display/top_hits.py +++ b/plugins/display/top_hits.py @@ -86,7 +86,7 @@ class IWLADisplayTopHits(IPlugin): display.addPage(page) - title = 'Top Hits' + title = u'Top Hits' if self.create_all_hits: link = '%s' % (filename, self.iwla._(u'All Hits')) title = '%s - %s' % (title, link)