ソースを参照

storing referrers

Rodja Trappe 2 年 前
コミット
aae3506c8f
1 ファイル変更12 行追加1 行削除
  1. 12 1
      traffic_tracking.py

+ 12 - 1
traffic_tracking.py

@@ -11,17 +11,22 @@ from nicegui import ui
 
 VISITS_FILE = 'traffic_data/visits.pickle'
 SESSIONS_FILE = 'traffic_data/sessions.pickle'
+REFERRERS_FILE = 'traffic_data/referrers.pickle'
 
 visits: Dict[int, int] = {}
 sessions: Dict[int, Set[str]] = {}
+referrers: Dict[int, Dict[str, int]] = {}
 
 os.makedirs(os.path.dirname(VISITS_FILE), exist_ok=True)
 os.makedirs(os.path.dirname(SESSIONS_FILE), exist_ok=True)
+os.makedirs(os.path.dirname(REFERRERS_FILE), exist_ok=True)
 try:
     with open(VISITS_FILE, 'rb') as f:
         visits = pickle.load(f)
     with open(SESSIONS_FILE, 'rb') as f:
         sessions = pickle.load(f)
+    with open(REFERRERS_FILE, 'rb') as f:
+        referrers = pickle.load(f)
 except FileNotFoundError:
     pass
 except:
@@ -38,6 +43,8 @@ def keep_backups() -> None:
                     pickle.dump(visits, f)
                 with open(SESSIONS_FILE, 'wb') as f:
                     pickle.dump(sessions, f)
+                with open(REFERRERS_FILE, 'wb') as f:
+                    pickle.dump(referrers, f)
             except:
                 logging.exception('Error saving traffic data')
             time.sleep(1)
@@ -55,11 +62,15 @@ def on_connect(request: Request) -> None:
     agent = request.headers['user-agent'].lower()
     if any(s in agent for s in ('bot', 'spider', 'crawler', 'monitor', 'curl', 'wget', 'python-requests', 'kuma')):
         return
-    print(f'new connection from {agent}')
+    origin_url = request.headers.get('referer', 'unknown')
+    print(f'new connection from {agent}, coming from {origin_url}', flush=True)
     def seconds_to_day(seconds: float) -> int: return int(seconds / 60 / 60 / 24)
     #print(f'traffic data: {[datetime.fromtimestamp(day_to_milliseconds(t)/1000) for t in visits.keys()]}')
     today = seconds_to_day(time.time())
     visits[today] = visits.get(today, 0) + 1
+    referrers[today] = referrers.get(today, {})
+    referrers[today][origin_url] = referrers[today].get(origin_url, 0) + 1
+    print(referrers, flush=True)
     if today not in sessions:
         sessions[today] = set()
     sessions[today].add(request.session_id)