|
|
@ -5,11 +5,14 @@ from entities.PacketGroup import PacketGroup |
|
|
from entities.PacketSignal import PacketSignal |
|
|
from entities.PacketSignal import PacketSignal |
|
|
|
|
|
|
|
|
class NodeDbService: |
|
|
class NodeDbService: |
|
|
def __init__(self, dbStore): |
|
|
def __init__(self, dbStore, core): |
|
|
self.dbStore:AsyncDatabase = dbStore |
|
|
self.dbStore:AsyncDatabase = dbStore |
|
|
|
|
|
self.core = core |
|
|
|
|
|
#self.core.defaultDeviceUUID |
|
|
|
|
|
|
|
|
async def listOfNodes(self): |
|
|
async def listOfNodes(self): |
|
|
pipeline = [ #ai slooop |
|
|
pipeline = [ #ai slooop |
|
|
|
|
|
{"$match": {"device_uuid": self.core.defaultDeviceUUID}}, |
|
|
# Сортировка для каждого num по убыванию ts |
|
|
# Сортировка для каждого num по убыванию ts |
|
|
{"$sort": {"num": 1, "ts": -1}}, |
|
|
{"$sort": {"num": 1, "ts": -1}}, |
|
|
# Группировка по num и взятие первого (последнего) документа |
|
|
# Группировка по num и взятие первого (последнего) документа |
|
|
@ -29,7 +32,7 @@ class NodeDbService: |
|
|
|
|
|
|
|
|
async def listOfDirectNodes(self): |
|
|
async def listOfDirectNodes(self): |
|
|
pipeline = [ #ai slooop |
|
|
pipeline = [ #ai slooop |
|
|
{"$match": {"hops_away": 0}}, # Фильтруем по списку |
|
|
{"$match": {"hops_away": 0, "device_uuid": self.core.defaultDeviceUUID}}, # Фильтруем по списку |
|
|
# Сортировка для каждого num по убыванию ts |
|
|
# Сортировка для каждого num по убыванию ts |
|
|
{"$sort": {"num": 1, "ts": -1}}, |
|
|
{"$sort": {"num": 1, "ts": -1}}, |
|
|
# Группировка по num и взятие первого (последнего) документа |
|
|
# Группировка по num и взятие первого (последнего) документа |
|
|
@ -50,14 +53,14 @@ class NodeDbService: |
|
|
async def oneNode(self, num: int): |
|
|
async def oneNode(self, num: int): |
|
|
collection = self.dbStore['node_info'] |
|
|
collection = self.dbStore['node_info'] |
|
|
c = await collection.find_one( |
|
|
c = await collection.find_one( |
|
|
{"num":int(num)}, |
|
|
{"num":int(num), "device_uuid": self.core.defaultDeviceUUID}, |
|
|
sort=[("ts", -1)] |
|
|
sort=[("ts", -1)] |
|
|
) |
|
|
) |
|
|
return c |
|
|
return c |
|
|
|
|
|
|
|
|
async def listOfSelectedNodes(self, nums: List[int]): |
|
|
async def listOfSelectedNodes(self, nums: List[int]): |
|
|
pipeline = [ |
|
|
pipeline = [ |
|
|
{"$match": {"num": {"$in": nums}}}, # Фильтруем по списку |
|
|
{"$match": {"num": {"$in": nums}, "device_uuid": self.core.defaultDeviceUUID}}, # Фильтруем по списку |
|
|
{"$sort": {"num": 1, "ts": -1}}, # Сортируем по num и ts (по убыванию) |
|
|
{"$sort": {"num": 1, "ts": -1}}, # Сортируем по num и ts (по убыванию) |
|
|
{ |
|
|
{ |
|
|
"$group": { |
|
|
"$group": { |
|
|
@ -74,7 +77,7 @@ class NodeDbService: |
|
|
|
|
|
|
|
|
async def listOfFindLikeName(self, long_name): |
|
|
async def listOfFindLikeName(self, long_name): |
|
|
pipeline = [ |
|
|
pipeline = [ |
|
|
{"$match": {"long_name": {"$regex":long_name ,'$options' : 'i'}}}, # Фильтруем по списку |
|
|
{"$match": {"long_name": {"$regex":long_name ,'$options' : 'i'}, "device_uuid": self.core.defaultDeviceUUID}}, # Фильтруем по списку |
|
|
{"$sort": {"num": 1, "ts": -1}}, # Сортируем по num и ts (по убыванию) |
|
|
{"$sort": {"num": 1, "ts": -1}}, # Сортируем по num и ts (по убыванию) |
|
|
{ |
|
|
{ |
|
|
"$group": { |
|
|
"$group": { |
|
|
@ -98,7 +101,7 @@ class PacketDbService: |
|
|
before: float = -1, |
|
|
before: float = -1, |
|
|
nums: List[int] = []): |
|
|
nums: List[int] = []): |
|
|
pipeline = [] |
|
|
pipeline = [] |
|
|
match = {} |
|
|
match = {"device_uuid": self.core.defaultDeviceUUID} |
|
|
if after != -1 or before != -1: |
|
|
if after != -1 or before != -1: |
|
|
match["ts"] = {} |
|
|
match["ts"] = {} |
|
|
if after != -1: |
|
|
if after != -1: |
|
|
@ -145,6 +148,7 @@ class PacketDbService: |
|
|
match["portnums"] = {"$in":portnums} |
|
|
match["portnums"] = {"$in":portnums} |
|
|
|
|
|
|
|
|
if match: |
|
|
if match: |
|
|
|
|
|
match.update({"device_uuid": self.core.defaultDeviceUUID}) |
|
|
pipeline.append({"$match":match}) |
|
|
pipeline.append({"$match":match}) |
|
|
|
|
|
|
|
|
#групировка по количеству на выхлопе _id номер портнума и count число его юзов |
|
|
#групировка по количеству на выхлопе _id номер портнума и count число его юзов |
|
|
|