mirror of
https://github.com/pablorevilla-meshtastic/meshview.git
synced 2026-10-31 03:01:58 +01:00
change reporing on Snapshot
This commit is contained in:
1 parent
fb3a0154dd
commit
df7766e783
2 files changed
+27
-6
No files matched your search
@@ -232,9 +232,14 @@ Response Example
|
|||||||
Returns stored daily snapshots. For new snapshots, `packet_count` is the number of
|
Returns stored daily snapshots. For new snapshots, `packet_count` is the number of
|
||||||
packet records imported during `date` (00:00 UTC inclusive to the next midnight
|
packet records imported during `date` (00:00 UTC inclusive to the next midnight
|
||||||
exclusive). The scheduled capture records the previous complete UTC day. Repeated
|
exclusive). The scheduled capture records the previous complete UTC day. Repeated
|
||||||
observations of the same packet are not counted separately. Node and gateway counts
|
observations of the same packet are not counted separately. `node_count` counts distinct
|
||||||
remain database totals at capture time. Older snapshots retain the cumulative packet
|
packet senders whose packets were imported or observed during that UTC day (including
|
||||||
counts originally stored; they are not automatically converted.
|
observations of previously imported packets). `gateway_count` counts distinct MQTT
|
||||||
|
gateways with packet observations imported during that day. These are activity counts,
|
||||||
|
not database totals; recipients alone do not count as active nodes. Activity uses local
|
||||||
|
import timestamps, not device timestamps. Older snapshots retain their originally stored
|
||||||
|
counts and are not automatically converted. Counts depend on the packet and observation
|
||||||
|
history still retained at capture time.
|
||||||
|
|
||||||
### GET `/api/config`
|
### GET `/api/config`
|
||||||
Returns a safe subset of server configuration.
|
Returns a safe subset of server configuration.
|
||||||
|
|||||||
+19
-3
@@ -110,7 +110,7 @@ async def ensure_node_exists(session, node_id: int | None, channel: str | None)
|
|||||||
|
|
||||||
|
|
||||||
async def capture_daily_snapshot() -> None:
|
async def capture_daily_snapshot() -> None:
|
||||||
"""Record packet traffic for the previous complete UTC day."""
|
"""Record packet traffic and active nodes/gateways for the previous UTC day."""
|
||||||
day_end = datetime.now(UTC).replace(hour=0, minute=0, second=0, microsecond=0)
|
day_end = datetime.now(UTC).replace(hour=0, minute=0, second=0, microsecond=0)
|
||||||
day_start = day_end - timedelta(days=1)
|
day_start = day_end - timedelta(days=1)
|
||||||
start_us = int(day_start.timestamp() * 1_000_000)
|
start_us = int(day_start.timestamp() * 1_000_000)
|
||||||
@@ -118,7 +118,21 @@ async def capture_daily_snapshot() -> None:
|
|||||||
snapshot_date = day_start.date()
|
snapshot_date = day_start.date()
|
||||||
|
|
||||||
async with mqtt_database.async_session() as session:
|
async with mqtt_database.async_session() as session:
|
||||||
node_count = (await session.execute(select(func.count()).select_from(Node))).scalar_one()
|
# Include repeated observations of older packets as activity, too. Node.last_seen_us
|
||||||
|
# cannot answer this after a node has already been seen on the following day.
|
||||||
|
active_nodes = (
|
||||||
|
select(Packet.from_node_id)
|
||||||
|
.where(Packet.import_time_us >= start_us, Packet.import_time_us < end_us)
|
||||||
|
.union(
|
||||||
|
select(Packet.from_node_id)
|
||||||
|
.join(PacketSeen, PacketSeen.packet_id == Packet.id)
|
||||||
|
.where(PacketSeen.import_time_us >= start_us, PacketSeen.import_time_us < end_us)
|
||||||
|
)
|
||||||
|
.subquery()
|
||||||
|
)
|
||||||
|
node_count = (
|
||||||
|
await session.execute(select(func.count(active_nodes.c.from_node_id)))
|
||||||
|
).scalar_one()
|
||||||
packet_count = (
|
packet_count = (
|
||||||
await session.execute(
|
await session.execute(
|
||||||
select(func.count())
|
select(func.count())
|
||||||
@@ -128,7 +142,9 @@ async def capture_daily_snapshot() -> None:
|
|||||||
).scalar_one()
|
).scalar_one()
|
||||||
gateway_count = (
|
gateway_count = (
|
||||||
await session.execute(
|
await session.execute(
|
||||||
select(func.count()).select_from(Node).where(Node.is_mqtt_gateway.is_(True))
|
select(func.count(func.distinct(PacketSeen.node_id))).where(
|
||||||
|
PacketSeen.import_time_us >= start_us, PacketSeen.import_time_us < end_us
|
||||||
|
)
|
||||||
)
|
)
|
||||||
).scalar_one()
|
).scalar_one()
|
||||||
captured_at_us = int(time.time() * 1_000_000)
|
captured_at_us = int(time.time() * 1_000_000)
|
||||||
|
|||||||
Reference in new issue
Block a user