|
| 1 | +import json |
| 2 | +import os |
| 3 | +import sys |
| 4 | +import datetime |
| 5 | +import time |
| 6 | +import glob |
| 7 | + |
| 8 | +# Configuration from environment variables |
| 9 | +LOG_DIR = os.environ.get('LOG_DIR', '/logs') |
| 10 | +RETENTION_DAYS = int(os.environ.get('RETENTION_DAYS', '30')) |
| 11 | +CLEANUP_INTERVAL_HOURS = int(os.environ.get('CLEANUP_INTERVAL_HOURS', '1')) |
| 12 | + |
| 13 | +# Initialize last cleanup time |
| 14 | +last_cleanup_time = time.time() |
| 15 | + |
| 16 | +def perform_cleanup(): |
| 17 | + now = datetime.datetime.now(datetime.timezone.utc) |
| 18 | + cutoff_date = now - datetime.timedelta(days=RETENTION_DAYS) |
| 19 | + for service_folder in glob.glob(os.path.join(LOG_DIR, '*')): |
| 20 | + if os.path.isdir(service_folder): |
| 21 | + for log_file in glob.glob(os.path.join(service_folder, '*.log')): |
| 22 | + file_name = os.path.basename(log_file) |
| 23 | + try: |
| 24 | + file_date_str = file_name.split('.')[0] |
| 25 | + file_date = datetime.datetime.strptime(file_date_str, '%Y-%m-%d').replace(tzinfo=datetime.timezone.utc) |
| 26 | + if file_date < cutoff_date: |
| 27 | + os.remove(log_file) |
| 28 | + print(f"Deleted old log file: {log_file}", file=sys.stderr) |
| 29 | + except Exception as e: |
| 30 | + print(f"Error processing file {log_file}: {e}", file=sys.stderr) |
| 31 | + |
| 32 | +for line in sys.stdin: |
| 33 | + try: |
| 34 | + log_entry = json.loads(line) |
| 35 | + service_name = log_entry.get('ServiceName', 'unknown') |
| 36 | + start_utc = log_entry.get('StartUTC', None) |
| 37 | + if start_utc: |
| 38 | + log_date = datetime.datetime.fromisoformat(start_utc.replace('Z', '+00:00')).date() |
| 39 | + else: |
| 40 | + log_date = datetime.date.today() |
| 41 | + folder_path = os.path.join(LOG_DIR, service_name) |
| 42 | + os.makedirs(folder_path, exist_ok=True) |
| 43 | + file_name = f"{log_date.isoformat()}.log" |
| 44 | + file_path = os.path.join(folder_path, file_name) |
| 45 | + with open(file_path, 'a') as f: |
| 46 | + f.write(line) |
| 47 | + except json.JSONDecodeError: |
| 48 | + print(f"Invalid JSON: {line}", file=sys.stderr) |
| 49 | + except Exception as e: |
| 50 | + print(f"Error processing log entry: {e}", file=sys.stderr) |
| 51 | + |
| 52 | + # Check if it's time for cleanup |
| 53 | + current_time = time.time() |
| 54 | + if current_time > last_cleanup_time + CLEANUP_INTERVAL_HOURS * 3600: |
| 55 | + print("Performing cleanup...", file=sys.stderr) |
| 56 | + perform_cleanup() |
| 57 | + last_cleanup_time = current_time |
0 commit comments