diff options
Diffstat (limited to 'admin/stats.py')
| -rw-r--r-- | admin/stats.py | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/admin/stats.py b/admin/stats.py index 6dc234c..f69390b 100644 --- a/admin/stats.py +++ b/admin/stats.py @@ -99,10 +99,13 @@ def order(grouped_visits): def normalizeref(referer): if referer == '-': return 'inconnu' - return re.sub( + referer = re.sub( r'https://(?:www\.)?quatuorbellefeuille\.(?:fr|com)(/[^?]*)(?:\?.+)?', r'\1', referer ) + if referer == '/': + return '/index.html' + return referer def analyze(logs_path): accesses = parse(logs_path) @@ -116,21 +119,25 @@ def analyze(logs_path): for page, hits in pagehits.most_common(): print(hits, page) - edges = Counter( - (a.resource, normalizeref(a.referer)) for a in accesses - ) - edge_statements = '\n'.join( - f' "{ref}" -- "{res}";' for (res, ref) in edges.keys() - ) - graph = f'''\ -graph trip {{ -{edge_statements} -}} -''' - dot = run(('dot', '-Tpdf'), text=False, input=graph.encode(), - capture_output=True, check=True) - with open('graph.pdf', 'wb') as graph_file: - graph_file.write(dot.stdout) + date = accesses[0].time.strftime('%F') + + for i, visit in enumerate(visits_by_time.values()): + edges = (f' "{normalizeref(a.referer)}" -- "{a.resource}";' + for a in visit) + graph = '\n'.join(('graph trip {', + *edges, + '}')) + dot = run( + ('dot', '-Tpdf'), text=False, capture_output=True, check=True, + input=graph.encode() + ) + with open(f'{date}-{i}.pdf', 'wb') as visitgraph: + visitgraph.write(dot.stdout) + + pages = (f'{date}-{i}.pdf' for i in range(len(visits_by_time.values()))) + run(('qpdf', '--empty', '--pages', *pages, '--', f'{date}.pdf'), + text=False, check=True) + if __name__ == '__main__': analyze(argv[1]) |
