{
"event": "PostToolUse",
"tool_name": "Read",
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/mcp-servers\/mcp_code\/tools\/stats.py",
"content": "\"\"\"code_stats - Projekt-Statistiken.\"\"\"\nimport json\nimport sys\n\nsys.path.insert(0, \"\/var\/www\/mcp-servers\/mcp_code\")\nfrom db import execute_query, execute_single\n\n\ndef register_stats_tool(mcp):\n \"\"\"Registriert code_stats Tool.\"\"\"\n\n @mcp.tool()\n def code_stats() -> dict:\n \"\"\"\n Zeigt Projekt-Statistiken der Code-Analyse.\n\n Returns:\n Dict mit total_files, total_classes, total_interfaces, total_traits,\n dependencies_by_type, top_used_classes\n \"\"\"\n # Basis-Statistiken - SQL aus PHP CodeAnalysisRepository::getStatistics() (Zeile 217-227)\n stats_sql = \"\"\"\n SELECT\n COUNT(*) as total_files,\n SUM(line_count) as total_lines,\n SUM(file_size) as total_size,\n COUNT(CASE WHEN parse_error IS NOT NULL THEN 1 END) as files_with_errors,\n MAX(scanned_at) as last_scan\n FROM code_analysis\n \"\"\"\n stats = execute_single(stats_sql)\n\n # Klassen\/Interfaces\/Traits zählen\n classes_sql = \"SELECT classes FROM code_analysis WHERE classes IS NOT NULL AND classes != '[]'\"\n rows = execute_query(classes_sql, max_rows=1000)\n\n total_classes = 0\n total_interfaces = 0\n total_traits = 0\n\n for row in rows:\n classes = json.loads(row[\"classes\"] or \"[]\")\n for cls in classes:\n cls_type = cls.get(\"type\", \"class\")\n if cls_type == \"interface\":\n total_interfaces += 1\n elif cls_type == \"trait\":\n total_traits += 1\n else:\n total_classes += 1\n\n # Dependency-Statistiken - SQL aus PHP CodeAnalysisRepository::getDependencyStatistics() (Zeile 343-351)\n by_type_sql = \"\"\"\n SELECT dependency_type, COUNT(*) as cnt\n FROM code_dependencies\n GROUP BY dependency_type\n \"\"\"\n by_type_rows = execute_query(by_type_sql)\n dependencies_by_type = {r[\"dependency_type\"]: r[\"cnt\"] for r in by_type_rows}\n\n # Most used classes - SQL aus PHP CodeAnalysisRepository::getDependencyStatistics() (Zeile 354-360)\n top_sql = \"\"\"\n SELECT target_fqcn as fqcn, COUNT(*) as count\n FROM code_dependencies\n GROUP BY target_fqcn\n ORDER BY count DESC\n LIMIT 20\n \"\"\"\n top_used = execute_query(top_sql)\n\n # Total dependencies\n total_deps_sql = \"SELECT COUNT(*) as cnt FROM code_dependencies\"\n total_deps_row = execute_single(total_deps_sql)\n\n return {\n \"total_files\": stats[\"total_files\"] or 0,\n \"total_lines\": stats[\"total_lines\"] or 0,\n \"total_classes\": total_classes,\n \"total_interfaces\": total_interfaces,\n \"total_traits\": total_traits,\n \"files_with_errors\": stats[\"files_with_errors\"] or 0,\n \"last_scan\": str(stats[\"last_scan\"]) if stats[\"last_scan\"] else None,\n \"total_dependencies\": total_deps_row[\"cnt\"] if total_deps_row else 0,\n \"dependencies_by_type\": dependencies_by_type,\n \"top_used_classes\": top_used,\n }\n",
"numLines": 87,
"startLine": 1,
"totalLines": 87
}
}
}