Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-17 07:50:55

0001 #!/usr/bin/env python3
0002 """
0003 Simple client for EICrecon managed PODIO processor.
0004 Submits a file processing request and listens for a response.
0005 """
0006 
0007 import zmq
0008 import json
0009 import sys
0010 import argparse
0011 import time
0012 from pathlib import Path
0013 
0014 
0015 def main():
0016     parser = argparse.ArgumentParser(description='Submit file to EICrecon managed PODIO processor')
0017     parser.add_argument('input_file', help='Input file path')
0018     parser.add_argument('output_file', help='Output file path')
0019     parser.add_argument('--socket', default='/tmp/eicrecon_managed.sock',
0020                        help='Socket path (default: /tmp/eicrecon_managed.sock)')
0021     parser.add_argument('--timeout', type=int, default=300,
0022                        help='Timeout in seconds (default: 300)')
0023 
0024     args = parser.parse_args()
0025 
0026     # Validate input file exists
0027     if not Path(args.input_file).exists():
0028         print(f"Error: Input file '{args.input_file}' does not exist")
0029         sys.exit(1)
0030 
0031     # Create ZeroMQ context and socket
0032     context = zmq.Context()
0033     socket = context.socket(zmq.REQ)
0034 
0035     try:
0036         # Connect to the managed processor
0037         socket_address = f"ipc://{args.socket}"
0038         print(f"Connecting to {socket_address}...")
0039         socket.connect(socket_address)
0040 
0041         # Set socket timeout
0042         socket.setsockopt(zmq.RCVTIMEO, args.timeout * 1000)  # Convert to milliseconds
0043         socket.setsockopt(zmq.SNDTIMEO, 5000)  # 5 second send timeout
0044 
0045         # Prepare request
0046         request = {
0047             "input_file": str(Path(args.input_file).absolute()),
0048             "output_file": str(Path(args.output_file).absolute())
0049         }
0050 
0051         print(f"Submitting request:")
0052         print(f"  Input:  {request['input_file']}")
0053         print(f"  Output: {request['output_file']}")
0054 
0055         # Send request
0056         socket.send_string(json.dumps(request))
0057 
0058         # Wait for single response
0059         start_time = time.time()
0060         print("Waiting for processing to complete...")
0061 
0062         try:
0063             # Receive response
0064             response_str = socket.recv_string()
0065             response = json.loads(response_str)
0066 
0067             elapsed = time.time() - start_time
0068             print(f"\n[{elapsed:.1f}s] Response received:")
0069             print(f"  Status: {response.get('status', 'unknown')}")
0070 
0071             if 'message' in response:
0072                 print(f"  Message: {response['message']}")
0073 
0074             if 'events_processed' in response:
0075                 print(f"  Events processed: {response['events_processed']}")
0076 
0077             # Check final status
0078             status = response.get('status', '')
0079             if status == 'completed':
0080                 print(f"\n✓ Processing completed successfully!")
0081                 print(f"  Total time: {elapsed:.1f}s")
0082                 print(f"  Output file: {response.get('output_file', args.output_file)}")
0083             elif status == 'error':
0084                 print(f"\n✗ Processing failed!")
0085                 print(f"  Error: {response.get('message', 'Unknown error')}")
0086                 sys.exit(1)
0087             else:
0088                 print(f"\n? Unexpected status: {status}")
0089                 sys.exit(1)
0090 
0091         except zmq.Again:
0092             print(f"\nTimeout after {args.timeout} seconds")
0093             sys.exit(1)
0094         except KeyboardInterrupt:
0095             print(f"\nInterrupted by user")
0096             sys.exit(1)
0097         except json.JSONDecodeError as e:
0098             print(f"\nError parsing response: {e}")
0099             print(f"Raw response: {response_str}")
0100             sys.exit(1)
0101 
0102     except zmq.ZMQError as e:
0103         print(f"ZMQ Error: {e}")
0104         sys.exit(1)
0105     except Exception as e:
0106         print(f"Unexpected error: {e}")
0107         sys.exit(1)
0108     finally:
0109         socket.close()
0110         context.term()
0111 
0112 
0113 if __name__ == "__main__":
0114     main()