Skip to main content
Glama
analyze.pyโ€ข7.49 kB
#!/usr/bin/env python3 """ CodeBase Optimizer - Simple Command Line Interface ================================================== Easy-to-use wrapper for the codebase optimizer that works without MCP dependencies. Perfect for local development and quick project analysis. Usage: python3 analyze.py /path/to/project python3 analyze.py /path/to/project --detailed python3 analyze.py /path/to/project --function detect_duplicates """ import argparse import sys import os from pathlib import Path # Add current directory to path sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) try: from codebase_optimizer_engine import CodebaseAnalyzer except ImportError as e: print(f"โŒ Error importing CodebaseAnalyzer: {e}") sys.exit(1) def main(): parser = argparse.ArgumentParser( description="Analyze and optimize your codebase", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: python3 analyze.py ~/my-project python3 analyze.py ~/my-project --detailed python3 analyze.py ~/my-project --function detect_duplicates python3 analyze.py ~/my-project --function validate_microservices """ ) parser.add_argument( 'project_path', help='Path to the project directory to analyze' ) parser.add_argument( '--function', choices=[ 'structure', 'duplicates', 'microservices', 'config', 'report', 'complete' ], help='Run specific analysis function' ) parser.add_argument( '--detailed', action='store_true', help='Show detailed analysis results' ) parser.add_argument( '--output', help='Save results to file' ) args = parser.parse_args() # Validate project path project_path = Path(args.project_path).resolve() if not project_path.exists(): print(f"โŒ Error: Project path '{project_path}' does not exist") sys.exit(1) if not project_path.is_dir(): print(f"โŒ Error: '{project_path}' is not a directory") sys.exit(1) print(f"๐Ÿ” Analyzing project: {project_path}") print("=" * 60) try: analyzer = CodebaseAnalyzer(str(project_path)) if args.function == 'structure': result = analyzer.analyze_project_structure() print("๐Ÿ“ PROJECT STRUCTURE ANALYSIS") print(f"Health Score: {result.health_score:.1f}/100") print(f"Total Files: {result.metrics.total_files}") print(f"Organization Score: {result.metrics.organization_score:.2f}") elif args.function == 'duplicates': result = analyzer.detect_code_duplicates() print("๐Ÿ”„ CODE DUPLICATION ANALYSIS") print(f"Duplication Percentage: {result.metrics.duplication_percentage:.1f}%") print(f"Duplicate Functions: {len(result.duplicate_functions)}") if result.duplicate_functions: print("\nDuplicate Functions Found:") for func in result.duplicate_functions[:5]: # Show first 5 print(f" โ€ข {func}") elif args.function == 'microservices': result = analyzer.validate_microservices_architecture() print("๐Ÿ—๏ธ MICROSERVICES ARCHITECTURE VALIDATION") print(f"Architecture Score: {result.architecture_score:.1f}/100") elif args.function == 'config': result = analyzer.optimize_configurations() print("โš™๏ธ CONFIGURATION OPTIMIZATION") print(f"Configuration Score: {result.config_score:.1f}/100") elif args.function == 'report': # Need to run other analyses first to generate report structure_result = analyzer.analyze_project_structure() duplicate_result = analyzer.detect_code_duplicates() microservices_result = analyzer.validate_microservices_architecture() config_result = analyzer.optimize_configurations() all_results = [structure_result, duplicate_result, microservices_result, config_result] result = analyzer.generate_improvement_report(all_results) print("๐Ÿ“Š IMPROVEMENT REPORT") print(result.summary) else: # Run complete analysis (default) print("๐Ÿš€ Running complete project analysis...") # Structure analysis print("\n1๏ธโƒฃ Analyzing project structure...") structure_result = analyzer.analyze_project_structure() # Duplicate detection print("2๏ธโƒฃ Detecting code duplicates...") duplicate_result = analyzer.detect_code_duplicates() # Microservices validation print("3๏ธโƒฃ Validating architecture...") microservices_result = analyzer.validate_microservices_architecture() # Configuration optimization print("4๏ธโƒฃ Optimizing configurations...") config_result = analyzer.optimize_configurations() # Generate report print("5๏ธโƒฃ Generating improvement report...") all_results = [structure_result, duplicate_result, microservices_result, config_result] report_result = analyzer.generate_improvement_report(all_results) # Display comprehensive results print("\n" + "=" * 60) print("๐ŸŽฏ COMPLETE ANALYSIS RESULTS") print("=" * 60) print(f"๐Ÿ“Š Health Score: {structure_result.health_score:.1f}/100") print(f"๐Ÿ“ Total Files: {structure_result.metrics.total_files}") print(f"๐Ÿ“ Lines of Code: {structure_result.metrics.lines_of_code:,}") print(f"๐Ÿ”„ Code Duplication: {duplicate_result.metrics.duplication_percentage:.1f}%") print(f"๐Ÿ—๏ธ Organization Score: {structure_result.metrics.organization_score:.2f}") if duplicate_result.duplicate_functions: print(f"\n๐Ÿšจ Found {len(duplicate_result.duplicate_functions)} duplicate functions:") for func in duplicate_result.duplicate_functions[:3]: print(f" โ€ข {func}") if len(duplicate_result.duplicate_functions) > 3: print(f" ... and {len(duplicate_result.duplicate_functions) - 3} more") print(f"\n๐Ÿ“ˆ Top Recommendations:") for i, rec in enumerate(report_result.recommendations[:3], 1): print(f" {i}. [{rec.priority.upper()}] {rec.description}") # Save output if requested if args.output: with open(args.output, 'w') as f: f.write(f"CodeBase Analysis Results for {project_path}\n") f.write("=" * 60 + "\n") f.write(f"Generated: {analyzer.get_timestamp()}\n") # Add more detailed output here if needed print(f"\n๐Ÿ’พ Results saved to: {args.output}") print(f"\nโœ… Analysis complete!") except Exception as e: print(f"โŒ Analysis failed: {e}") if args.detailed: import traceback traceback.print_exc() sys.exit(1) if __name__ == "__main__": main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/liadgez/codebase-optimizer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server