diff --git a/dbService.py b/dbService.py index 4154ec3..bb21fc9 100644 --- a/dbService.py +++ b/dbService.py @@ -1,6 +1,7 @@ from typing import List from pymongo.asynchronous.database import AsyncDatabase from typing import List +from entities.PacketGroup import PacketGroup class NodeDbService: def __init__(self, dbStore): @@ -95,7 +96,9 @@ class PacketDbService: after: float = -1, before: float = -1, nums: List[int] = [], - portnums: List[int] = []): + portnums: List[int] = [], + packetsPerNode = False, + packetsSumNode = False): pipeline = [] match = {} @@ -120,12 +123,30 @@ class PacketDbService: pipeline.append({"$match":match}) #групировка по количеству на выхлопе _id номер портнума и count число его юзов - pipeline.append({"$group": {"_id": "$portnum", "count": {"$sum": 1}}}) + groupPipe = { + "$group": + {"_id": "$portnum", "count": {"$sum": 1}} + } + + if packetsPerNode: + groupPipe["$group"]["_id"] = { + "portnum": "$portnum", + "from": "$from" + } + + if packetsSumNode: + groupPipe["$group"]["_id"] = "$from" + + print(packetsPerNode, packetsSumNode) + pipeline.append(groupPipe) + print(pipeline) ###print(pipeline) collection = self.dbStore['packet'] c = await collection.aggregate(pipeline) - return await c.to_list() + l = await c.to_list() + print(l[0]) + return [PacketGroup(p, packetsPerNode, packetsSumNode) for p in l] class DbService(NodeDbService, PacketDbService): def __init__(self, dbStore): diff --git a/entities/PacketGroup.py b/entities/PacketGroup.py new file mode 100644 index 0000000..92dd764 --- /dev/null +++ b/entities/PacketGroup.py @@ -0,0 +1,14 @@ +class PacketGroup: + def __init__(self, data, p = False, s = False): + self.count = data.get("count", 0) + + if p: + self.type = "perNode" + setattr(self, "portnum", data["_id"].get("portnum", 0)) + setattr(self, "from", data["_id"].get("from", 0)) + elif s: + self.type = "perSumNode" + setattr(self, "from", data.get("_id", 0)) + else: + self.type = "perPortNum" + setattr(self, "portnum", data["_id"]) \ No newline at end of file diff --git a/webExtensions/packetEndpoint.py b/webExtensions/packetEndpoint.py index d2d9b5a..4ec515d 100644 --- a/webExtensions/packetEndpoint.py +++ b/webExtensions/packetEndpoint.py @@ -22,6 +22,8 @@ class WebExtension: after: float = Query(-1), before: float = Query(-1), nums: List[int] = Query([]), - portnums: List[int] = Query([])): - gl = await self.core.dbService.findPacketsAndGroupCount(after, before, nums, portnums) + portnums: List[int] = Query([]), + packetsPerNode:bool = Query(False), + packetsSumNode:bool = Query(False)): + gl = await self.core.dbService.findPacketsAndGroupCount(after, before, nums, portnums, packetsPerNode, packetsSumNode) return gl \ No newline at end of file