Browse Source

signal backend

main
gsd 4 months ago
parent
commit
5249be2ea8
  1. 25
      dbService.py
  2. 6
      entities/PacketSignal.py
  3. 9
      webExtensions/packetEndpoint.py

25
dbService.py

@ -2,6 +2,7 @@ from typing import List
from pymongo.asynchronous.database import AsyncDatabase from pymongo.asynchronous.database import AsyncDatabase
from typing import List from typing import List
from entities.PacketGroup import PacketGroup from entities.PacketGroup import PacketGroup
from entities.PacketSignal import PacketSignal
class NodeDbService: class NodeDbService:
def __init__(self, dbStore): def __init__(self, dbStore):
@ -92,6 +93,30 @@ class PacketDbService:
def __init__(self, dbStore): def __init__(self, dbStore):
self.dbStore:AsyncDatabase = 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, async def findPacketsAndGroupCount(self,
after: float = -1, after: float = -1,
before: float = -1, before: float = -1,

6
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))

9
webExtensions/packetEndpoint.py

@ -26,4 +26,13 @@ class WebExtension:
packetsPerNode:bool = Query(False), packetsPerNode:bool = Query(False),
packetsSumNode:bool = Query(False)): packetsSumNode:bool = Query(False)):
gl = await self.core.dbService.findPacketsAndGroupCount(after, before, nums, portnums, packetsPerNode, packetsSumNode) 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 return gl
Loading…
Cancel
Save