vkr/prog/arch-researcher/legacy_report/report.json

771 lines
20 KiB
JSON
Raw Normal View History

2026-05-20 02:12:02 +00:00
{
"generated_at": "2026-05-11T13:38:33.090534",
"project_root": "/home/claude/vkr/B",
"summary": {
"total_files": 22,
"total_nloc": 1137,
"total_functions": 68,
"avg_system_ccn": 3.78,
"system_risk_level": "HIGH",
"recommended_system_strategy": "REENGINEER",
"dependency_cycles_count": 1
},
"dependency_cycles": [
[
"src",
"src/database",
"src/error-handlers",
"src/middlewares",
"src/routes"
]
],
"decisions": [
{
"module": "src/routes",
"risk_level": "CRITICAL",
"strategy": "REPLACE",
"recommended_pattern": "Strangler Fig + Anti-Corruption Layer: замена с изоляцией от цикла",
"priority": 190,
"reasons": [
"Критическая CCN: max=21 (порог 20)",
"Высокая нестабильность: I=0.75 (порог 0.7)",
"Участвует в циклических зависимостях — признак архитектурной деградации"
]
},
{
"module": "src",
"risk_level": "HIGH",
"strategy": "REENGINEER",
"recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей",
"priority": 460,
"reasons": [
"Участвует в циклических зависимостях — признак архитектурной деградации"
]
},
{
"module": "src/middlewares",
"risk_level": "HIGH",
"strategy": "REENGINEER",
"recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей",
"priority": 470,
"reasons": [
"Участвует в циклических зависимостях — признак архитектурной деградации"
]
},
{
"module": "src/database",
"risk_level": "HIGH",
"strategy": "REENGINEER",
"recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей",
"priority": 480,
"reasons": [
"Участвует в циклических зависимостях — признак архитектурной деградации"
]
},
{
"module": "src/error-handlers",
"risk_level": "HIGH",
"strategy": "REENGINEER",
"recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей",
"priority": 490,
"reasons": [
"Участвует в циклических зависимостях — признак архитектурной деградации"
]
}
],
"modules": {
"src": {
"files": [
"/home/claude/vkr/B/src/config.mjs",
"/home/claude/vkr/B/src/index.mjs",
"/home/claude/vkr/B/src/utils.mjs"
],
"language": "mixed",
"total_nloc": 166,
"total_functions": 22,
"avg_ccn": 1.77,
"max_ccn": 8,
"heavy_functions_count": 0,
"heavy_functions_ratio": 0.0,
"coupling_out": 4,
"coupling_in": 4,
"instability": 0.5,
"has_cycles": true,
"dependencies": [
"src/database",
"src/error-handlers",
"src/middlewares",
"src/routes"
],
"dependents": [
"src/database",
"src/error-handlers",
"src/middlewares",
"src/routes"
],
"functions": [
{
"name": "isPng",
"file": "/home/claude/vkr/B/src/utils.mjs",
"line": 10,
"ccn": 8,
"nloc": 11,
"params": 1
},
{
"name": "warmupExtract",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 101,
"ccn": 3,
"nloc": 12,
"params": 4
},
{
"name": "isJpeg",
"file": "/home/claude/vkr/B/src/utils.mjs",
"line": 3,
"ccn": 3,
"nloc": 6,
"params": 1
},
{
"name": "createDbConnection",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 29,
"ccn": 2,
"nloc": 24,
"params": 0
},
{
"name": "generateApiPrefix",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 54,
"ccn": 2,
"nloc": 5,
"params": 2
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 123,
"ccn": 2,
"nloc": 11,
"params": 0
},
{
"name": "main",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 139,
"ccn": 2,
"nloc": 19,
"params": 0
},
{
"name": "toFixedOne",
"file": "/home/claude/vkr/B/src/utils.mjs",
"line": 31,
"ccn": 2,
"nloc": 7,
"params": 2
},
{
"name": "float32ArrayFromBuffer",
"file": "/home/claude/vkr/B/src/utils.mjs",
"line": 43,
"ccn": 2,
"nloc": 9,
"params": 1
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 26,
"ccn": 1,
"nloc": 1,
"params": 0
},
{
"name": "sleep",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 24,
"ccn": 1,
"nloc": 4,
"params": 1
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 64,
"ccn": 1,
"nloc": 3,
"params": 0
},
{
"name": "addModuleMiddlewares",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 60,
"ccn": 1,
"nloc": 7,
"params": 2
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 74,
"ccn": 1,
"nloc": 3,
"params": 0
},
{
"name": "addModuleRoutes",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 70,
"ccn": 1,
"nloc": 7,
"params": 3
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 85,
"ccn": 1,
"nloc": 3,
"params": 0
},
{
"name": "addUknownRoute",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 80,
"ccn": 1,
"nloc": 8,
"params": 1
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 95,
"ccn": 1,
"nloc": 3,
"params": 0
},
{
"name": "addErrHandler",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 91,
"ccn": 1,
"nloc": 7,
"params": 1
},
{
"name": "runExpressServer",
"file": "/home/claude/vkr/B/src/index.mjs",
"line": 116,
"ccn": 1,
"nloc": 11,
"params": 1
},
{
"name": "float32ArrayToBuffer",
"file": "/home/claude/vkr/B/src/utils.mjs",
"line": 56,
"ccn": 1,
"nloc": 4,
"params": 1
},
{
"name": "clamp",
"file": "/home/claude/vkr/B/src/utils.mjs",
"line": 61,
"ccn": 1,
"nloc": 1,
"params": 3
}
]
},
"src/database": {
"files": [
"/home/claude/vkr/B/src/database/dbQueries.mjs",
"/home/claude/vkr/B/src/database/dbRepository.mjs"
],
"language": "mixed",
"total_nloc": 32,
"total_functions": 4,
"avg_ccn": 1.0,
"max_ccn": 1,
"heavy_functions_count": 0,
"heavy_functions_ratio": 0.0,
"coupling_out": 1,
"coupling_in": 2,
"instability": 0.333,
"has_cycles": true,
"dependencies": [
"src"
],
"dependents": [
"src",
"src/routes"
],
"functions": [
{
"name": "addVector",
"file": "/home/claude/vkr/B/src/database/dbRepository.mjs",
"line": 11,
"ccn": 1,
"nloc": 9,
"params": 3
},
{
"name": "updateVector",
"file": "/home/claude/vkr/B/src/database/dbRepository.mjs",
"line": 21,
"ccn": 1,
"nloc": 9,
"params": 3
},
{
"name": "deleteVector",
"file": "/home/claude/vkr/B/src/database/dbRepository.mjs",
"line": 31,
"ccn": 1,
"nloc": 4,
"params": 1
},
{
"name": "getNearestVector",
"file": "/home/claude/vkr/B/src/database/dbRepository.mjs",
"line": 36,
"ccn": 1,
"nloc": 10,
"params": 4
}
]
},
"src/error-handlers": {
"files": [
"/home/claude/vkr/B/src/error-handlers/errorHandler.mjs"
],
"language": "mixed",
"total_nloc": 37,
"total_functions": 3,
"avg_ccn": 2.0,
"max_ccn": 3,
"heavy_functions_count": 0,
"heavy_functions_ratio": 0.0,
"coupling_out": 2,
"coupling_in": 1,
"instability": 0.667,
"has_cycles": true,
"dependencies": [
"src",
"src/middlewares"
],
"dependents": [
"src"
],
"functions": [
{
"name": "generateResponse",
"file": "/home/claude/vkr/B/src/error-handlers/errorHandler.mjs",
"line": 90,
"ccn": 3,
"nloc": 16,
"params": 2
},
{
"name": "handleErrorCase",
"file": "/home/claude/vkr/B/src/error-handlers/errorHandler.mjs",
"line": 107,
"ccn": 2,
"nloc": 10,
"params": 3
},
{
"name": "logError",
"file": "/home/claude/vkr/B/src/error-handlers/errorHandler.mjs",
"line": 78,
"ccn": 1,
"nloc": 11,
"params": 3
}
]
},
"src/middlewares": {
"files": [
"/home/claude/vkr/B/src/middlewares/addLogInfo.mjs",
"/home/claude/vkr/B/src/middlewares/builder.mjs",
"/home/claude/vkr/B/src/middlewares/index.mjs",
"/home/claude/vkr/B/src/middlewares/logger.mjs",
"/home/claude/vkr/B/src/middlewares/parser.mjs"
],
"language": "mixed",
"total_nloc": 267,
"total_functions": 15,
"avg_ccn": 3.53,
"max_ccn": 8,
"heavy_functions_count": 0,
"heavy_functions_ratio": 0.0,
"coupling_out": 1,
"coupling_in": 3,
"instability": 0.25,
"has_cycles": true,
"dependencies": [
"src"
],
"dependents": [
"src",
"src/error-handlers",
"src/routes"
],
"functions": [
{
"name": "findBoundary",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 78,
"ccn": 8,
"nloc": 27,
"params": 3
},
{
"name": "parsePart",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 106,
"ccn": 7,
"nloc": 34,
"params": 1
},
{
"name": "parse",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 14,
"ccn": 6,
"nloc": 38,
"params": 3
},
{
"name": "getNextPart",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 159,
"ccn": 6,
"nloc": 39,
"params": 3
},
{
"name": "parseMultipart",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 205,
"ccn": 6,
"nloc": 35,
"params": 2
},
{
"name": "getBoundary",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 146,
"ccn": 4,
"nloc": 12,
"params": 1
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 42,
"ccn": 3,
"nloc": 6,
"params": 0
},
{
"name": "boundaryValid",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 68,
"ccn": 3,
"nloc": 9,
"params": 3
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/middlewares/builder.mjs",
"line": 18,
"ccn": 2,
"nloc": 12,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/middlewares/builder.mjs",
"line": 40,
"ccn": 2,
"nloc": 15,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 32,
"ccn": 2,
"nloc": 6,
"params": 0
},
{
"name": "addLogInfo",
"file": "/home/claude/vkr/B/src/middlewares/addLogInfo.mjs",
"line": 3,
"ccn": 1,
"nloc": 6,
"params": 3
},
{
"name": "buildMultipart",
"file": "/home/claude/vkr/B/src/middlewares/builder.mjs",
"line": 12,
"ccn": 1,
"nloc": 15,
"params": 2
},
{
"name": "customSuccessMessage",
"file": "/home/claude/vkr/B/src/middlewares/logger.mjs",
"line": 26,
"ccn": 1,
"nloc": 9,
"params": 3
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/middlewares/parser.mjs",
"line": 51,
"ccn": 1,
"nloc": 4,
"params": 0
}
]
},
"src/routes": {
"files": [
"/home/claude/vkr/B/src/routes/add.mjs",
"/home/claude/vkr/B/src/routes/compare.mjs",
"/home/claude/vkr/B/src/routes/delete.mjs",
"/home/claude/vkr/B/src/routes/extract.mjs",
"/home/claude/vkr/B/src/routes/health.mjs",
"/home/claude/vkr/B/src/routes/identify.mjs",
"/home/claude/vkr/B/src/routes/index.mjs",
"/home/claude/vkr/B/src/routes/match.mjs",
"/home/claude/vkr/B/src/routes/memory.mjs",
"/home/claude/vkr/B/src/routes/update.mjs",
"/home/claude/vkr/B/src/routes/verify.mjs"
],
"language": "mixed",
"total_nloc": 635,
"total_functions": 24,
"avg_ccn": 6.46,
"max_ccn": 21,
"heavy_functions_count": 5,
"heavy_functions_ratio": 0.208,
"coupling_out": 3,
"coupling_in": 1,
"instability": 0.75,
"has_cycles": true,
"dependencies": [
"src",
"src/database",
"src/middlewares"
],
"dependents": [
"src"
],
"functions": [
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/identify.mjs",
"line": 19,
"ccn": 21,
"nloc": 79,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/add.mjs",
"line": 13,
"ccn": 16,
"nloc": 65,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/match.mjs",
"line": 13,
"ccn": 16,
"nloc": 71,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/update.mjs",
"line": 11,
"ccn": 16,
"nloc": 61,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/verify.mjs",
"line": 19,
"ccn": 15,
"nloc": 62,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/compare.mjs",
"line": 9,
"ccn": 9,
"nloc": 46,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/extract.mjs",
"line": 8,
"ccn": 9,
"nloc": 27,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/health.mjs",
"line": 19,
"ccn": 7,
"nloc": 47,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/delete.mjs",
"line": 8,
"ccn": 5,
"nloc": 21,
"params": 0
},
{
"name": "verifyParams",
"file": "/home/claude/vkr/B/src/routes/identify.mjs",
"line": 121,
"ccn": 5,
"nloc": 11,
"params": 1
},
{
"name": "verifyParams",
"file": "/home/claude/vkr/B/src/routes/match.mjs",
"line": 125,
"ccn": 5,
"nloc": 11,
"params": 1
},
{
"name": "getId",
"file": "/home/claude/vkr/B/src/routes/add.mjs",
"line": 95,
"ccn": 4,
"nloc": 10,
"params": 1
},
{
"name": "getId",
"file": "/home/claude/vkr/B/src/routes/delete.mjs",
"line": 44,
"ccn": 4,
"nloc": 10,
"params": 1
},
{
"name": "getId",
"file": "/home/claude/vkr/B/src/routes/update.mjs",
"line": 108,
"ccn": 4,
"nloc": 10,
"params": 1
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/memory.mjs",
"line": 6,
"ccn": 3,
"nloc": 16,
"params": 0
},
{
"name": "parseTemplate",
"file": "/home/claude/vkr/B/src/routes/add.mjs",
"line": 83,
"ccn": 2,
"nloc": 11,
"params": 1
},
{
"name": "parseTemplate",
"file": "/home/claude/vkr/B/src/routes/delete.mjs",
"line": 32,
"ccn": 2,
"nloc": 11,
"params": 1
},
{
"name": "parseMeta",
"file": "/home/claude/vkr/B/src/routes/identify.mjs",
"line": 109,
"ccn": 2,
"nloc": 11,
"params": 1
},
{
"name": "parseMeta",
"file": "/home/claude/vkr/B/src/routes/match.mjs",
"line": 100,
"ccn": 2,
"nloc": 11,
"params": 1
},
{
"name": "parseVectors",
"file": "/home/claude/vkr/B/src/routes/match.mjs",
"line": 112,
"ccn": 2,
"nloc": 11,
"params": 1
},
{
"name": "parseTemplate",
"file": "/home/claude/vkr/B/src/routes/update.mjs",
"line": 84,
"ccn": 2,
"nloc": 11,
"params": 1
},
{
"name": "parseVectors",
"file": "/home/claude/vkr/B/src/routes/update.mjs",
"line": 96,
"ccn": 2,
"nloc": 11,
"params": 1
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/identify.mjs",
"line": 87,
"ccn": 1,
"nloc": 6,
"params": 0
},
{
"name": "(anonymous)",
"file": "/home/claude/vkr/B/src/routes/match.mjs",
"line": 85,
"ccn": 1,
"nloc": 5,
"params": 0
}
]
}
}
}