Spaces:
Running
Running
| import csv | |
| import os | |
| import logging | |
| from datetime import datetime | |
| logger = logging.getLogger(__name__) | |
| class PerformanceLogger: | |
| def __init__(self, filename="news_processing_performance.csv"): | |
| self.filename = filename | |
| self._initialize_csv() | |
| def _initialize_csv(self): | |
| """Initialize the CSV file with headers if it doesn't exist.""" | |
| if not os.path.exists(self.filename): | |
| try: | |
| with open(self.filename, mode='w', newline='', encoding='utf-8') as file: | |
| writer = csv.writer(file) | |
| headers = [ | |
| "timestamp", | |
| "ticker", | |
| "headline", | |
| "handler1_duration_sec", | |
| "handler2_duration_sec", | |
| "handler3_duration_sec", | |
| "handler4_duration_sec", | |
| "handler5_duration_sec", | |
| "marketaux_processing_times_sec" | |
| ] | |
| writer.writerow(headers) | |
| logger.info(f"[PERFORMANCE] Initialized log file: {self.filename}") | |
| except Exception as e: | |
| logger.error(f"[PERFORMANCE] Failed to initialize log file: {e}") | |
| def log_metrics(self, metrics: dict): | |
| """ | |
| Log a dictionary of metrics to the CSV file. | |
| Args: | |
| metrics (dict): Dictionary containing metric values. | |
| """ | |
| try: | |
| with open(self.filename, mode='a', newline='', encoding='utf-8') as file: | |
| writer = csv.writer(file) | |
| # Extract values with defaults | |
| row = [ | |
| datetime.now().strftime('%Y-%m-%d %H:%M:%S'), | |
| metrics.get('ticker', 'N/A'), | |
| metrics.get('headline', 'N/A'), | |
| f"{metrics.get('handler1_duration', 0):.4f}", | |
| f"{metrics.get('handler2_duration', 0):.4f}", | |
| f"{metrics.get('handler3_duration', 0):.4f}", | |
| f"{metrics.get('handler4_duration', 0):.4f}", | |
| f"{metrics.get('handler5_duration', 0):.4f}", | |
| str(metrics.get('marketaux_processing_times', [])) | |
| ] | |
| writer.writerow(row) | |
| logger.info(f"[PERFORMANCE] Logged metrics for {metrics.get('ticker', 'N/A')}") | |
| except Exception as e: | |
| logger.error(f"[PERFORMANCE] Failed to log metrics: {e}") | |