Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Web Log Sessions by flpo
from datetime import datetime as datetime, timedelta
class WebSession:
def __init__(self):
self.seconds = 1
self.len = 0
self.last = None
def add_log(self, time):
self.seconds += (time - self.last).seconds if self.last else 0
self.last = time
self.len += 1
def parse_log(line):
from re import match
time, name, request = line.lower().split(';;')
time = datetime.strptime(time, '%Y-%m-%d-%H-%M-%S')
url = match('(https?://)?(\w+\.)*(\w+\.\w+)/?.*', request).groups()[-1]
return time, name, url
def checkio(logs):
from collections import defaultdict
from itertools import starmap
opened = defaultdict(WebSession)
closed = []
def close_session(name, url, log):
closed.append((name, url, log.seconds, log.len))
for time, name, url in map(parse_log, logs.splitlines()):
if (name, url) in opened and time - opened[name, url].last >= timedelta(minutes=30):
close_session(name, url, opened.pop((name, url)))
opened[name, url].add_log(time)
for (name, url), log in opened.items():
close_session(name, url, log)
return '\n'.join(starmap('{};;{};;{};;{}'.format, sorted(closed)))
Nov. 14, 2017