MCPcopy
hub / github.com/jumpserver/jumpserver / generate

Method generate

apps/assets/utils/node.py:94–116  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

92
93 @timeit
94 def generate(self):
95 # 准备排序好的资产信息数据
96 infos = []
97 for node in self.nodes:
98 assets = self.nodekey_assetsid_mapper.get(node.key, set())
99 info = NodeAssetsInfo(key=node.key, assets_amount=0, assets=assets)
100 infos.append(info)
101 infos = sorted(infos, key=lambda i: [int(i) for i in i.key.split(':')])
102 # 这个守卫需要添加一下,避免最后一个无法出栈
103 guarder = NodeAssetsInfo(key='', assets_amount=0, assets=set())
104 infos.append(guarder)
105
106 stack = Stack()
107 for info in infos:
108 # 如果栈顶的不是这个节点的父祖节点,那么可以出栈了,可以计算资产数量了
109 while stack.top and not info.key.startswith(f'{stack.top.key}:'):
110 pop_info = stack.pop()
111 pop_info.assets_amount = len(pop_info.assets)
112 self.nodekey_assetsinfo_mapper[pop_info.key] = pop_info
113 if not stack.top:
114 continue
115 stack.top.assets.update(pop_info.assets)
116 stack.push(info)
117
118 def get_assets_by_key(self, key):
119 info = self.nodekey_assetsinfo_mapper[key]

Callers 5

check_node_assets_amountFunction · 0.95
test_itMethod · 0.45
gen_key_pairFunction · 0.45
ssh_key_genFunction · 0.45

Calls 6

pushMethod · 0.95
StackClass · 0.90
NodeAssetsInfoClass · 0.85
setFunction · 0.50
getMethod · 0.45
updateMethod · 0.45

Tested by 1

test_itMethod · 0.36