Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2020
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.98 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import unittest
  3. import re
  4. from datetime import datetime
  5. import collections
  6. import sys
  7.  
  8.  
  9. splitter = re.compile(r"(\S+) \S+ \S+ \[([^:]+):(\d+:\d+:\d+) ([^]]+)] "
  10.                              r"\S+ (\S+) \S+ \S+ \S+ \"([^\"]+)\" "
  11.                              r"\"([^\"]+)\"\s*(\d*)")
  12.  
  13. class Stat:
  14.     def __init__(self):
  15.         self.fastest_page = ('', 99999999)
  16.         self.slowest_page = ('', -1)
  17.         self.avg_page_speed_stat = collections.Counter()
  18.         self.date_client_stat = {}
  19.         self.browser_stat = collections.Counter()
  20.         self.page_stat = collections.Counter()
  21.         self.general_client_stat = collections.Counter()
  22.  
  23.     def add_line(self, line):
  24.         splitted_line = re.split(splitter, line)
  25.         if len(splitted_line) < 8:
  26.             return
  27.         page = splitted_line[5]
  28.         date = splitted_line[2]
  29.         client = splitted_line[1]
  30.         browser = splitted_line[7]
  31.         if all((page, client, browser)):
  32.             self.page_stat[page] += 1
  33.             self.browser_stat[browser] += 1
  34.             if date not in self.date_client_stat:
  35.                 self.date_client_stat[date] = collections.Counter()
  36.             self.date_client_stat[date][client] += 1
  37.             time = splitted_line[8]
  38.             if time:
  39.                 time = int(time)
  40.                 if time <= self.fastest_page[1]:
  41.                     self.fastest_page = (page, time)
  42.                 if time >= self.slowest_page[1]:
  43.                     self.slowest_page = (page, time)
  44.                 if page not in self.avg_page_speed_stat:
  45.                     self.avg_page_speed_stat[page] = (time, 1)
  46.                 else:
  47.                     count = self.avg_page_speed_stat[page][1]
  48.                     self.avg_page_speed_stat[page] = (
  49.                         (self.avg_page_speed_stat[page][0] * count + time)
  50.                         / (count + 1), count + 1)
  51.  
  52.     def create_client_stat(self):
  53.         date_stat_client = {}
  54.         for key in self.date_client_stat.keys():
  55.             self.general_client_stat += self.date_client_stat[key]
  56.             new_key = datetime.strptime(key, '%d/%b/%Y').date()
  57.             date_stat_client[new_key] = self.date_client_stat[key].most_common(1)[0][0]
  58.         self.date_client_stat = date_stat_client
  59.  
  60.     def results(self):
  61.         self.create_client_stat()
  62.         result = {
  63.             'FastestPage': self.fastest_page[0],
  64.             'MostActiveClient': self.general_client_stat.most_common(1)[0][0],
  65.             'MostActiveClientByDay': self.date_client_stat,
  66.             'MostPopularBrowser': self.browser_stat.most_common(1)[0][0],
  67.             'MostPopularPage': self.page_stat.most_common(1)[0][0],
  68.             'SlowestAveragePage': self.avg_page_speed_stat.most_common(1)[0][0],
  69.             'SlowestPage': self.slowest_page[0]
  70.             }
  71.  
  72.         return result
  73.  
  74.  
  75. def make_stat():
  76.     return Stat()
  77.  
  78.  
  79. #class LogStatTests(unittest.TestCase):
  80.     # TODO: add unit tests
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement