Browse Source

perPacketStats

main
gsd 4 months ago
parent
commit
577d61bb5f
  1. 27
      dbService.py
  2. 14
      entities/PacketGroup.py
  3. 6
      webExtensions/packetEndpoint.py

27
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):

14
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"])

6
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
Loading…
Cancel
Save