From afe33ef3813dc918ee0319d4162f45a18271043b Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Sat, 10 Jan 2026 18:28:10 -0600 Subject: [PATCH] logging fix --- unified-worker/unified_worker.py | 54 ++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/unified-worker/unified_worker.py b/unified-worker/unified_worker.py index 6801115..3445abc 100644 --- a/unified-worker/unified_worker.py +++ b/unified-worker/unified_worker.py @@ -139,22 +139,31 @@ sqs = boto3.client('sqs', region_name=config.aws_region) s3 = boto3.client('s3', region_name=config.aws_region) ses = boto3.client('ses', region_name=config.aws_region) -# DynamoDB +# DynamoDB - initialized lazily dynamodb = boto3.resource('dynamodb', region_name=config.aws_region) DYNAMODB_AVAILABLE = False rules_table = None messages_table = None +_dynamodb_initialized = False -try: - rules_table = dynamodb.Table(config.rules_table) - messages_table = dynamodb.Table(config.messages_table) - # Test connection - rules_table.table_status - messages_table.table_status - DYNAMODB_AVAILABLE = True - log(f"DynamoDB connected: {config.rules_table}, {config.messages_table}") -except Exception as e: - log(f"Warning: DynamoDB not available: {e}", 'WARNING') +def init_dynamodb(): + """Initialize DynamoDB tables (called once from main)""" + global DYNAMODB_AVAILABLE, rules_table, messages_table, _dynamodb_initialized + + if _dynamodb_initialized: + return + _dynamodb_initialized = True + + try: + rules_table = dynamodb.Table(config.rules_table) + messages_table = dynamodb.Table(config.messages_table) + # Test connection + rules_table.table_status + messages_table.table_status + DYNAMODB_AVAILABLE = True + log(f"DynamoDB connected: {config.rules_table}, {config.messages_table}") + except Exception as e: + log(f"Warning: DynamoDB not available: {e}", 'WARNING') # ============================================ # SMTP CONNECTION POOL @@ -1268,15 +1277,20 @@ def start_health_server(worker: UnifiedWorker): # ENTRY POINT # ============================================ -# Global flag to prevent double execution -_worker_started = False - def main(): - global _worker_started - if _worker_started: - log("⚠ Worker already started, ignoring duplicate call", 'WARNING') - return - _worker_started = True + # Use a lock file to prevent double execution + import fcntl + lock_file = '/tmp/unified_worker.lock' + + try: + lock_fd = open(lock_file, 'w') + fcntl.flock(lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB) + except (IOError, OSError): + print("Another instance is already running, exiting.", flush=True) + sys.exit(0) + + # Initialize DynamoDB (only once) + init_dynamodb() worker = UnifiedWorker() @@ -1320,4 +1334,4 @@ def main(): worker.start() if __name__ == '__main__': - main() \ No newline at end of file + main()