diff --git a/backend/igny8_core/ai/tasks.py b/backend/igny8_core/ai/tasks.py index f34a11da..3c5fbd02 100644 --- a/backend/igny8_core/ai/tasks.py +++ b/backend/igny8_core/ai/tasks.py @@ -185,6 +185,8 @@ def process_image_generation_queue(self, image_ids: list, account_id: int = None image_format = config.get('image_format', 'webp') desktop_enabled = config.get('desktop_enabled', True) mobile_enabled = config.get('mobile_enabled', True) + # Determine featured image size based on provider + featured_image_size = '1280x832' if provider == 'runware' else '1024x1024' logger.info(f"[process_image_generation_queue] Settings loaded:") logger.info(f" - Provider: {provider}") @@ -455,11 +457,14 @@ def process_image_generation_queue(self, image_ids: list, account_id: int = None } ) + # Use featured size for featured images, default for others + image_size = featured_image_size if image.image_type == 'featured' else '1024x1024' + result = ai_core.generate_image( prompt=formatted_prompt, provider=provider, model=model, - size='1024x1024', + size=image_size, api_key=api_key, negative_prompt=negative_prompt, function_name='generate_images_from_prompts' diff --git a/test_cursor_performance.py b/test_cursor_performance.py new file mode 100644 index 00000000..af99ddfb --- /dev/null +++ b/test_cursor_performance.py @@ -0,0 +1,231 @@ +""" +Cursor Performance Test Script +Tests system resources and Cursor IDE performance on Windows desktop environment. +""" +import psutil +import time +import json +import sys +from datetime import datetime +from pathlib import Path + + +def get_system_resources(): + """Get current system resource usage""" + cpu_percent = psutil.cpu_percent(interval=1) + cpu_count = psutil.cpu_count() + cpu_freq = psutil.cpu_freq() + memory = psutil.virtual_memory() + disk = psutil.disk_usage('C:\\') + + return { + 'cpu': { + 'usage_percent': cpu_percent, + 'cores': cpu_count, + 'frequency_mhz': cpu_freq.current if cpu_freq else None, + 'status': 'healthy' if cpu_percent < 80 else 'warning' if cpu_percent < 95 else 'critical' + }, + 'memory': { + 'total_gb': round(memory.total / (1024**3), 2), + 'used_gb': round(memory.used / (1024**3), 2), + 'available_gb': round(memory.available / (1024**3), 2), + 'usage_percent': memory.percent, + 'status': 'healthy' if memory.percent < 80 else 'warning' if memory.percent < 95 else 'critical' + }, + 'disk': { + 'total_gb': round(disk.total / (1024**3), 2), + 'used_gb': round(disk.used / (1024**3), 2), + 'free_gb': round(disk.free / (1024**3), 2), + 'usage_percent': disk.percent, + 'status': 'healthy' if disk.percent < 80 else 'warning' if disk.percent < 95 else 'critical' + } + } + + +def get_cursor_processes(): + """Get all Cursor-related processes""" + cursor_processes = [] + total_cpu = 0 + total_memory = 0 + + for proc in psutil.process_iter(['pid', 'name', 'exe', 'cpu_percent', 'memory_info', 'create_time', 'num_threads']): + try: + proc_info = proc.info + name = proc_info['name'].lower() + + # Check if it's a Cursor process + if 'cursor' in name or (proc_info.get('exe') and 'cursor' in proc_info['exe'].lower()): + cpu = proc_info.get('cpu_percent', 0) or 0 + memory = proc_info.get('memory_info', None) + memory_mb = (memory.rss / (1024**2)) if memory else 0 + + # Get more detailed info + try: + proc_obj = psutil.Process(proc_info['pid']) + num_threads = proc_obj.num_threads() + open_files = len(proc_obj.open_files()) + connections = len(proc_obj.connections()) + except: + num_threads = proc_info.get('num_threads', 0) + open_files = 0 + connections = 0 + + process_data = { + 'pid': proc_info['pid'], + 'name': proc_info['name'], + 'cpu_percent': round(cpu, 2), + 'memory_mb': round(memory_mb, 2), + 'memory_gb': round(memory_mb / 1024, 2), + 'threads': num_threads, + 'open_files': open_files, + 'connections': connections, + 'uptime_seconds': round(time.time() - proc_info.get('create_time', time.time()), 2) + } + + cursor_processes.append(process_data) + total_cpu += cpu + total_memory += memory_mb + except (psutil.NoSuchProcess, psutil.AccessDenied): + continue + + return { + 'processes': cursor_processes, + 'total_count': len(cursor_processes), + 'total_cpu_percent': round(total_cpu, 2), + 'total_memory_mb': round(total_memory, 2), + 'total_memory_gb': round(total_memory / 1024, 2) + } + + +def get_top_processes(limit=10): + """Get top resource-consuming processes""" + processes = [] + for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']): + try: + proc_info = proc.info + cpu = proc_info.get('cpu_percent', 0) or 0 + memory = proc_info.get('memory_info', None) + memory_mb = (memory.rss / (1024**2)) if memory else 0 + + processes.append({ + 'pid': proc_info['pid'], + 'name': proc_info['name'], + 'cpu_percent': round(cpu, 2), + 'memory_mb': round(memory_mb, 2) + }) + except (psutil.NoSuchProcess, psutil.AccessDenied): + continue + + # Sort by memory usage + processes.sort(key=lambda x: x['memory_mb'], reverse=True) + return processes[:limit] + + +def run_performance_test(): + """Run comprehensive performance test""" + print("=" * 70) + print("CURSOR PERFORMANCE TEST") + print("=" * 70) + print(f"Timestamp: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") + + results = { + 'timestamp': datetime.now().isoformat(), + 'system': {}, + 'cursor': {}, + 'top_processes': [] + } + + # System Resources + print("Checking System Resources...") + results['system'] = get_system_resources() + + print(f"\nCPU: {results['system']['cpu']['usage_percent']}% ({results['system']['cpu']['cores']} cores) - {results['system']['cpu']['status']}") + print(f"Memory: {results['system']['memory']['used_gb']}GB / {results['system']['memory']['total_gb']}GB ({results['system']['memory']['usage_percent']}%) - {results['system']['memory']['status']}") + print(f"Disk: {results['system']['disk']['used_gb']}GB / {results['system']['disk']['total_gb']}GB ({results['system']['disk']['usage_percent']}%) - {results['system']['disk']['status']}") + + # Cursor Processes + print("\n" + "-" * 70) + print("Checking Cursor Processes...") + results['cursor'] = get_cursor_processes() + + if results['cursor']['total_count'] > 0: + print(f"\nFound {results['cursor']['total_count']} Cursor process(es):") + print(f"Total CPU Usage: {results['cursor']['total_cpu_percent']}%") + print(f"Total Memory Usage: {results['cursor']['total_memory_gb']}GB ({results['cursor']['total_memory_mb']}MB)") + print("\nIndividual Processes:") + for proc in results['cursor']['processes']: + print(f" PID {proc['pid']:6d} | {proc['name']:20s} | CPU: {proc['cpu_percent']:6.2f}% | Memory: {proc['memory_mb']:8.2f}MB | Threads: {proc['threads']}") + else: + print("\nNo Cursor processes found. Is Cursor running?") + + # Top Processes + print("\n" + "-" * 70) + print("Top 10 Processes by Memory Usage:") + results['top_processes'] = get_top_processes(10) + for i, proc in enumerate(results['top_processes'], 1): + print(f" {i:2d}. {proc['name']:30s} | CPU: {proc['cpu_percent']:6.2f}% | Memory: {proc['memory_mb']:8.2f}MB") + + # Performance Assessment + print("\n" + "=" * 70) + print("PERFORMANCE ASSESSMENT") + print("=" * 70) + + issues = [] + recommendations = [] + + # Check system resources + if results['system']['cpu']['usage_percent'] > 80: + issues.append(f"High CPU usage: {results['system']['cpu']['usage_percent']}%") + recommendations.append("Close unnecessary applications to free up CPU resources") + + if results['system']['memory']['usage_percent'] > 80: + issues.append(f"High memory usage: {results['system']['memory']['usage_percent']}%") + recommendations.append("Close unused applications or consider adding more RAM") + + if results['system']['disk']['usage_percent'] > 80: + issues.append(f"Low disk space: {results['system']['disk']['usage_percent']}% used") + recommendations.append("Free up disk space by removing unnecessary files") + + # Check Cursor-specific issues + if results['cursor']['total_count'] > 0: + if results['cursor']['total_memory_gb'] > 2: + issues.append(f"Cursor using high memory: {results['cursor']['total_memory_gb']}GB") + recommendations.append("Consider restarting Cursor or closing unused tabs/files") + + if results['cursor']['total_cpu_percent'] > 50: + issues.append(f"Cursor using high CPU: {results['cursor']['total_cpu_percent']}%") + recommendations.append("Cursor may be indexing or processing. Wait for it to complete.") + + if issues: + print("\n⚠️ ISSUES DETECTED:") + for issue in issues: + print(f" • {issue}") + else: + print("\n✅ No major performance issues detected") + + if recommendations: + print("\n💡 RECOMMENDATIONS:") + for rec in recommendations: + print(f" • {rec}") + + # Save results to file + output_file = Path("cursor_performance_report.json") + with open(output_file, 'w') as f: + json.dump(results, f, indent=2) + print(f"\n📄 Detailed report saved to: {output_file}") + + return results + + +if __name__ == "__main__": + try: + run_performance_test() + except KeyboardInterrupt: + print("\n\nTest interrupted by user") + sys.exit(1) + except Exception as e: + print(f"\n\nError running test: {str(e)}") + import traceback + traceback.print_exc() + sys.exit(1) +