From a04c576e0a79222c01647a87560ef1824a2be1e2 Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Fri, 15 Nov 2024 02:59:16 +0000 Subject: [PATCH] logging --- videoarchiver/enhanced_queue.py | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/videoarchiver/enhanced_queue.py b/videoarchiver/enhanced_queue.py index 1cd8e58..4b257aa 100644 --- a/videoarchiver/enhanced_queue.py +++ b/videoarchiver/enhanced_queue.py @@ -538,6 +538,60 @@ class EnhancedVideoQueueManager: logger.error(f"Error during cleanup: {str(e)}") raise CleanupError(f"Failed to clean up queue manager: {str(e)}") + def get_queue_status(self, guild_id: int) -> dict: + """Get current queue status and metrics for a guild + + Args: + guild_id: The ID of the guild to get status for + + Returns: + dict: Queue status including counts and metrics + """ + try: + # Count items for this guild + pending = len([item for item in self._queue if item.guild_id == guild_id]) + processing = len([item for item in self._processing.values() if item.guild_id == guild_id]) + completed = len([item for item in self._completed.values() if item.guild_id == guild_id]) + failed = len([item for item in self._failed.values() if item.guild_id == guild_id]) + + # Get metrics + metrics = { + "total_processed": self.metrics.total_processed, + "total_failed": self.metrics.total_failed, + "success_rate": self.metrics.success_rate, + "avg_processing_time": self.metrics.avg_processing_time, + "peak_memory_usage": self.metrics.peak_memory_usage, + "last_cleanup": self.metrics.last_cleanup.strftime("%Y-%m-%d %H:%M:%S"), + "errors_by_type": self.metrics.errors_by_type + } + + return { + "pending": pending, + "processing": processing, + "completed": completed, + "failed": failed, + "metrics": metrics + } + + except Exception as e: + logger.error(f"Error getting queue status: {str(e)}") + # Return empty status on error + return { + "pending": 0, + "processing": 0, + "completed": 0, + "failed": 0, + "metrics": { + "total_processed": 0, + "total_failed": 0, + "success_rate": 0.0, + "avg_processing_time": 0.0, + "peak_memory_usage": 0.0, + "last_cleanup": datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S"), + "errors_by_type": {} + } + } + async def clear_guild_queue(self, guild_id: int) -> int: """Clear all queue items for a specific guild