@@ -153,7 +153,7 @@ def identify(self):
153153 except Exception :
154154 conn .driver = None
155155 # Ensure registry reflects disconnected state
156- self ._clear_disconnected_registry (dev_id )
156+ self .registry_obj . clear_disconnected (dev_id )
157157 return None
158158 # Ensure a worker exists even if not identified yet; it will be IDN-gated
159159 if dev_id not in self .workers :
@@ -174,6 +174,39 @@ def identify(self):
174174 self .metrics .inc_identify_fail (dev_id )
175175 return conn .driver
176176
177+ # Backward-compat: simple probe loop used by legacy tests
178+ def check_status (self ):
179+ now = time .time ()
180+ for dev in self .devices :
181+ dev_id = dev .get ('id' )
182+ if not dev_id :
183+ continue
184+ drv = self .connections .get (dev_id )
185+ if drv is None :
186+ last_attempt = self .last_open_attempt .get (dev_id , 0.0 )
187+ if now - last_attempt >= 2.0 :
188+ self .last_open_attempt [dev_id ] = now
189+ new_drv = self .reconnect (dev_id )
190+ if new_drv :
191+ self .connections [dev_id ] = new_drv
192+ self .last_ok [dev_id ] = 0.0
193+ continue
194+ try :
195+ if hasattr (drv , 'identify' ):
196+ _ = drv .identify ()
197+ else :
198+ t = getattr (drv , 't' , None )
199+ if t :
200+ t .write_line ('*IDN?' )
201+ _ = t .read_until_reol (256 )
202+ except Exception :
203+ try :
204+ if hasattr (drv , 'close' ):
205+ drv .close ()
206+ except Exception :
207+ pass
208+ self .connections [dev_id ] = None
209+
177210
178211 def _update_registry (self , dev_id : str , key : str , value : Any , klass : str | None = None ):
179212 self .registry_obj .update (dev_id , key , value , klass )
@@ -187,39 +220,7 @@ def clear_device_registry(self, dev_id: str):
187220 def _clear_disconnected_registry (self , dev_id : str ):
188221 self .registry_obj .clear_disconnected (dev_id )
189222
190- def monitor_connections (self ):
191- print ("Starting connection monitor thread." )
192- while self .keep_running :
193- now = time .time ()
194- for dev in self .devices :
195- dev_id = dev .get ('id' )
196- if not dev_id :
197- continue
198- # Open or identify if needed; this will set up workers when IDN is available
199- self ._open_or_identify (dev )
200- # Run worker tick if exists
201- w = self .workers .get (dev_id )
202- if w :
203- # Inject latest test overrides if present
204- w .interval_override = self .dev_class_poll_interval .get (dev_id ) or None
205- if dev_id in self .last_probe_class :
206- w .last_probe_class = self .last_probe_class [dev_id ]
207- try :
208- w .run_once (now )
209- except RuntimeError as e :
210- if str (e ) == 'poll_empty' :
211- # Drop connection and rely on reconnect cadence
212- self .connections [dev_id ] = None
213- if dev_id in self .dev_conns :
214- self .dev_conns [dev_id ].driver = None
215- else :
216- raise
217- if now - self ._last_registry_log >= 5.0 :
218- self ._last_registry_log = now
219- try :
220- logger .debug ("Registry snapshot: %s" , json .dumps (self .registry , ensure_ascii = False ))
221- except Exception :
222- logger .debug ("Registry snapshot (repr): %r" , self .registry )
223+ # Removed legacy monitor and status helpers. Device threads handle cadence.
223224
224225 def _device_worker (self , dev_id : str ):
225226 while self .keep_running :
@@ -308,57 +309,3 @@ def stop(self):
308309 pass
309310 self .logger .info ("All connections closed." )
310311
311- def close_connections (self ):
312- for dev_id , drv in list (self .connections .items ()):
313- if drv :
314- try :
315- drv .close ()
316- logger .info ("Closed connection %s" , dev_id )
317- except Exception :
318- logger .exception ("Error closing %s" , dev_id )
319- self .connections [dev_id ] = None
320-
321- def check_status (self ):
322- print ("Checking status." )
323- now = time .time ()
324- for dev in self .devices :
325- dev_id = dev .get ('id' )
326- if not dev_id :
327- continue
328- drv = self .connections .get (dev_id )
329- if drv is None :
330- last_attempt = self .last_open_attempt .get (dev_id , 0.0 )
331- if now - last_attempt >= 2.0 :
332- self .last_open_attempt [dev_id ] = now
333- new_drv = self .reconnect (dev )
334- if new_drv :
335- print ("Opened connection to" , dev_id )
336- self .connections [dev_id ] = new_drv
337- self .last_ok [dev_id ] = 0.0
338- continue
339-
340- try :
341- ident = None
342- if hasattr (drv , 'identify' ):
343- ident = drv .identify ()
344- else :
345- # fallback: try to access transport
346- t = getattr (drv , 't' , None )
347- if t :
348- t .write_line ('*IDN?' )
349- ident = t .read_until_reol (256 )
350-
351- if ident :
352- self .last_ok [dev_id ] = now
353- self ._update_registry (dev_id , 'IDN' , ident )
354- logger .debug ("Probe OK %s -> %s" , dev_id , ident )
355- else :
356- logger .debug ("No response from %s on probe" , dev_id )
357-
358- except Exception as e :
359- logger .warning ("Connection error for %s: %s" , dev_id , e )
360- try :
361- drv .close ()
362- except Exception :
363- pass
364- self .connections [dev_id ] = None
0 commit comments