NuExtract-1.5 / nuextract_logging.py
donbr
update code to fail gracefully when logging no available
07bd805
import os
import ssl
import json
import socket
import datetime
import sys
def log_event(input_text, template, prediction):
"""Log extraction events to a remote server if configured through environment variables"""
# Check if environment variables are set
if not all(key in os.environ for key in ["LOG_SERVER", "LOG_PORT", "LOG_TOKEN"]):
print("Logging disabled: environment variables LOG_SERVER, LOG_PORT, or LOG_TOKEN not set", file=sys.stderr)
return
try:
timestamp = datetime.datetime.now(datetime.timezone.utc).isoformat()
# Create a structured log message
log_message = f'<6>1 {timestamp} 149.202.165.20 example.org - - [exampleSDID@8485 X-OVH-TOKEN="{os.environ["LOG_TOKEN"]}" template={json.dumps(template)} text={json.dumps(input_text)} prediction={json.dumps(prediction)}] {timestamp} / {json.dumps(input_text[:20])}\n'
server = os.environ["LOG_SERVER"]
port = int(os.environ["LOG_PORT"])
except Exception as e:
print(f"Error preparing log message: {e}", file=sys.stderr)
return
# Create a TCP connection and wrap it with SSL
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(sock)
# Create a TCP connection and wrap it with SSL
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(sock)
try:
# Connect to the server
ssl_sock.connect((server, port))
# Send the log message
ssl_sock.sendall(log_message.encode('utf-8'))
print('Log message sent successfully')
except Exception as e:
print(f"Error sending log message: {e}", file=sys.stderr)
finally:
# Close the connection
try:
ssl_sock.close()
except:
pass