@@ -56,47 +56,96 @@ def get_db_connection(mainnet=False):
5656 print (f"❌ Failed to connect to DB: { e } " )
5757 continue
5858
59- for ka_label in errors :
60- row = {
61- 'node_name' : node_name ,
62- 'blockchain_id' : blockchain_name ,
63- 'ka_label' : ka_label ,
64- 'publish_error' : None ,
65- 'query_error' : None ,
66- 'publisher_get_error' : None ,
67- 'non_publisher_get_error' : None ,
68- 'time_stamp' : errors [ka_label ].get ('time_stamp' ) if isinstance (errors [ka_label ], dict ) else None ,
69- }
70-
71- label = ka_label .lower ()
72- if 'publish' in label :
73- row ['publish_error' ] = ka_label
74- elif 'query' in label :
75- row ['query_error' ] = ka_label
76- elif 'local get' in label :
77- row ['publisher_get_error' ] = ka_label
78- elif 'get' in label :
79- row ['non_publisher_get_error' ] = ka_label
80-
81- insert_query = sql .SQL (f"""
82- INSERT INTO { sql .Identifier (table_name ).string } (
83- node_name, blockchain_id, ka_label,
84- publish_error, query_error,
85- publisher_get_error, non_publisher_get_error,
86- time_stamp
87- ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
88- """ )
89-
90- try :
91- cursor .execute (insert_query , (
92- row ['node_name' ], row ['blockchain_id' ], row ['ka_label' ],
93- row ['publish_error' ], row ['query_error' ],
94- row ['publisher_get_error' ], row ['non_publisher_get_error' ],
95- row ['time_stamp' ]
96- ))
97- print (f"✅ Inserted KA { ka_label } for { node_name } " )
98- except Exception as e :
99- print (f"❌ Failed to insert KA { ka_label } : { e } " )
59+ for attempt_key , attempt_data in errors .items ():
60+ # Handle both old and new error formats
61+ if isinstance (attempt_data , dict ) and 'ka_label' in attempt_data :
62+ # New format with structured error data per attempt
63+ ka_label = attempt_data .get ('ka_label' , 'Unknown KA' )
64+ attempt_number = attempt_data .get ('attempt' , 1 )
65+ publish_error = attempt_data .get ('publish_error' )
66+ query_error = attempt_data .get ('query_error' )
67+ publisher_get_error = attempt_data .get ('publisher_get_error' )
68+ non_publisher_get_error = attempt_data .get ('non_publisher_get_error' )
69+ time_stamp = attempt_data .get ('time_stamp' )
70+
71+ # Only insert if there's at least one error
72+ if any ([publish_error , query_error , publisher_get_error , non_publisher_get_error ]):
73+ row = {
74+ 'node_name' : node_name ,
75+ 'blockchain_id' : blockchain_name ,
76+ 'ka_label' : ka_label ,
77+ 'publish_error' : publish_error ,
78+ 'query_error' : query_error ,
79+ 'publisher_get_error' : publisher_get_error ,
80+ 'non_publisher_get_error' : non_publisher_get_error ,
81+ 'time_stamp' : time_stamp ,
82+ }
83+
84+ insert_query = sql .SQL (f"""
85+ INSERT INTO { sql .Identifier (table_name ).string } (
86+ node_name, blockchain_id, ka_label,
87+ publish_error, query_error,
88+ publisher_get_error, non_publisher_get_error,
89+ time_stamp
90+ ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
91+ """ )
92+
93+ try :
94+ cursor .execute (insert_query , (
95+ row ['node_name' ], row ['blockchain_id' ], row ['ka_label' ],
96+ row ['publish_error' ], row ['query_error' ],
97+ row ['publisher_get_error' ], row ['non_publisher_get_error' ],
98+ row ['time_stamp' ]
99+ ))
100+ print (f"✅ Inserted { ka_label } (attempt { attempt_number } ) for { node_name } " )
101+ except Exception as e :
102+ print (f"❌ Failed to insert { ka_label } (attempt { attempt_number } ): { e } " )
103+ else :
104+ # Old format - simple count (backward compatibility)
105+ ka_label = attempt_key
106+ error_message = attempt_data if isinstance (attempt_data , str ) else str (attempt_data )
107+
108+ row = {
109+ 'node_name' : node_name ,
110+ 'blockchain_id' : blockchain_name ,
111+ 'ka_label' : ka_label ,
112+ 'publish_error' : None ,
113+ 'query_error' : None ,
114+ 'publisher_get_error' : None ,
115+ 'non_publisher_get_error' : None ,
116+ 'time_stamp' : None ,
117+ }
118+
119+ # Try to determine error type from the key or message
120+ label = attempt_key .lower ()
121+ if 'publish' in label :
122+ row ['publish_error' ] = error_message
123+ elif 'query' in label :
124+ row ['query_error' ] = error_message
125+ elif 'local get' in label :
126+ row ['publisher_get_error' ] = error_message
127+ elif 'get' in label :
128+ row ['non_publisher_get_error' ] = error_message
129+
130+ insert_query = sql .SQL (f"""
131+ INSERT INTO { sql .Identifier (table_name ).string } (
132+ node_name, blockchain_id, ka_label,
133+ publish_error, query_error,
134+ publisher_get_error, non_publisher_get_error,
135+ time_stamp
136+ ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
137+ """ )
138+
139+ try :
140+ cursor .execute (insert_query , (
141+ row ['node_name' ], row ['blockchain_id' ], row ['ka_label' ],
142+ row ['publish_error' ], row ['query_error' ],
143+ row ['publisher_get_error' ], row ['non_publisher_get_error' ],
144+ row ['time_stamp' ]
145+ ))
146+ print (f"✅ Inserted { ka_label } for { node_name } (old format)" )
147+ except Exception as e :
148+ print (f"❌ Failed to insert { ka_label } : { e } " )
100149
101150 try :
102151 conn .commit ()
0 commit comments