feat(backend): presence stats count time online from sessions in the browser time zone, capture uptime marks hours without data, presence reaches every stream of the account, message volume keeps empty days
This commit is contained in:
1 parent
bb38e23f29
commit
f44597b2dc
14 files changed
+585
-26
No files matched your search
@@ -1,4 +1,4 @@
|
||||
from datetime import datetime
|
||||
from datetime import date, datetime
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel
|
||||
@@ -362,8 +362,61 @@ class PresenceHourly(BaseModel):
|
||||
last_seen: datetime | None
|
||||
|
||||
|
||||
class PresenceSession(BaseModel):
|
||||
started: datetime
|
||||
ended: datetime
|
||||
seconds: float
|
||||
online_seconds: float
|
||||
ongoing: bool
|
||||
|
||||
|
||||
class PresenceHour(BaseModel):
|
||||
weekday: int
|
||||
hour: int
|
||||
hours: int
|
||||
online_minutes: float | None
|
||||
covered_hours: float
|
||||
|
||||
|
||||
class PresenceDay(BaseModel):
|
||||
day: date
|
||||
online_seconds: float
|
||||
covered_seconds: float
|
||||
|
||||
|
||||
class CoverageGap(BaseModel):
|
||||
started: datetime
|
||||
ended: datetime
|
||||
|
||||
|
||||
class PresenceSummary(BaseModel):
|
||||
online_seconds: float
|
||||
daily_seconds: float | None
|
||||
covered_seconds: float
|
||||
session_count: int
|
||||
median_session_seconds: float | None
|
||||
first_online: int | None
|
||||
last_offline: int | None
|
||||
last_seen: datetime | None
|
||||
|
||||
|
||||
class PresenceStats(BaseModel):
|
||||
peer_id: int
|
||||
tz: str
|
||||
since: datetime
|
||||
until: datetime
|
||||
current: PresenceSample | None
|
||||
online: bool
|
||||
hidden: bool
|
||||
summary: PresenceSummary
|
||||
week: list[PresenceHour]
|
||||
days: list[PresenceDay]
|
||||
gaps: list[CoverageGap]
|
||||
sessions: list[PresenceSession]
|
||||
|
||||
|
||||
class VolumeBucket(BaseModel):
|
||||
bucket: datetime
|
||||
bucket: date
|
||||
total: int
|
||||
outgoing: int
|
||||
incoming: int
|
||||
|
||||
Reference in new issue
Block a user