fix(worktime-api): count unknown RDP sessions with valid user/session as active
This commit is contained in:
@@ -21,6 +21,31 @@ def pts(s):
|
|||||||
return datetime.fromisoformat(s.replace("Z", "+00:00")).astimezone(timezone.utc)
|
return datetime.fromisoformat(s.replace("Z", "+00:00")).astimezone(timezone.utc)
|
||||||
|
|
||||||
|
|
||||||
|
def _is_machine_user(user: str) -> bool:
|
||||||
|
u = (user or "").strip().lower()
|
||||||
|
return u.endswith("$") or u in {"system", "localservice", "networkservice"}
|
||||||
|
|
||||||
|
|
||||||
|
def _is_active_sample(data: dict) -> bool:
|
||||||
|
state = str(data.get("state") or "").strip().lower()
|
||||||
|
if isinstance(data.get("active"), bool):
|
||||||
|
if data.get("active"):
|
||||||
|
return True
|
||||||
|
if ("актив" in state) or (state == "active"):
|
||||||
|
return True
|
||||||
|
# query user can intermittently return "Unknown" on RDP hosts; if session id is valid
|
||||||
|
# and user is not a machine/service account, treat it as activity sample.
|
||||||
|
if state == "unknown":
|
||||||
|
try:
|
||||||
|
sid = int(data.get("sessionId"))
|
||||||
|
except Exception:
|
||||||
|
sid = -1
|
||||||
|
user = str(data.get("username") or "").strip()
|
||||||
|
if sid > 0 and user and (not _is_machine_user(user)):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def report_today():
|
def report_today():
|
||||||
now_local = datetime.now(REPORT_TZ)
|
now_local = datetime.now(REPORT_TZ)
|
||||||
start_local = datetime(now_local.year, now_local.month, now_local.day, tzinfo=REPORT_TZ)
|
start_local = datetime(now_local.year, now_local.month, now_local.day, tzinfo=REPORT_TZ)
|
||||||
@@ -41,8 +66,7 @@ def report_today():
|
|||||||
user = (d.get("username") or "").strip()
|
user = (d.get("username") or "").strip()
|
||||||
if not user:
|
if not user:
|
||||||
continue
|
continue
|
||||||
state = (d.get("state") or "").lower()
|
active = _is_active_sample(d)
|
||||||
active = ("актив" in state) or (state == "active")
|
|
||||||
row = by.setdefault(user, {"active": set(), "first": None, "last": None, "rows": 0})
|
row = by.setdefault(user, {"active": set(), "first": None, "last": None, "rows": 0})
|
||||||
row["rows"] += 1
|
row["rows"] += 1
|
||||||
if active:
|
if active:
|
||||||
|
|||||||
Reference in New Issue
Block a user