mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
@@ -208,6 +208,7 @@ def get_device_sessions(mac, period):
|
|||||||
cur.execute(sql, (mac,))
|
cur.execute(sql, (mac,))
|
||||||
rows = cur.fetchall()
|
rows = cur.fetchall()
|
||||||
conn.close()
|
conn.close()
|
||||||
|
tz_name = get_setting_value("TIMEZONE") or "UTC"
|
||||||
|
|
||||||
table_data = {"data": []}
|
table_data = {"data": []}
|
||||||
|
|
||||||
@@ -230,9 +231,9 @@ def get_device_sessions(mac, period):
|
|||||||
if row["ses_EventTypeConnection"] in ("<missing event>", None) or row["ses_EventTypeDisconnection"] in ("<missing event>", None):
|
if row["ses_EventTypeConnection"] in ("<missing event>", None) or row["ses_EventTypeDisconnection"] in ("<missing event>", None):
|
||||||
dur = "..."
|
dur = "..."
|
||||||
elif row["ses_StillConnected"]:
|
elif row["ses_StillConnected"]:
|
||||||
dur = format_date_diff(row["ses_DateTimeConnection"], None)["text"]
|
dur = format_date_diff(row["ses_DateTimeConnection"], None, tz_name)["text"]
|
||||||
else:
|
else:
|
||||||
dur = format_date_diff(row["ses_DateTimeConnection"], row["ses_DateTimeDisconnection"])["text"]
|
dur = format_date_diff(row["ses_DateTimeConnection"], row["ses_DateTimeDisconnection"], tz_name)["text"]
|
||||||
|
|
||||||
# Additional Info
|
# Additional Info
|
||||||
info = row["ses_AdditionalInfo"]
|
info = row["ses_AdditionalInfo"]
|
||||||
@@ -350,11 +351,11 @@ def get_session_events(event_type, period_date):
|
|||||||
if event_type in ("sessions", "missing"):
|
if event_type in ("sessions", "missing"):
|
||||||
# Duration
|
# Duration
|
||||||
if row[5] and row[6]:
|
if row[5] and row[6]:
|
||||||
delta = format_date_diff(row[5], row[6])
|
delta = format_date_diff(row[5], row[6], tz_name)
|
||||||
row[7] = delta["text"]
|
row[7] = delta["text"]
|
||||||
row[8] = int(delta["total_minutes"] * 60) # seconds
|
row[8] = int(delta["total_minutes"] * 60) # seconds
|
||||||
elif row[12] == 1:
|
elif row[12] == 1:
|
||||||
delta = format_date_diff(row[5], None)
|
delta = format_date_diff(row[5], None, tz_name)
|
||||||
row[7] = delta["text"]
|
row[7] = delta["text"]
|
||||||
row[8] = int(delta["total_minutes"] * 60) # seconds
|
row[8] = int(delta["total_minutes"] * 60) # seconds
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -4,19 +4,17 @@ import os
|
|||||||
import pathlib
|
import pathlib
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import datetime
|
||||||
import pytz
|
import pytz
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
import datetime
|
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
import email.utils
|
||||||
|
|
||||||
# Register NetAlertX directories
|
# Register NetAlertX directories
|
||||||
INSTALL_PATH="/app"
|
INSTALL_PATH="/app"
|
||||||
sys.path.extend([f"{INSTALL_PATH}/front/plugins", f"{INSTALL_PATH}/server"])
|
sys.path.extend([f"{INSTALL_PATH}/front/plugins", f"{INSTALL_PATH}/server"])
|
||||||
|
|
||||||
|
|
||||||
# Register NetAlertX directories
|
|
||||||
INSTALL_PATH="/app"
|
|
||||||
|
|
||||||
import conf
|
import conf
|
||||||
from const import *
|
from const import *
|
||||||
|
|
||||||
@@ -115,17 +113,16 @@ def format_date(date_str: str) -> str:
|
|||||||
now = datetime.datetime.now(conf.tz)
|
now = datetime.datetime.now(conf.tz)
|
||||||
dt = dt.replace(tzinfo=now.astimezone().tzinfo)
|
dt = dt.replace(tzinfo=now.astimezone().tzinfo)
|
||||||
return dt.astimezone().isoformat()
|
return dt.astimezone().isoformat()
|
||||||
except Exception:
|
except (ValueError, AttributeError, TypeError):
|
||||||
return "invalid"
|
return "invalid"
|
||||||
|
|
||||||
def format_date_diff(date1, date2):
|
def format_date_diff(date1, date2, tz_name):
|
||||||
"""
|
"""
|
||||||
Return difference between two datetimes as 'Xd HH:MM'.
|
Return difference between two datetimes as 'Xd HH:MM'.
|
||||||
Uses app timezone if datetime is naive.
|
Uses app timezone if datetime is naive.
|
||||||
date2 can be None (uses now).
|
date2 can be None (uses now).
|
||||||
"""
|
"""
|
||||||
# Get timezone from settings
|
# Get timezone from settings
|
||||||
tz_name = get_setting_value("TIMEZONE") or "UTC"
|
|
||||||
tz = pytz.timezone(tz_name)
|
tz = pytz.timezone(tz_name)
|
||||||
|
|
||||||
def parse_dt(dt):
|
def parse_dt(dt):
|
||||||
@@ -134,9 +131,9 @@ def format_date_diff(date1, date2):
|
|||||||
if isinstance(dt, str):
|
if isinstance(dt, str):
|
||||||
try:
|
try:
|
||||||
dt_parsed = email.utils.parsedate_to_datetime(dt)
|
dt_parsed = email.utils.parsedate_to_datetime(dt)
|
||||||
except Exception:
|
except (ValueError, TypeError):
|
||||||
# fallback: parse ISO string
|
# fallback: parse ISO string
|
||||||
dt_parsed = datetime.datetime.fromisoformat(dt)
|
dt_parsed = datetime.datetime.fromisoformat(dt)
|
||||||
# convert naive GMT/UTC to app timezone
|
# convert naive GMT/UTC to app timezone
|
||||||
if dt_parsed.tzinfo is None:
|
if dt_parsed.tzinfo is None:
|
||||||
dt_parsed = tz.localize(dt_parsed)
|
dt_parsed = tz.localize(dt_parsed)
|
||||||
|
|||||||
Reference in New Issue
Block a user