NuExtract-1.5 / nuextract_logging.py
donbr
update code to fail gracefully when logging no available
07bd805
raw
history blame contribute delete
1.83 kB
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