Procházet zdrojové kódy

not every page must load/save traffic data

Rodja Trappe před 2 roky
rodič
revize
ae05b0543f
2 změnil soubory, kde provedl 40 přidání a 39 odebrání
  1. 1 1
      main.py
  2. 39 38
      traffic_tracking.py

+ 1 - 1
main.py

@@ -5,7 +5,7 @@ import docutils.core
 
 import api_docs_and_examples
 from nicegui import ui
-from traffic_tracking import TrafficChard as traffic_chart
+from traffic_tracking import TrafficChart as traffic_chart
 
 
 @ui.page('/', on_page_ready=api_docs_and_examples.create)

+ 39 - 38
traffic_tracking.py

@@ -12,16 +12,43 @@ from nicegui import ui
 VISITS_FILE = 'traffic_data/visits.pickle'
 SESSIONS_FILE = 'traffic_data/sessions.pickle'
 
+visits: Dict[int, int] = {}
+sessions: Dict[int, Set[str]] = {}
 
-class TrafficChard(ui.chart):
+os.makedirs(os.path.dirname(VISITS_FILE), exist_ok=True)
+os.makedirs(os.path.dirname(SESSIONS_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)
+except FileNotFoundError:
+    pass
+except:
+    logging.exception('Error loading traffic data')
+
+
+def keep_backups(self) -> None:
+    def _save() -> None:
+        try:
+            with open(VISITS_FILE, 'wb') as f:
+                pickle.dump(visits, f)
+            with open(SESSIONS_FILE, 'wb') as f:
+                pickle.dump(sessions, f)
+        except:
+            logging.exception('Error saving traffic data')
+
+    while True:
+        time.sleep(10)
+        t = threading.Thread(target=_save, name='Save Traffic Data')
+        t.start()
+
+
+class TrafficChart(ui.chart):
 
     def __init__(self) -> None:
-        self.visits: Dict[int, int] = {}
-        self.sessions: Dict[int, Set[str]] = {}
-        self.load()
 
         ui.on_connect(self.on_connect)
-        ui.timer(10, self.save)
         ui.timer(10, self.update_visibility)
 
         super().__init__({
@@ -48,39 +75,13 @@ class TrafficChard(ui.chart):
         def seconds_to_day(seconds: float) -> int: return int(seconds / 60 / 60 / 24)
         def day_to_milliseconds(day: int) -> float: return day * 24 * 60 * 60 * 1000
         today = seconds_to_day(time.time())
-        self.visits[today] = self.visits.get(today, 0) + 1
-        self.options.series[0].data[:] = [[day_to_milliseconds(day), count] for day, count in self.visits.items()]
-        if today not in self.sessions:
-            self.sessions[today] = set()
-        self.sessions[today].add(request.session_id)
-        self.options.series[1].data[:] = [[day_to_milliseconds(day), len(s)] for day, s in self.sessions.items()]
+        visits[today] = visits.get(today, 0) + 1
+        self.options.series[0].data[:] = [[day_to_milliseconds(day), count] for day, count in visits.items()]
+        if today not in sessions:
+            sessions[today] = set()
+        sessions[today].add(request.session_id)
+        self.options.series[1].data[:] = [[day_to_milliseconds(day), len(s)] for day, s in sessions.items()]
         self.update()
 
-    def load(self) -> None:
-        os.makedirs(os.path.dirname(VISITS_FILE), exist_ok=True)
-        os.makedirs(os.path.dirname(SESSIONS_FILE), exist_ok=True)
-        try:
-            with open(VISITS_FILE, 'rb') as f:
-                self.visits = pickle.load(f)
-            with open(SESSIONS_FILE, 'rb') as f:
-                self.sessions = pickle.load(f)
-        except FileNotFoundError:
-            pass
-        except:
-            logging.exception('Error loading traffic data')
-
-    def save(self) -> None:
-        def _save() -> None:
-            try:
-                with open(VISITS_FILE, 'wb') as f:
-                    pickle.dump(self.visits, f)
-                with open(SESSIONS_FILE, 'wb') as f:
-                    pickle.dump(self.sessions, f)
-            except:
-                logging.exception('Error saving traffic data')
-
-        t = threading.Thread(target=_save, name='Save Traffic Data')
-        t.start()
-
     def update_visibility(self) -> None:
-        self.visible = len(self.visits.keys()) >= 3 and len(self.sessions.keys()) >= 3
+        self.visible = len(visits.keys()) >= 3 and len(sessions.keys()) >= 3