gotti_signal_gen / src /news_scraper /helpers /performance_logger.py
Papaflessas's picture
Deploy Signal Generator app
3fe0726
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}")