# metrics_logger.py # # Imports from datetime import datetime, timezone # # Third-party Imports # # Local Imports from App_Function_Libraries.Metrics.logger_config import logger # ############################################################################################################ # # Functions: def log_counter(metric_name, labels=None, value=1): log_entry = { "event": metric_name, "type": "counter", "value": value, "labels": labels or {}, # datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). # FIXME "timestamp": datetime.now(timezone.utc).isoformat() + "Z" } logger.info("metric", extra=log_entry) def log_histogram(metric_name, value, labels=None): log_entry = { "event": metric_name, "type": "histogram", "value": value, "labels": labels or {}, # datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). # FIXME "timestamp": datetime.now(timezone.utc).isoformat() + "Z" } logger.info("metric", extra=log_entry) # # End of Functions ############################################################################################################ # # Prometheus # # metrics_logger.py (Prometheus version) # from prometheus_client import Counter, Histogram, start_http_server # import logging # from functools import wraps # import time # # # Initialize Prometheus metrics # VIDEOS_PROCESSED = Counter('videos_processed_total', 'Total number of videos processed', ['whisper_model', 'api_name']) # VIDEOS_FAILED = Counter('videos_failed_total', 'Total number of videos failed to process', ['whisper_model', 'api_name']) # TRANSCRIPTIONS_GENERATED = Counter('transcriptions_generated_total', 'Total number of transcriptions generated', ['whisper_model']) # SUMMARIES_GENERATED = Counter('summaries_generated_total', 'Total number of summaries generated', ['whisper_model']) # VIDEO_PROCESSING_TIME = Histogram('video_processing_time_seconds', 'Time spent processing videos', ['whisper_model', 'api_name']) # TOTAL_PROCESSING_TIME = Histogram('total_processing_time_seconds', 'Total time spent processing all videos', ['whisper_model', 'api_name']) # # def init_metrics_server(port=8000): # start_http_server(port) # # def log_counter(metric_name, labels=None, value=1): # if metric_name == "videos_processed_total": # VIDEOS_PROCESSED.labels(**(labels or {})).inc(value) # elif metric_name == "videos_failed_total": # VIDEOS_FAILED.labels(**(labels or {})).inc(value) # elif metric_name == "transcriptions_generated_total": # TRANSCRIPTIONS_GENERATED.labels(**(labels or {})).inc(value) # elif metric_name == "summaries_generated_total": # SUMMARIES_GENERATED.labels(**(labels or {})).inc(value) # # def log_histogram(metric_name, value, labels=None): # if metric_name == "video_processing_time_seconds": # VIDEO_PROCESSING_TIME.labels(**(labels or {})).observe(value) # elif metric_name == "total_processing_time_seconds": # TOTAL_PROCESSING_TIME.labels(**(labels or {})).observe(value) # # main.py or equivalent entry point # from metrics_logger import init_metrics_server # # # def main(): # # Start Prometheus metrics server on port 8000 # init_metrics_server(port=8000) # # # Initialize and launch your Gradio app # create_video_transcription_tab() # # # if __name__ == "__main__": # main() # prometheus.yml # scrape_configs: # - job_name: 'video_transcription_app' # static_configs: # - targets: ['localhost:8000'] # Replace with your application's host and port