diff --git a/dbService.py b/dbService.py index ad21764..a2d4a3c 100644 --- a/dbService.py +++ b/dbService.py @@ -2,6 +2,7 @@ from typing import List from pymongo.asynchronous.database import AsyncDatabase from typing import List from entities.PacketGroup import PacketGroup +from entities.PacketSignal import PacketSignal class NodeDbService: def __init__(self, dbStore): @@ -92,6 +93,30 @@ class PacketDbService: def __init__(self, dbStore): self.dbStore:AsyncDatabase = dbStore + async def findPacketsSignals(self, + after: float = -1, + before: float = -1, + nums: List[int] = []): + pipeline = [] + match = {} + if after != -1 or before != -1: + match["ts"] = {} + if after != -1: + match["ts"]["$gt"] = after + if before != -1: + match["ts"]["$lt"] = before + + if nums: + if type(nums) != list: + nums = [nums] + match["from"] = {"$in":nums} + + pipeline.append({"$match":match}) + collection = self.dbStore['packet'] + c = await collection.aggregate(pipeline) + l = await c.to_list() + return [PacketSignal(p) for p in l] + async def findPacketsAndGroupCount(self, after: float = -1, before: float = -1, diff --git a/entities/PacketSignal.py b/entities/PacketSignal.py new file mode 100644 index 0000000..bfccdfb --- /dev/null +++ b/entities/PacketSignal.py @@ -0,0 +1,6 @@ +__slots__ = ["from", "rx_snr", "rx_rssi", "ts", "hop_start", "hop_limit"] + +class PacketSignal: + def __init__(self, data): + for slot in __slots__: + setattr(self, slot, data.get(slot, None)) \ No newline at end of file diff --git a/webExtensions/packetEndpoint.py b/webExtensions/packetEndpoint.py index 4ec515d..bcb8178 100644 --- a/webExtensions/packetEndpoint.py +++ b/webExtensions/packetEndpoint.py @@ -26,4 +26,13 @@ class WebExtension: packetsPerNode:bool = Query(False), packetsSumNode:bool = Query(False)): gl = await self.core.dbService.findPacketsAndGroupCount(after, before, nums, portnums, packetsPerNode, packetsSumNode) + return gl + + @self.app.get(f"{self.core.context}/packet/signal") + @self.core.authManager.authRequest() + async def findPacketsAndGroupCount(request: Request, + after: float = Query(-1), + before: float = Query(-1), + nums: List[int] = Query([])): + gl = await self.core.dbService.findPacketsSignals(after, before, nums) return gl \ No newline at end of file