|
|
|
@ -76,9 +76,9 @@ class PacketDbService(MultiDeviceDbSupport): |
|
|
|
def __init__(self, dbStore, core): |
|
|
|
super().__init__(dbStore, core) |
|
|
|
|
|
|
|
async def findLastPackets(self, nums: List[int] = [], portnums: List[int] = []): |
|
|
|
async def findLastPackets(self, nums: List[int] = [], portnums: List[int] = [], devices = []): |
|
|
|
pipeline = [] |
|
|
|
match = {} |
|
|
|
match = {"$or": self.deviceHash2Match(devices)} |
|
|
|
|
|
|
|
if nums: |
|
|
|
match["from"] = {"$in": nums} |
|
|
|
@ -194,11 +194,11 @@ class NodeDbService(PacketDbService, MultiDeviceDbSupport): |
|
|
|
PacketDbService.__init__(self, dbStore, core) |
|
|
|
MultiDeviceDbSupport.__init__(self, dbStore, core) |
|
|
|
|
|
|
|
async def fillNodeFromPacketCollection(self, l): |
|
|
|
async def fillNodeFromPacketCollection(self, l, devices = []): |
|
|
|
nums = [node.get("num", 0) for node in l] |
|
|
|
|
|
|
|
#ищем сначала ноды с позицией 3 портнум |
|
|
|
packet_pos_nodes = await self.findLastPackets(nums, [3])#### |
|
|
|
packet_pos_nodes = await self.findLastPackets(nums, [3], devices)#### |
|
|
|
packet_pos_nodes_dict = {}### |
|
|
|
for packet in packet_pos_nodes: |
|
|
|
packet_pos_nodes_dict[packet.get("from")] = packet |
|
|
|
@ -206,7 +206,7 @@ class NodeDbService(PacketDbService, MultiDeviceDbSupport): |
|
|
|
|
|
|
|
#смотрим какие пакеты от нод имеют позицию, и делаем список нод где нет ее |
|
|
|
nums_without_pos = [fr0m for fr0m in nums if fr0m not in nums_with_pos] |
|
|
|
packet_without_pos = await self.findLastPackets(nums_without_pos, [])#### |
|
|
|
packet_without_pos = await self.findLastPackets(nums_without_pos, [], devices)#### |
|
|
|
packet_without_pos_dict = {} |
|
|
|
for packet in packet_without_pos: |
|
|
|
packet_without_pos_dict[packet.get("from")] = packet |
|
|
|
@ -262,7 +262,7 @@ class NodeDbService(PacketDbService, MultiDeviceDbSupport): |
|
|
|
collection = self.dbStore['node_info'] |
|
|
|
c = await collection.aggregate(pipeline) |
|
|
|
l = await c.to_list() |
|
|
|
return await self.fillNodeFromPacketCollection(l) |
|
|
|
return await self.fillNodeFromPacketCollection(l, devices) |
|
|
|
|
|
|
|
async def listOfDirectNodes(self, devices = []): |
|
|
|
pipeline = [ #ai slooop |
|
|
|
@ -283,7 +283,7 @@ class NodeDbService(PacketDbService, MultiDeviceDbSupport): |
|
|
|
collection = self.dbStore['node_info'] |
|
|
|
c = await collection.aggregate(pipeline) |
|
|
|
l = await c.to_list() |
|
|
|
return await self.fillNodeFromPacketCollection(l) |
|
|
|
return await self.fillNodeFromPacketCollection(l, devices) |
|
|
|
|
|
|
|
async def oneNode(self, num: int, devices = []): |
|
|
|
collection = self.dbStore['node_info'] |
|
|
|
@ -291,7 +291,7 @@ class NodeDbService(PacketDbService, MultiDeviceDbSupport): |
|
|
|
{"num":int(num), "$or": self.deviceHash2Match(devices)}, |
|
|
|
sort=[("ts", -1)] |
|
|
|
) |
|
|
|
l = await self.fillNodeFromPacketCollection([c]) |
|
|
|
l = await self.fillNodeFromPacketCollection([c], devices) |
|
|
|
return l[0] if l.__len__() > 0 else None |
|
|
|
|
|
|
|
async def listOfSelectedNodes(self, nums: List[int], devices = []): |
|
|
|
@ -310,7 +310,7 @@ class NodeDbService(PacketDbService, MultiDeviceDbSupport): |
|
|
|
collection = self.dbStore['node_info'] |
|
|
|
c = await collection.aggregate(pipeline) |
|
|
|
l = await c.to_list() |
|
|
|
return await self.fillNodeFromPacketCollection(l) |
|
|
|
return await self.fillNodeFromPacketCollection(l, devices) |
|
|
|
|
|
|
|
async def listOfFindLikeName(self, long_name, devices = []): |
|
|
|
pipeline = [ |
|
|
|
|