@@ -621,26 +621,10 @@ def write2kg(self, ekg_sls_data: EKGSlsData, ekg_tbase_data: EKGTbaseData, teami
621
621
for edge in gbase_edges
622
622
]
623
623
624
- tbase_nodes = [
625
- {
626
- k : np .array (v ).astype (dtype = np .float32 ).tobytes () if k in ["name_vector" , "desc_vector" ] else v
627
- for k , v in node .dict ().items ()
628
- }
629
- for node in ekg_tbase_data .nodes
630
- ]
631
- tbase_edges = [edge .dict () for edge in ekg_tbase_data .edges ]
632
-
633
624
if do_save :
634
- # gb_node_result = self.gb.add_nodes(gbase_nodes)
635
- # gb_node_result = [self.gb.add_node(node) for node in gbase_nodes]
636
625
node_result = self .add_nodes (gbase_nodes , teamid )
637
626
edge_result = self .add_edges (gbase_edges , teamid )
638
627
logger .info (f"{ node_result } \n { edge_result } " )
639
- # gb_edge_result = self.gb.add_edges(gbase_edges)
640
- # gb_edge_result = [self.gb.add_edge(edge) for edge in gbase_edges]
641
- # tb_node_result = self.tb.insert_data_hash(tbase_nodes, key="node_id", need_etime=False)
642
- # tb_edge_result = self.tb.insert_data_hash(tbase_edges, key="edge_id", need_etime=False)
643
- # logger.info(f"{gb_node_result}\n{gb_edge_result}\n{tb_node_result}\n{tb_edge_result}")
644
628
645
629
return Graph (nodes = gbase_nodes , edges = gbase_edges , paths = [])
646
630
@@ -649,17 +633,26 @@ def returndsl(self, graph_datas_by_path: dict, intents: List[str], ) -> dict:
649
633
res = {'dsl' : '' , 'details' : {}, 'intent_node_list' : intents }
650
634
651
635
merge_dsl_nodes , merge_dsl_edges = [], []
636
+ merge_gbase_nodes , merge_gbase_edges = [], []
652
637
id_sets = set ()
638
+ gid_sets = set ()
653
639
for path_id , graph_datas in graph_datas_by_path .items ():
654
640
res ['details' ][path_id ] = {
655
641
'dsl' : graph_datas ["dsl_graph" ],
656
- 'sls' : graph_datas ["sls_graph" ]
642
+ 'sls' : graph_datas ["sls_graph" ],
657
643
}
658
644
merge_dsl_nodes .extend ([node for node in graph_datas ["dsl_graph" ].nodes if node .id not in id_sets ])
659
645
id_sets .update ([i .id for i in graph_datas ["dsl_graph" ].nodes ])
660
646
merge_dsl_edges .extend ([edge for edge in graph_datas ["dsl_graph" ].edges if edge .id not in id_sets ])
661
647
id_sets .update ([i .id for i in graph_datas ["dsl_graph" ].edges ])
648
+
649
+ merge_gbase_nodes .extend ([node for node in graph_datas ["graph" ].nodes if node .id not in gid_sets ])
650
+ gid_sets .update ([i .id for i in graph_datas ["graph" ].nodes ])
651
+ merge_gbase_edges .extend ([edge for edge in graph_datas ["graph" ].edges if f"{ edge .start_id } __{ edge .end_id } " not in gid_sets ])
652
+ gid_sets .update ([f"{ i .start_id } __{ i .end_id } " for i in graph_datas ["graph" ].edges ])
653
+
662
654
res ["dsl" ] = {"nodes" : merge_dsl_nodes , "edges" : merge_dsl_edges }
655
+ res ["graph" ] = Graph (nodes = merge_gbase_nodes , edges = merge_gbase_edges , paths = [])
663
656
return res
664
657
665
658
def get_intents (self , alarm_list : list [dict ], ) -> EKGIntentResp :
@@ -814,15 +807,12 @@ def get_md5(s):
814
807
}
815
808
816
809
nodes , edges = [], []
817
- schedule_id = ''
810
+ # schedule_id = ''
818
811
for node in ekg_sls_data .nodes :
819
812
# 需要注意下 dsl的id md编码
820
813
nodes .append (
821
- YuqueDslNodeData (id = node .id , type = type_dict .get (node .type .split ("opsgptkg_" )[- 1 ]), label = node .description )
814
+ YuqueDslNodeData (id = f"ekg_node: { node .type } : { node . id } " , type = type_dict .get (node .type .split ("opsgptkg_" )[- 1 ]), label = node .description )
822
815
)
823
- # 记录 schedule id 用于添加意图节点的边
824
- if node .type .split ("opsgptkg_" )[- 1 ] == 'schedule' :
825
- schedule_id = node .id
826
816
827
817
# 添加意图节点
828
818
# 需要记录哪些是被添加过的
@@ -838,7 +828,7 @@ def get_md5(s):
838
828
839
829
nodes .append (
840
830
YuqueDslNodeData (
841
- id = node . id , type = 'display' ,
831
+ id = dsl_pid , type = 'display' ,
842
832
label = intent_names_dict .get (dsl_pid , pid ),)
843
833
)
844
834
added_intent .add (dsl_pid )
@@ -865,35 +855,17 @@ def get_md5(s):
865
855
added_intent .add (intent_id )
866
856
867
857
for edge in ekg_sls_data .edges :
858
+ start_type , end_type = edge .type .split ("_" )[2 :]
868
859
edges .append (
869
860
YuqueDslEdgeData (
870
- id = f'{ edge .start_id } ___{ edge .end_id } ' ,
871
- source = edge .start_id ,
872
- target = edge .end_id ,
861
+ id = f'{ start_type } : { edge .start_id } ___{ end_type } : { edge .end_id } ' ,
862
+ source = f" { start_type } : { edge .start_id } " ,
863
+ target = f" { end_type } : { edge .end_id } " ,
873
864
label = ''
874
865
)
875
866
)
876
-
877
- # 添加意图边
867
+ # # 添加意图边
878
868
added_edges = set ()
879
- for pid in pnode_ids :
880
- # 处理意图节点展示样式
881
- dsl_pid = get_md5 (pid )
882
- dsl_pid = f'ekg_node:{ teamid } :intent:{ dsl_pid } '
883
-
884
- # 处理意图节点展示样式
885
- edge_id = f'{ dsl_pid } ___{ schedule_id } '
886
- if edge_id not in added_edges :
887
- edges .append (
888
- YuqueDslEdgeData (
889
- id = edge_id ,
890
- source = dsl_pid ,
891
- target = schedule_id ,
892
- label = ''
893
- )
894
- )
895
- added_edges .add (edge_id )
896
-
897
869
for intent_list in all_intents :
898
870
for idx in range (len (intent_list [0 :- 1 ])):
899
871
if 'SRE_Agent' in intent_list [idx ]:
@@ -907,14 +879,14 @@ def get_md5(s):
907
879
908
880
end_id = get_md5 (intent_list [idx + 1 ])
909
881
end_id = f'ekg_node:{ teamid } :intent:{ end_id } '
910
- edge_id = f'{ start_id } ___ { end_id } '
882
+ edge_id = f'intent: { start_id } ___intent: { end_id } '
911
883
912
884
if edge_id not in added_edges :
913
885
edges .append (
914
886
YuqueDslEdgeData (
915
887
id = edge_id ,
916
- source = start_id ,
917
- target = end_id ,
888
+ source = f"intent: { start_id } " ,
889
+ target = f"intent: { end_id } " ,
918
890
label = ''
919
891
)
920
892
)
@@ -1081,49 +1053,3 @@ def _update_new_attr_for_edges(self, edges: List[GEdge], teamid: str, teamids_by
1081
1053
edge .attributes .pop ("@timestamp" )
1082
1054
edge .attributes .pop ("extra" )
1083
1055
return edges
1084
-
1085
-
1086
-
1087
- def get_intent_by_alarm (self , alarm : dict , ) -> EKGIntentResp :
1088
- '''according content search intent'''
1089
- import requests
1090
- error_type = alarm .get ('errorType' , '' )
1091
- title = alarm .get ('title' , '' )
1092
- content = alarm .get ('content' , '' )
1093
- biz_code = alarm .get ('bizCode' , '' )
1094
-
1095
- if not error_type or not title or not content or not biz_code :
1096
- return None , None
1097
-
1098
- alarm = {
1099
- 'type' : 'ANTEMC_DINGTALK' ,
1100
- 'user_input' : {
1101
- 'bizCode' : biz_code ,
1102
- 'title' : title ,
1103
- 'content' : content ,
1104
- 'execute_type' : 'gql' ,
1105
- 'errorType' : error_type
1106
- }
1107
- }
1108
-
1109
- body = {
1110
- 'features' : {
1111
- 'query' : alarm
1112
- }
1113
- }
1114
- intent_url = 'https://paiplusinferencepre.alipay.com/inference/ff998e48456308a9_EKG_route/0.1'
1115
- headers = {
1116
- 'Content-Type' : 'application/json;charset=utf-8' ,
1117
- 'MPS-app-name' : 'test' ,
1118
- 'MPS-http-version' : '1.0'
1119
- }
1120
- ans = requests .post (intent_url , json = body , headers = headers )
1121
-
1122
- ans_json = ans .json ()
1123
- output = ans_json .get ('resultMap' ).get ('output' )
1124
- logger .debug (f"{ body } " )
1125
- logger .debug (f"{ output } " )
1126
- output_json = json .loads (output )
1127
- res = output_json [- 1 ]
1128
- all_intent = output_json
1129
- return res , all_intent
0 commit comments