Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Third solution in Clear category for Web Log Sessions by dagger126
from re import sub
from datetime import datetime, timedelta
def checkio(log_text):
log = sub(r'https?://(\w+\.)?(\w+\.\w+\b).*', '\g<2>', log_text.lower())
log = [line.split(';;')for line in log.splitlines()]
log.sort(key=lambda x: (x[1], x[2]))
timestamp, name, domain = log[0]
session, stack = [], [datetime.strptime(timestamp, '%Y-%m-%d-%H-%M-%S')]
for timestamp, n, d in log[1:]:
start, end = stack[0], stack[-1]
t = datetime.strptime(timestamp, '%Y-%m-%d-%H-%M-%S')
if (name, domain) == (n, d) and t-end <= timedelta(minutes=30):
stack.append(t)
else:
session.append((name, domain, (end-start).seconds+1, len(stack)))
name, domain, stack = n, d, [t]
session.append((name, domain, (stack[-1]-stack[0]).seconds+1, len(stack)))
return '\n'.join('{};;{};;{};;{}'.format(*s)for s in sorted(session))
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
assert (checkio(
"""2013-01-01-01-00-00;;Name;;http://checkio.org/task
2013-01-01-01-02-00;;name;;http://checkio.org/task2
2013-01-01-01-31-00;;Name;;https://admin.checkio.org
2013-01-01-03-00-00;;Name;;http://www.checkio.org/profile
2013-01-01-03-00-01;;Name;;http://example.com
2013-02-03-04-00-00;;user2;;http://checkio.org/task
2013-01-01-03-11-00;;Name;;http://checkio.org/task""")
==
"""name;;checkio.org;;661;;2
name;;checkio.org;;1861;;3
name;;example.com;;1;;1
user2;;checkio.org;;1;;1"""), "Example"
Jan. 8, 2015