99import numpy as np
1010import signal
1111
12- logging .basicConfig (
13- level = logging .INFO ,
14- format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ,
15- force = True
16- )
12+ logger = logging .getLogger ('concore' )
13+ logger .addHandler (logging .NullHandler ())
1714
1815#these lines mute the noisy library
1916logging .getLogger ('matplotlib' ).setLevel (logging .WARNING )
@@ -53,10 +50,10 @@ def __init__(self, port_type, address, zmq_socket_type):
5350 # Bind or connect
5451 if self .port_type == "bind" :
5552 self .socket .bind (address )
56- logging .info (f"ZMQ Port bound to { address } " )
53+ logger .info (f"ZMQ Port bound to { address } " )
5754 else :
5855 self .socket .connect (address )
59- logging .info (f"ZMQ Port connected to { address } " )
56+ logger .info (f"ZMQ Port connected to { address } " )
6057
6158 def send_json_with_retry (self , message ):
6259 """Send JSON message with retries if timeout occurs."""
@@ -65,9 +62,9 @@ def send_json_with_retry(self, message):
6562 self .socket .send_json (message )
6663 return
6764 except zmq .Again :
68- logging .warning (f"Send timeout (attempt { attempt + 1 } /5)" )
65+ logger .warning (f"Send timeout (attempt { attempt + 1 } /5)" )
6966 time .sleep (0.5 )
70- logging .error ("Failed to send after retries." )
67+ logger .error ("Failed to send after retries." )
7168 return
7269
7370 def recv_json_with_retry (self ):
@@ -76,9 +73,9 @@ def recv_json_with_retry(self):
7673 try :
7774 return self .socket .recv_json ()
7875 except zmq .Again :
79- logging .warning (f"Receive timeout (attempt { attempt + 1 } /5)" )
76+ logger .warning (f"Receive timeout (attempt { attempt + 1 } /5)" )
8077 time .sleep (0.5 )
81- logging .error ("Failed to receive after retries." )
78+ logger .error ("Failed to receive after retries." )
8279 return None
8380
8481# Global ZeroMQ ports registry
@@ -94,20 +91,20 @@ def init_zmq_port(port_name, port_type, address, socket_type_str):
9491 socket_type_str (str): String representation of ZMQ socket type (e.g., "REQ", "REP", "PUB", "SUB").
9592 """
9693 if port_name in zmq_ports :
97- logging .info (f"ZMQ Port { port_name } already initialized." )
94+ logger .info (f"ZMQ Port { port_name } already initialized." )
9895 return # Avoid reinitialization
9996
10097 try :
10198 # Map socket type string to actual ZMQ constant (e.g., zmq.REQ, zmq.REP)
10299 zmq_socket_type = getattr (zmq , socket_type_str .upper ())
103100 zmq_ports [port_name ] = ZeroMQPort (port_type , address , zmq_socket_type )
104- logging .info (f"Initialized ZMQ port: { port_name } ({ socket_type_str } ) on { address } " )
101+ logger .info (f"Initialized ZMQ port: { port_name } ({ socket_type_str } ) on { address } " )
105102 except AttributeError :
106- logging .error (f"Error: Invalid ZMQ socket type string '{ socket_type_str } '." )
103+ logger .error (f"Error: Invalid ZMQ socket type string '{ socket_type_str } '." )
107104 except zmq .error .ZMQError as e :
108- logging .error (f"Error initializing ZMQ port { port_name } on { address } : { e } " )
105+ logger .error (f"Error initializing ZMQ port { port_name } on { address } : { e } " )
109106 except Exception as e :
110- logging .error (f"An unexpected error occurred during ZMQ port initialization for { port_name } : { e } " )
107+ logger .error (f"An unexpected error occurred during ZMQ port initialization for { port_name } : { e } " )
111108
112109def terminate_zmq ():
113110 """Clean up all ZMQ sockets and contexts before exit."""
@@ -127,7 +124,7 @@ def terminate_zmq():
127124 port .context .term ()
128125 print (f"Closed ZMQ port: { port_name } " )
129126 except Exception as e :
130- logging .error (f"Error while terminating ZMQ port { port .address } : { e } " )
127+ logger .error (f"Error while terminating ZMQ port { port .address } : { e } " )
131128 zmq_ports .clear ()
132129 _cleanup_in_progress = False
133130
@@ -242,9 +239,9 @@ def parse_params(sparams: str) -> dict:
242239 sparams = sparams [1 :- 1 ]
243240
244241 # Parse params using clean function instead of regex
245- logging .debug ("parsing sparams: " + sparams )
242+ logger .debug ("parsing sparams: " + sparams )
246243 params = parse_params (sparams )
247- logging .debug ("parsed params: " + str (params ))
244+ logger .debug ("parsed params: " + str (params ))
248245 else :
249246 params = dict ()
250247 else :
@@ -306,17 +303,17 @@ def read(port_identifier, name, initstr_val):
306303 return message [1 :]
307304 return message
308305 except zmq .error .ZMQError as e :
309- logging .error (f"ZMQ read error on port { port_identifier } (name: { name } ): { e } . Returning default." )
306+ logger .error (f"ZMQ read error on port { port_identifier } (name: { name } ): { e } . Returning default." )
310307 return default_return_val
311308 except Exception as e :
312- logging .error (f"Unexpected error during ZMQ read on port { port_identifier } (name: { name } ): { e } . Returning default." )
309+ logger .error (f"Unexpected error during ZMQ read on port { port_identifier } (name: { name } ): { e } . Returning default." )
313310 return default_return_val
314311
315312 # Case 2: File-based port
316313 try :
317314 file_port_num = int (port_identifier )
318315 except ValueError :
319- logging .error (f"Error: Invalid port identifier '{ port_identifier } ' for file operation. Must be integer or ZMQ name." )
316+ logger .error (f"Error: Invalid port identifier '{ port_identifier } ' for file operation. Must be integer or ZMQ name." )
320317 return default_return_val
321318
322319 time .sleep (delay )
@@ -330,7 +327,7 @@ def read(port_identifier, name, initstr_val):
330327 ins = str (initstr_val )
331328 s += ins # Update s to break unchanged() loop
332329 except Exception as e :
333- logging .error (f"Error reading { file_path } : { e } . Using default value." )
330+ logger .error (f"Error reading { file_path } : { e } . Using default value." )
334331 return default_return_val
335332
336333 # Retry logic if file is empty
@@ -342,12 +339,12 @@ def read(port_identifier, name, initstr_val):
342339 with open (file_path , "r" ) as infile :
343340 ins = infile .read ()
344341 except Exception as e :
345- logging .warning (f"Retry { attempts + 1 } : Error reading { file_path } - { e } " )
342+ logger .warning (f"Retry { attempts + 1 } : Error reading { file_path } - { e } " )
346343 attempts += 1
347344 retrycount += 1
348345
349346 if len (ins ) == 0 :
350- logging .error (f"Max retries reached for { file_path } , using default value." )
347+ logger .error (f"Max retries reached for { file_path } , using default value." )
351348 return default_return_val
352349
353350 s += ins
@@ -361,10 +358,10 @@ def read(port_identifier, name, initstr_val):
361358 simtime = max (simtime , current_simtime_from_file )
362359 return inval [1 :]
363360 else :
364- logging .warning (f"Warning: Unexpected data format in { file_path } : { ins } . Returning raw content or default." )
361+ logger .warning (f"Warning: Unexpected data format in { file_path } : { ins } . Returning raw content or default." )
365362 return inval
366363 except Exception as e :
367- logging .error (f"Error parsing content from { file_path } ('{ ins } '): { e } . Returning default." )
364+ logger .error (f"Error parsing content from { file_path } ('{ ins } '): { e } . Returning default." )
368365 return default_return_val
369366
370367
@@ -389,24 +386,24 @@ def write(port_identifier, name, val, delta=0):
389386 else :
390387 zmq_p .send_json_with_retry (zmq_val )
391388 except zmq .error .ZMQError as e :
392- logging .error (f"ZMQ write error on port { port_identifier } (name: { name } ): { e } " )
389+ logger .error (f"ZMQ write error on port { port_identifier } (name: { name } ): { e } " )
393390 except Exception as e :
394- logging .error (f"Unexpected error during ZMQ write on port { port_identifier } (name: { name } ): { e } " )
391+ logger .error (f"Unexpected error during ZMQ write on port { port_identifier } (name: { name } ): { e } " )
395392 return
396393
397394 # Case 2: File-based port
398395 try :
399396 file_port_num = int (port_identifier )
400397 file_path = os .path .join (outpath + str (file_port_num ), name )
401398 except ValueError :
402- logging .error (f"Error: Invalid port identifier '{ port_identifier } ' for file operation. Must be integer or ZMQ name." )
399+ logger .error (f"Error: Invalid port identifier '{ port_identifier } ' for file operation. Must be integer or ZMQ name." )
403400 return
404401
405402 # File writing rules
406403 if isinstance (val , str ):
407404 time .sleep (2 * delay ) # string writes wait longer
408405 elif not isinstance (val , list ):
409- logging .error (f"File write to { file_path } must have list or str value, got { type (val )} " )
406+ logger .error (f"File write to { file_path } must have list or str value, got { type (val )} " )
410407 return
411408
412409 try :
@@ -420,7 +417,7 @@ def write(port_identifier, name, val, delta=0):
420417 else :
421418 outfile .write (val )
422419 except Exception as e :
423- logging .error (f"Error writing to { file_path } : { e } " )
420+ logger .error (f"Error writing to { file_path } : { e } " )
424421
425422def initval (simtime_val_str ):
426423 """
@@ -436,12 +433,12 @@ def initval(simtime_val_str):
436433 simtime = first_element
437434 return val [1 :]
438435 else :
439- logging .error (f"Error: First element in initval string '{ simtime_val_str } ' is not a number. Using data part as is or empty." )
436+ logger .error (f"Error: First element in initval string '{ simtime_val_str } ' is not a number. Using data part as is or empty." )
440437 return val [1 :] if len (val ) > 1 else []
441438 else :
442- logging .error (f"Error: initval string '{ simtime_val_str } ' is not a list or is empty. Returning empty list." )
439+ logger .error (f"Error: initval string '{ simtime_val_str } ' is not a list or is empty. Returning empty list." )
443440 return []
444441
445442 except Exception as e :
446- logging .error (f"Error parsing simtime_val_str '{ simtime_val_str } ': { e } . Returning empty list." )
443+ logger .error (f"Error parsing simtime_val_str '{ simtime_val_str } ': { e } . Returning empty list." )
447444 return []
0 commit comments