44 lines
2.4 KiB
Python
44 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Migration, historical aggregates, disabled tracking and hot-file size regression."""
|
|
import datetime
|
|
import json
|
|
import subprocess
|
|
import tempfile
|
|
import time
|
|
from support import copy_core, write_json
|
|
|
|
with tempfile.TemporaryDirectory(prefix='raiju-analytics-') as folder:
|
|
root = copy_core(folder)
|
|
today = datetime.date.today()
|
|
days = {}
|
|
for index in range(730):
|
|
day = str(today - datetime.timedelta(days=index))
|
|
days[day] = {'views': 7, 'visits': 3, 'visitors': {'fixture': True}, 'sessions': {'fixture': True},
|
|
'pages': {'en_home': {'views': 7, 'visits': 3, 'visitors': {'fixture': True}, 'title': 'Home', 'path': '/'}},
|
|
'hours': {}, 'referrers': {'Direct': 7}}
|
|
legacy = root / 'content/analytics.json'
|
|
write_json(legacy, {'days': days})
|
|
initial_bytes = legacy.stat().st_size
|
|
def php(code):
|
|
return subprocess.check_output(['php', '-r', "require 'includes/analytics-helper.php'; " + code], cwd=root, text=True)
|
|
started = time.perf_counter()
|
|
summary = json.loads(php("echo json_encode(raijuAnalyticsSummary('days', 30));"))
|
|
migration_ms = (time.perf_counter() - started) * 1000
|
|
assert summary['periodViews'] == 210 and len(summary['series']) == 30
|
|
complete = json.loads(php('echo json_encode(raijuAnalyticsLoad());'))
|
|
assert len(complete['days']) == 730 and sum(day['views'] for day in complete['days'].values()) == 5110
|
|
old = complete['days'][str(today - datetime.timedelta(days=400))]
|
|
assert 'visitors' not in old and old['visitorCount'] == 1
|
|
assert (root / 'content/analytics/archive').is_dir()
|
|
track = "$_SERVER['HTTP_USER_AGENT']='Mozilla/5.0'; $_SERVER['REQUEST_URI']='/'; raijuAnalyticsTrack('en_home','en','home');"
|
|
php(track)
|
|
summary = json.loads(php("echo json_encode(raijuAnalyticsSummary('days', 30));"))
|
|
assert summary['periodViews'] == 211, 'Current-day write did not invalidate summary cache'
|
|
hot = root / 'content/analytics/days' / (str(today) + '.json')
|
|
assert hot.stat().st_size < initial_bytes / 10
|
|
write_json(root / 'content/settings.json', {'privacy': {'analyticsEnabled': False}})
|
|
before = hot.read_bytes()
|
|
php(track)
|
|
assert hot.read_bytes() == before, 'Disabled analytics still tracks visits'
|
|
print(f'PASS analytics: 730-day import in {migration_ms:.0f} ms; legacy {initial_bytes} bytes, hot day {hot.stat().st_size} bytes; preserved totals, archive and cache invalidation')
|