synapse-mcp 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1820 -147
- package/dist/constants.d.ts +10 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +18 -8
- package/dist/constants.js.map +1 -1
- package/dist/events/emitter.d.ts +63 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +112 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +51 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +3 -0
- package/dist/events/types.js.map +1 -0
- package/dist/formatters/compose.d.ts +185 -0
- package/dist/formatters/compose.d.ts.map +1 -0
- package/dist/formatters/compose.js +397 -0
- package/dist/formatters/compose.js.map +1 -0
- package/dist/formatters/container.d.ts +84 -0
- package/dist/formatters/container.d.ts.map +1 -0
- package/dist/formatters/container.js +323 -0
- package/dist/formatters/container.js.map +1 -0
- package/dist/formatters/diagnostics.d.ts +20 -0
- package/dist/formatters/diagnostics.d.ts.map +1 -0
- package/dist/formatters/diagnostics.js +73 -0
- package/dist/formatters/diagnostics.js.map +1 -0
- package/dist/formatters/docker.d.ts +139 -0
- package/dist/formatters/docker.d.ts.map +1 -0
- package/dist/formatters/docker.js +216 -0
- package/dist/formatters/docker.js.map +1 -0
- package/dist/formatters/host.d.ts +137 -0
- package/dist/formatters/host.d.ts.map +1 -0
- package/dist/formatters/host.js +198 -0
- package/dist/formatters/host.js.map +1 -0
- package/dist/formatters/index.d.ts +17 -270
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +21 -456
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/scout.d.ts +424 -0
- package/dist/formatters/scout.d.ts.map +1 -0
- package/dist/formatters/scout.js +687 -0
- package/dist/formatters/scout.js.map +1 -0
- package/dist/formatters/strategy.d.ts +105 -0
- package/dist/formatters/strategy.d.ts.map +1 -0
- package/dist/formatters/strategy.js +120 -0
- package/dist/formatters/strategy.js.map +1 -0
- package/dist/formatters/utils.d.ts +84 -0
- package/dist/formatters/utils.d.ts.map +1 -0
- package/dist/formatters/utils.js +129 -0
- package/dist/formatters/utils.js.map +1 -0
- package/dist/health-rate-limiter.d.ts +59 -0
- package/dist/health-rate-limiter.d.ts.map +1 -0
- package/dist/health-rate-limiter.js +159 -0
- package/dist/health-rate-limiter.js.map +1 -0
- package/dist/index.js +61 -100
- package/dist/index.js.map +1 -1
- package/dist/middleware/async-handler.d.ts +62 -0
- package/dist/middleware/async-handler.d.ts.map +1 -0
- package/dist/middleware/async-handler.js +58 -0
- package/dist/middleware/async-handler.js.map +1 -0
- package/dist/middleware/auth.d.ts +32 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +63 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/csrf-protection.d.ts +58 -0
- package/dist/middleware/csrf-protection.d.ts.map +1 -0
- package/dist/middleware/csrf-protection.js +123 -0
- package/dist/middleware/csrf-protection.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +49 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +90 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/error-mapper.d.ts +44 -0
- package/dist/middleware/error-mapper.d.ts.map +1 -0
- package/dist/middleware/error-mapper.js +127 -0
- package/dist/middleware/error-mapper.js.map +1 -0
- package/dist/middleware/index.d.ts +13 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +13 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/request-id.d.ts +22 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +31 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/middleware/types.d.ts +33 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +2 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/schemas/common.d.ts +205 -8
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +290 -17
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/flux/compose.d.ts +307 -44
- package/dist/schemas/flux/compose.d.ts.map +1 -1
- package/dist/schemas/flux/compose.js +74 -48
- package/dist/schemas/flux/compose.js.map +1 -1
- package/dist/schemas/flux/container.d.ts +423 -56
- package/dist/schemas/flux/container.d.ts.map +1 -1
- package/dist/schemas/flux/container.js +83 -61
- package/dist/schemas/flux/container.js.map +1 -1
- package/dist/schemas/flux/docker.d.ts +254 -37
- package/dist/schemas/flux/docker.d.ts.map +1 -1
- package/dist/schemas/flux/docker.js +69 -39
- package/dist/schemas/flux/docker.js.map +1 -1
- package/dist/schemas/flux/host.d.ts +312 -29
- package/dist/schemas/flux/host.d.ts.map +1 -1
- package/dist/schemas/flux/host.js +74 -31
- package/dist/schemas/flux/host.js.map +1 -1
- package/dist/schemas/flux/index.d.ts +503 -11
- package/dist/schemas/flux/index.d.ts.map +1 -1
- package/dist/schemas/flux/index.js +34 -70
- package/dist/schemas/flux/index.js.map +1 -1
- package/dist/schemas/host-config.d.ts +76 -0
- package/dist/schemas/host-config.d.ts.map +1 -0
- package/dist/schemas/host-config.js +105 -0
- package/dist/schemas/host-config.js.map +1 -0
- package/dist/schemas/scout/index.d.ts +80 -23
- package/dist/schemas/scout/index.d.ts.map +1 -1
- package/dist/schemas/scout/index.js +26 -11
- package/dist/schemas/scout/index.js.map +1 -1
- package/dist/schemas/scout/logs.d.ts +17 -5
- package/dist/schemas/scout/logs.d.ts.map +1 -1
- package/dist/schemas/scout/logs.js +41 -31
- package/dist/schemas/scout/logs.js.map +1 -1
- package/dist/schemas/scout/simple.d.ts +126 -11
- package/dist/schemas/scout/simple.d.ts.map +1 -1
- package/dist/schemas/scout/simple.js +112 -57
- package/dist/schemas/scout/simple.js.map +1 -1
- package/dist/schemas/scout/zfs.d.ts +17 -5
- package/dist/schemas/scout/zfs.d.ts.map +1 -1
- package/dist/schemas/scout/zfs.js +34 -25
- package/dist/schemas/scout/zfs.js.map +1 -1
- package/dist/services/cache-layer.d.ts +160 -0
- package/dist/services/cache-layer.d.ts.map +1 -0
- package/dist/services/cache-layer.js +138 -0
- package/dist/services/cache-layer.js.map +1 -0
- package/dist/services/compose-cache.d.ts +75 -0
- package/dist/services/compose-cache.d.ts.map +1 -0
- package/dist/services/compose-cache.js +178 -0
- package/dist/services/compose-cache.js.map +1 -0
- package/dist/services/compose-discovery.d.ts +46 -0
- package/dist/services/compose-discovery.d.ts.map +1 -0
- package/dist/services/compose-discovery.js +219 -0
- package/dist/services/compose-discovery.js.map +1 -0
- package/dist/services/compose-project-lister.d.ts +27 -0
- package/dist/services/compose-project-lister.d.ts.map +1 -0
- package/dist/services/compose-project-lister.js +71 -0
- package/dist/services/compose-project-lister.js.map +1 -0
- package/dist/services/compose-scanner.d.ts +63 -0
- package/dist/services/compose-scanner.d.ts.map +1 -0
- package/dist/services/compose-scanner.js +253 -0
- package/dist/services/compose-scanner.js.map +1 -0
- package/dist/services/compose.d.ts +64 -28
- package/dist/services/compose.d.ts.map +1 -1
- package/dist/services/compose.js +220 -98
- package/dist/services/compose.js.map +1 -1
- package/dist/services/config-loader.d.ts +23 -0
- package/dist/services/config-loader.d.ts.map +1 -0
- package/dist/services/config-loader.js +124 -0
- package/dist/services/config-loader.js.map +1 -0
- package/dist/services/config-service.d.ts +38 -0
- package/dist/services/config-service.d.ts.map +1 -0
- package/dist/services/config-service.js +225 -0
- package/dist/services/config-service.js.map +1 -0
- package/dist/services/container-host-map-cache.d.ts +121 -0
- package/dist/services/container-host-map-cache.d.ts.map +1 -0
- package/dist/services/container-host-map-cache.js +188 -0
- package/dist/services/container-host-map-cache.js.map +1 -0
- package/dist/services/container.d.ts +194 -6
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +386 -11
- package/dist/services/container.js.map +1 -1
- package/dist/services/diagnostics.d.ts +57 -0
- package/dist/services/diagnostics.d.ts.map +1 -0
- package/dist/services/diagnostics.js +271 -0
- package/dist/services/diagnostics.js.map +1 -0
- package/dist/services/docker/container-service.d.ts +123 -0
- package/dist/services/docker/container-service.d.ts.map +1 -0
- package/dist/services/docker/container-service.js +347 -0
- package/dist/services/docker/container-service.js.map +1 -0
- package/dist/services/docker/image-service.d.ts +82 -0
- package/dist/services/docker/image-service.d.ts.map +1 -0
- package/dist/services/docker/image-service.js +193 -0
- package/dist/services/docker/image-service.js.map +1 -0
- package/dist/services/docker/index.d.ts +80 -0
- package/dist/services/docker/index.d.ts.map +1 -0
- package/dist/services/docker/index.js +103 -0
- package/dist/services/docker/index.js.map +1 -0
- package/dist/services/docker/network-service.d.ts +22 -0
- package/dist/services/docker/network-service.d.ts.map +1 -0
- package/dist/services/docker/network-service.js +43 -0
- package/dist/services/docker/network-service.js.map +1 -0
- package/dist/services/docker/system-service.d.ts +49 -0
- package/dist/services/docker/system-service.d.ts.map +1 -0
- package/dist/services/docker/system-service.js +215 -0
- package/dist/services/docker/system-service.js.map +1 -0
- package/dist/services/docker/utils/client-factory.d.ts +56 -0
- package/dist/services/docker/utils/client-factory.d.ts.map +1 -0
- package/dist/services/docker/utils/client-factory.js +139 -0
- package/dist/services/docker/utils/client-factory.js.map +1 -0
- package/dist/services/docker/utils/client-manager.d.ts +88 -0
- package/dist/services/docker/utils/client-manager.d.ts.map +1 -0
- package/dist/services/docker/utils/client-manager.js +124 -0
- package/dist/services/docker/utils/client-manager.js.map +1 -0
- package/dist/services/docker/utils/exec-handler.d.ts +94 -0
- package/dist/services/docker/utils/exec-handler.d.ts.map +1 -0
- package/dist/services/docker/utils/exec-handler.js +197 -0
- package/dist/services/docker/utils/exec-handler.js.map +1 -0
- package/dist/services/docker/utils/formatters.d.ts +13 -0
- package/dist/services/docker/utils/formatters.d.ts.map +1 -0
- package/dist/services/docker/utils/formatters.js +33 -0
- package/dist/services/docker/utils/formatters.js.map +1 -0
- package/dist/services/docker/utils/log-parser.d.ts +10 -0
- package/dist/services/docker/utils/log-parser.d.ts.map +1 -0
- package/dist/services/docker/utils/log-parser.js +48 -0
- package/dist/services/docker/utils/log-parser.js.map +1 -0
- package/dist/services/docker/utils/stats-calculator.d.ts +68 -0
- package/dist/services/docker/utils/stats-calculator.d.ts.map +1 -0
- package/dist/services/docker/utils/stats-calculator.js +61 -0
- package/dist/services/docker/utils/stats-calculator.js.map +1 -0
- package/dist/services/docker/volume-service.d.ts +22 -0
- package/dist/services/docker/volume-service.d.ts.map +1 -0
- package/dist/services/docker/volume-service.js +48 -0
- package/dist/services/docker/volume-service.js.map +1 -0
- package/dist/services/docker-interfaces.d.ts +283 -0
- package/dist/services/docker-interfaces.d.ts.map +1 -0
- package/dist/services/docker-interfaces.js +13 -0
- package/dist/services/docker-interfaces.js.map +1 -0
- package/dist/services/docker.d.ts +42 -5
- package/dist/services/docker.d.ts.map +1 -1
- package/dist/services/docker.js +335 -127
- package/dist/services/docker.js.map +1 -1
- package/dist/services/file-service.d.ts +6 -2
- package/dist/services/file-service.d.ts.map +1 -1
- package/dist/services/file-service.js +156 -52
- package/dist/services/file-service.js.map +1 -1
- package/dist/services/host-config-repository.d.ts +133 -0
- package/dist/services/host-config-repository.d.ts.map +1 -0
- package/dist/services/host-config-repository.js +323 -0
- package/dist/services/host-config-repository.js.map +1 -0
- package/dist/services/host-resolver.d.ts +49 -0
- package/dist/services/host-resolver.d.ts.map +1 -0
- package/dist/services/host-resolver.js +176 -0
- package/dist/services/host-resolver.js.map +1 -0
- package/dist/services/interfaces.d.ts +61 -194
- package/dist/services/interfaces.d.ts.map +1 -1
- package/dist/services/local-executor.d.ts +31 -0
- package/dist/services/local-executor.d.ts.map +1 -0
- package/dist/services/local-executor.js +71 -0
- package/dist/services/local-executor.js.map +1 -0
- package/dist/services/ssh-config-loader.d.ts +35 -0
- package/dist/services/ssh-config-loader.d.ts.map +1 -0
- package/dist/services/ssh-config-loader.js +218 -0
- package/dist/services/ssh-config-loader.js.map +1 -0
- package/dist/services/ssh-pool.d.ts +26 -1
- package/dist/services/ssh-pool.d.ts.map +1 -1
- package/dist/services/ssh-pool.js +166 -25
- package/dist/services/ssh-pool.js.map +1 -1
- package/dist/services/ssh-service.d.ts +3 -0
- package/dist/services/ssh-service.d.ts.map +1 -1
- package/dist/services/ssh-service.js +53 -31
- package/dist/services/ssh-service.js.map +1 -1
- package/dist/services/ssh.d.ts +2 -6
- package/dist/services/ssh.d.ts.map +1 -1
- package/dist/services/ssh.js +9 -40
- package/dist/services/ssh.js.map +1 -1
- package/dist/tools/definitions/flux.d.ts +13 -0
- package/dist/tools/definitions/flux.d.ts.map +1 -0
- package/dist/tools/definitions/flux.js +101 -0
- package/dist/tools/definitions/flux.js.map +1 -0
- package/dist/tools/definitions/index.d.ts +8 -0
- package/dist/tools/definitions/index.d.ts.map +1 -0
- package/dist/tools/definitions/index.js +8 -0
- package/dist/tools/definitions/index.js.map +1 -0
- package/dist/tools/definitions/scout.d.ts +13 -0
- package/dist/tools/definitions/scout.d.ts.map +1 -0
- package/dist/tools/definitions/scout.js +78 -0
- package/dist/tools/definitions/scout.js.map +1 -0
- package/dist/tools/flux.d.ts +16 -8
- package/dist/tools/flux.d.ts.map +1 -1
- package/dist/tools/flux.js +27 -66
- package/dist/tools/flux.js.map +1 -1
- package/dist/tools/handlers/base-handler.d.ts +172 -0
- package/dist/tools/handlers/base-handler.d.ts.map +1 -0
- package/dist/tools/handlers/base-handler.js +234 -0
- package/dist/tools/handlers/base-handler.js.map +1 -0
- package/dist/tools/handlers/compose-handlers.d.ts +108 -0
- package/dist/tools/handlers/compose-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/compose-handlers.js +293 -0
- package/dist/tools/handlers/compose-handlers.js.map +1 -0
- package/dist/tools/handlers/compose-utils.d.ts +35 -0
- package/dist/tools/handlers/compose-utils.d.ts.map +1 -0
- package/dist/tools/handlers/compose-utils.js +76 -0
- package/dist/tools/handlers/compose-utils.js.map +1 -0
- package/dist/tools/handlers/compose.d.ts +23 -0
- package/dist/tools/handlers/compose.d.ts.map +1 -0
- package/dist/tools/handlers/compose.js +125 -0
- package/dist/tools/handlers/compose.js.map +1 -0
- package/dist/tools/handlers/container.d.ts +23 -0
- package/dist/tools/handlers/container.d.ts.map +1 -0
- package/dist/tools/handlers/container.js +333 -0
- package/dist/tools/handlers/container.js.map +1 -0
- package/dist/tools/handlers/docker.d.ts +24 -0
- package/dist/tools/handlers/docker.d.ts.map +1 -0
- package/dist/tools/handlers/docker.js +155 -0
- package/dist/tools/handlers/docker.js.map +1 -0
- package/dist/tools/handlers/host.d.ts +23 -0
- package/dist/tools/handlers/host.d.ts.map +1 -0
- package/dist/tools/handlers/host.js +196 -0
- package/dist/tools/handlers/host.js.map +1 -0
- package/dist/tools/handlers/scout-logs.d.ts +24 -0
- package/dist/tools/handlers/scout-logs.d.ts.map +1 -0
- package/dist/tools/handlers/scout-logs.js +119 -0
- package/dist/tools/handlers/scout-logs.js.map +1 -0
- package/dist/tools/handlers/scout-simple.d.ts +23 -0
- package/dist/tools/handlers/scout-simple.d.ts.map +1 -0
- package/dist/tools/handlers/scout-simple.js +286 -0
- package/dist/tools/handlers/scout-simple.js.map +1 -0
- package/dist/tools/handlers/scout-zfs.d.ts +23 -0
- package/dist/tools/handlers/scout-zfs.d.ts.map +1 -0
- package/dist/tools/handlers/scout-zfs.js +82 -0
- package/dist/tools/handlers/scout-zfs.js.map +1 -0
- package/dist/tools/index.d.ts +32 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +41 -35
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +135 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +151 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/scout.d.ts +16 -8
- package/dist/tools/scout.d.ts.map +1 -1
- package/dist/tools/scout.js +36 -78
- package/dist/tools/scout.js.map +1 -1
- package/dist/types.d.ts +629 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/command-security.d.ts +82 -0
- package/dist/utils/command-security.d.ts.map +1 -0
- package/dist/utils/command-security.js +122 -0
- package/dist/utils/command-security.js.map +1 -0
- package/dist/utils/error-sanitization.d.ts +77 -0
- package/dist/utils/error-sanitization.d.ts.map +1 -0
- package/dist/utils/error-sanitization.js +107 -0
- package/dist/utils/error-sanitization.js.map +1 -0
- package/dist/utils/errors.d.ts +30 -6
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +91 -12
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/help-handler.d.ts +23 -0
- package/dist/utils/help-handler.d.ts.map +1 -0
- package/dist/utils/help-handler.js +21 -0
- package/dist/utils/help-handler.js.map +1 -0
- package/dist/utils/help.d.ts +1 -1
- package/dist/utils/help.d.ts.map +1 -1
- package/dist/utils/help.js +57 -16
- package/dist/utils/help.js.map +1 -1
- package/dist/utils/host-utils.d.ts +31 -0
- package/dist/utils/host-utils.d.ts.map +1 -0
- package/dist/utils/host-utils.js +80 -0
- package/dist/utils/host-utils.js.map +1 -0
- package/dist/utils/index.d.ts +8 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +8 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/init-detection.d.ts +36 -0
- package/dist/utils/init-detection.d.ts.map +1 -0
- package/dist/utils/init-detection.js +79 -0
- package/dist/utils/init-detection.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +32 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pagination.d.ts +20 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +29 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/path-security.d.ts +132 -18
- package/dist/utils/path-security.d.ts.map +1 -1
- package/dist/utils/path-security.js +164 -35
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/sorting.d.ts +33 -0
- package/dist/utils/sorting.d.ts.map +1 -0
- package/dist/utils/sorting.js +57 -0
- package/dist/utils/sorting.js.map +1 -0
- package/dist/utils/text-filters.d.ts +13 -0
- package/dist/utils/text-filters.d.ts.map +1 -0
- package/dist/utils/text-filters.js +18 -0
- package/dist/utils/text-filters.js.map +1 -0
- package/dist/utils/time.d.ts +11 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +13 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/validation.d.ts +25 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +56 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +45 -19
- package/dist/schemas/discriminator.d.ts +0 -20
- package/dist/schemas/discriminator.d.ts.map +0 -1
- package/dist/schemas/discriminator.js +0 -25
- package/dist/schemas/discriminator.js.map +0 -1
- package/dist/schemas/unified.d.ts +0 -674
- package/dist/schemas/unified.d.ts.map +0 -1
- package/dist/schemas/unified.js +0 -453
- package/dist/schemas/unified.js.map +0 -1
- package/dist/tools/unified.d.ts +0 -7
- package/dist/tools/unified.d.ts.map +0 -1
- package/dist/tools/unified.js +0 -827
- package/dist/tools/unified.js.map +0 -1
|
@@ -1,18 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { SSHService } from "./ssh-service.js";
|
|
1
|
+
import { EventEmitter } from "../events/index.js";
|
|
2
|
+
import { getCurrentTimestamp } from "../utils/time.js";
|
|
4
3
|
import { ComposeService } from "./compose.js";
|
|
4
|
+
import { ComposeProjectCache } from "./compose-cache.js";
|
|
5
|
+
import { ComposeDiscovery } from "./compose-discovery.js";
|
|
6
|
+
import { ComposeProjectLister } from "./compose-project-lister.js";
|
|
7
|
+
import { ComposeScanner } from "./compose-scanner.js";
|
|
8
|
+
import { ContainerHostMapCache } from "./container-host-map-cache.js";
|
|
9
|
+
import { DockerService } from "./docker/index.js";
|
|
5
10
|
import { FileService } from "./file-service.js";
|
|
11
|
+
import { HostConfigRepository } from "./host-config-repository.js";
|
|
12
|
+
import { LocalExecutorService } from "./local-executor.js";
|
|
13
|
+
import { SSHConnectionPoolImpl } from "./ssh-pool.js";
|
|
14
|
+
import { SSHService } from "./ssh-service.js";
|
|
15
|
+
/**
|
|
16
|
+
* Service lifecycle state
|
|
17
|
+
*/
|
|
18
|
+
export var LifecycleState;
|
|
19
|
+
(function (LifecycleState) {
|
|
20
|
+
/** Container created but not initialized */
|
|
21
|
+
LifecycleState["CREATED"] = "created";
|
|
22
|
+
/** Initialization in progress */
|
|
23
|
+
LifecycleState["INITIALIZING"] = "initializing";
|
|
24
|
+
/** Fully initialized and ready */
|
|
25
|
+
LifecycleState["READY"] = "ready";
|
|
26
|
+
/** Shutdown initiated */
|
|
27
|
+
LifecycleState["SHUTTING_DOWN"] = "shutting_down";
|
|
28
|
+
/** Fully shut down */
|
|
29
|
+
LifecycleState["SHUTDOWN"] = "shutdown";
|
|
30
|
+
})(LifecycleState || (LifecycleState = {}));
|
|
6
31
|
/**
|
|
7
32
|
* Service container for dependency injection.
|
|
8
33
|
* Manages service lifecycle and dependencies.
|
|
9
34
|
*
|
|
10
|
-
*
|
|
35
|
+
* Lifecycle phases:
|
|
36
|
+
* 1. CREATED - Container instantiated
|
|
37
|
+
* 2. INITIALIZING - Services being initialized (async setup)
|
|
38
|
+
* 3. READY - All services ready, accepting requests
|
|
39
|
+
* 4. SHUTTING_DOWN - Graceful shutdown in progress
|
|
40
|
+
* 5. SHUTDOWN - All services stopped
|
|
41
|
+
*
|
|
42
|
+
* Dependency chain (no circular dependencies):
|
|
43
|
+
* - EventEmitter (no dependencies) - application-wide event bus
|
|
44
|
+
* - LocalExecutorService (no dependencies)
|
|
11
45
|
* - SSHConnectionPool (no dependencies)
|
|
46
|
+
* - HostConfigRepository (no dependencies)
|
|
12
47
|
* - SSHService (requires SSHConnectionPool)
|
|
13
|
-
* -
|
|
48
|
+
* - ComposeProjectLister (requires SSHService, LocalExecutorService)
|
|
49
|
+
* - ComposeProjectCache (no dependencies)
|
|
50
|
+
* - ComposeScanner (requires SSHService, LocalExecutorService)
|
|
51
|
+
* - ComposeDiscovery (requires ComposeProjectLister, ComposeProjectCache, ComposeScanner)
|
|
52
|
+
* - ComposeService (requires SSHService, LocalExecutorService, ComposeDiscovery as IComposePathResolver)
|
|
14
53
|
* - FileService (requires SSHService)
|
|
15
54
|
* - DockerService (no dependencies)
|
|
55
|
+
* - HostConfigs (loaded once at startup with 60s TTL cache)
|
|
56
|
+
* - ContainerHostMapCache (no dependencies)
|
|
16
57
|
*/
|
|
17
58
|
export class ServiceContainer {
|
|
18
59
|
dockerService;
|
|
@@ -20,6 +61,18 @@ export class ServiceContainer {
|
|
|
20
61
|
composeService;
|
|
21
62
|
sshPool;
|
|
22
63
|
fileService;
|
|
64
|
+
localExecutor;
|
|
65
|
+
composeProjectLister;
|
|
66
|
+
composeCache;
|
|
67
|
+
composeScanner;
|
|
68
|
+
composeDiscovery;
|
|
69
|
+
hostConfigRepository;
|
|
70
|
+
containerHostMapCache;
|
|
71
|
+
eventEmitter = new EventEmitter();
|
|
72
|
+
/** Current lifecycle state */
|
|
73
|
+
lifecycleState = LifecycleState.CREATED;
|
|
74
|
+
/** Shutdown timeout in milliseconds */
|
|
75
|
+
shutdownTimeout = 30000; // 30 seconds
|
|
23
76
|
/**
|
|
24
77
|
* Get Docker service instance (lazy initialization)
|
|
25
78
|
*/
|
|
@@ -63,11 +116,38 @@ export class ServiceContainer {
|
|
|
63
116
|
this.sshService = service;
|
|
64
117
|
}
|
|
65
118
|
/**
|
|
66
|
-
* Get
|
|
119
|
+
* Get Local executor service instance (lazy initialization)
|
|
120
|
+
*/
|
|
121
|
+
getLocalExecutor() {
|
|
122
|
+
if (!this.localExecutor)
|
|
123
|
+
this.localExecutor = new LocalExecutorService();
|
|
124
|
+
return this.localExecutor;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Set Local executor service instance (for testing/overrides)
|
|
128
|
+
*/
|
|
129
|
+
setLocalExecutor(service) {
|
|
130
|
+
this.localExecutor = service;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get Compose project lister instance (lazy initialization).
|
|
134
|
+
* Standalone service for `docker compose ls` - used by ComposeDiscovery
|
|
135
|
+
* to break the former circular dependency.
|
|
136
|
+
*/
|
|
137
|
+
getComposeProjectLister() {
|
|
138
|
+
if (!this.composeProjectLister) {
|
|
139
|
+
this.composeProjectLister = new ComposeProjectLister(this.getSSHService(), this.getLocalExecutor());
|
|
140
|
+
}
|
|
141
|
+
return this.composeProjectLister;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get Compose service instance (lazy initialization with dependencies).
|
|
145
|
+
* ComposeDiscovery is injected as path resolver via constructor (no setter injection).
|
|
67
146
|
*/
|
|
68
147
|
getComposeService() {
|
|
69
|
-
if (!this.composeService)
|
|
70
|
-
this.composeService = new ComposeService(this.getSSHService());
|
|
148
|
+
if (!this.composeService) {
|
|
149
|
+
this.composeService = new ComposeService(this.getSSHService(), this.getLocalExecutor(), this.getComposeDiscovery());
|
|
150
|
+
}
|
|
71
151
|
return this.composeService;
|
|
72
152
|
}
|
|
73
153
|
/**
|
|
@@ -91,15 +171,310 @@ export class ServiceContainer {
|
|
|
91
171
|
this.fileService = service;
|
|
92
172
|
}
|
|
93
173
|
/**
|
|
94
|
-
*
|
|
95
|
-
* Call during shutdown to ensure clean termination.
|
|
174
|
+
* Get Compose project cache instance (lazy initialization)
|
|
96
175
|
*/
|
|
97
|
-
|
|
176
|
+
getComposeCache() {
|
|
177
|
+
if (!this.composeCache) {
|
|
178
|
+
this.composeCache = new ComposeProjectCache();
|
|
179
|
+
}
|
|
180
|
+
return this.composeCache;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get Compose scanner instance (lazy initialization with dependencies)
|
|
184
|
+
*/
|
|
185
|
+
getComposeScanner() {
|
|
186
|
+
if (!this.composeScanner) {
|
|
187
|
+
this.composeScanner = new ComposeScanner(this.getSSHService(), this.getLocalExecutor());
|
|
188
|
+
}
|
|
189
|
+
return this.composeScanner;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get Compose discovery instance (lazy initialization with dependencies).
|
|
193
|
+
* Uses ComposeProjectLister (not ComposeService) to avoid circular dependency.
|
|
194
|
+
* Dependency chain: ProjectLister -> Discovery -> ComposeService (linear, no cycle).
|
|
195
|
+
*/
|
|
196
|
+
getComposeDiscovery() {
|
|
197
|
+
if (!this.composeDiscovery) {
|
|
198
|
+
this.composeDiscovery = new ComposeDiscovery(this.getComposeProjectLister(), this.getComposeCache(), this.getComposeScanner());
|
|
199
|
+
}
|
|
200
|
+
return this.composeDiscovery;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get Host config repository instance (lazy initialization)
|
|
204
|
+
*/
|
|
205
|
+
getHostConfigRepository() {
|
|
206
|
+
if (!this.hostConfigRepository) {
|
|
207
|
+
// Enable cache by default to avoid 5-50ms per-request file I/O
|
|
208
|
+
this.hostConfigRepository = new HostConfigRepository({ enableCache: true });
|
|
209
|
+
}
|
|
210
|
+
return this.hostConfigRepository;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Set Host config repository instance (for testing/overrides)
|
|
214
|
+
*/
|
|
215
|
+
setHostConfigRepository(repository) {
|
|
216
|
+
this.hostConfigRepository = repository;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get Container host map cache instance (lazy initialization)
|
|
220
|
+
*/
|
|
221
|
+
getContainerHostMapCache() {
|
|
222
|
+
if (!this.containerHostMapCache)
|
|
223
|
+
this.containerHostMapCache = new ContainerHostMapCache();
|
|
224
|
+
return this.containerHostMapCache;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Set Container host map cache instance (for testing/overrides)
|
|
228
|
+
*/
|
|
229
|
+
setContainerHostMapCache(cache) {
|
|
230
|
+
this.containerHostMapCache = cache;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get EventEmitter instance (application-wide event bus).
|
|
234
|
+
* Use this to emit or subscribe to application events.
|
|
235
|
+
*/
|
|
236
|
+
getEventEmitter() {
|
|
237
|
+
return this.eventEmitter;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get current lifecycle state
|
|
241
|
+
*/
|
|
242
|
+
getLifecycleState() {
|
|
243
|
+
return this.lifecycleState;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Check if container is ready to accept requests
|
|
247
|
+
*/
|
|
248
|
+
isReady() {
|
|
249
|
+
return this.lifecycleState === LifecycleState.READY;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Initialize container and perform async service setup
|
|
253
|
+
*
|
|
254
|
+
* Performs:
|
|
255
|
+
* 1. Preload host configurations
|
|
256
|
+
* 2. Start SSH connection pool health checks
|
|
257
|
+
* 3. Emit lifecycle events
|
|
258
|
+
*
|
|
259
|
+
* @throws {Error} If already initialized or shutting down
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```typescript
|
|
263
|
+
* const container = new ServiceContainer();
|
|
264
|
+
* await container.initialize();
|
|
265
|
+
* // Container is now ready to use
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
async initialize() {
|
|
269
|
+
if (this.lifecycleState !== LifecycleState.CREATED) {
|
|
270
|
+
throw new Error(`Cannot initialize: container is ${this.lifecycleState}. Must be in CREATED state.`);
|
|
271
|
+
}
|
|
272
|
+
this.lifecycleState = LifecycleState.INITIALIZING;
|
|
273
|
+
this.eventEmitter.emit({
|
|
274
|
+
type: "container_state_changed",
|
|
275
|
+
containerId: "service-container",
|
|
276
|
+
action: "start",
|
|
277
|
+
host: "local",
|
|
278
|
+
timestamp: getCurrentTimestamp(),
|
|
279
|
+
});
|
|
280
|
+
try {
|
|
281
|
+
// Preload host configurations (enables caching)
|
|
282
|
+
const hostRepo = this.getHostConfigRepository();
|
|
283
|
+
await hostRepo.loadHosts();
|
|
284
|
+
// SSH pool starts health checks automatically when first connection is created
|
|
285
|
+
// No explicit initialization needed
|
|
286
|
+
this.lifecycleState = LifecycleState.READY;
|
|
287
|
+
this.eventEmitter.emit({
|
|
288
|
+
type: "container_state_changed",
|
|
289
|
+
containerId: "service-container",
|
|
290
|
+
action: "start",
|
|
291
|
+
host: "local",
|
|
292
|
+
timestamp: getCurrentTimestamp(),
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
this.lifecycleState = LifecycleState.CREATED; // Reset to created on failure
|
|
297
|
+
throw new Error(`Container initialization failed: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Perform health checks on all initialized services
|
|
302
|
+
*
|
|
303
|
+
* Returns health status for each service. Useful for monitoring
|
|
304
|
+
* and graceful degradation.
|
|
305
|
+
*
|
|
306
|
+
* @returns Array of service health statuses
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* ```typescript
|
|
310
|
+
* const health = await container.healthCheck();
|
|
311
|
+
* const unhealthy = health.filter(h => !h.healthy);
|
|
312
|
+
* if (unhealthy.length > 0) {
|
|
313
|
+
* console.error('Unhealthy services:', unhealthy);
|
|
314
|
+
* }
|
|
315
|
+
* ```
|
|
316
|
+
*/
|
|
317
|
+
async healthCheck() {
|
|
318
|
+
const results = [];
|
|
319
|
+
// Check SSH connection pool
|
|
320
|
+
if (this.sshPool) {
|
|
321
|
+
const startTime = Date.now();
|
|
322
|
+
try {
|
|
323
|
+
const poolHealth = this.sshPool.getHealth();
|
|
324
|
+
results.push({
|
|
325
|
+
name: "SSHConnectionPool",
|
|
326
|
+
healthy: poolHealth.healthy,
|
|
327
|
+
message: poolHealth.healthy ? undefined : "Pool unhealthy or has failed connections",
|
|
328
|
+
responseTime: Date.now() - startTime,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
results.push({
|
|
333
|
+
name: "SSHConnectionPool",
|
|
334
|
+
healthy: false,
|
|
335
|
+
message: error instanceof Error ? error.message : String(error),
|
|
336
|
+
responseTime: Date.now() - startTime,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Check host config repository (can it load hosts?)
|
|
341
|
+
if (this.hostConfigRepository) {
|
|
342
|
+
const startTime = Date.now();
|
|
343
|
+
try {
|
|
344
|
+
const hosts = await this.hostConfigRepository.loadHosts();
|
|
345
|
+
results.push({
|
|
346
|
+
name: "HostConfigRepository",
|
|
347
|
+
healthy: hosts.length > 0,
|
|
348
|
+
message: hosts.length === 0 ? "No hosts configured" : undefined,
|
|
349
|
+
responseTime: Date.now() - startTime,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
results.push({
|
|
354
|
+
name: "HostConfigRepository",
|
|
355
|
+
healthy: false,
|
|
356
|
+
message: error instanceof Error ? error.message : String(error),
|
|
357
|
+
responseTime: Date.now() - startTime,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Check Docker service (is it instantiated?)
|
|
362
|
+
if (this.dockerService) {
|
|
363
|
+
results.push({
|
|
364
|
+
name: "DockerService",
|
|
365
|
+
healthy: true,
|
|
366
|
+
message: "Service instantiated",
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
// Check event emitter (listener count as health indicator)
|
|
370
|
+
const eventTypes = [
|
|
371
|
+
"cache_invalidated",
|
|
372
|
+
"container_state_changed",
|
|
373
|
+
"compose_operation",
|
|
374
|
+
];
|
|
375
|
+
const listenerCount = eventTypes.reduce((sum, eventType) => sum + this.eventEmitter.listenerCount(eventType), 0);
|
|
376
|
+
results.push({
|
|
377
|
+
name: "EventEmitter",
|
|
378
|
+
healthy: true,
|
|
379
|
+
message: `${listenerCount} active listeners`,
|
|
380
|
+
});
|
|
381
|
+
return results;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Gracefully shut down container and all services
|
|
385
|
+
*
|
|
386
|
+
* Performs ordered shutdown:
|
|
387
|
+
* 1. Stop accepting new requests (set state to SHUTTING_DOWN)
|
|
388
|
+
* 2. Wait for in-flight operations (via timeout)
|
|
389
|
+
* 3. Close all connections
|
|
390
|
+
* 4. Clear caches
|
|
391
|
+
* 5. Emit shutdown complete event
|
|
392
|
+
*
|
|
393
|
+
* @param timeout - Maximum time to wait for graceful shutdown (ms)
|
|
394
|
+
* @throws {Error} If shutdown times out
|
|
395
|
+
*
|
|
396
|
+
* @example
|
|
397
|
+
* ```typescript
|
|
398
|
+
* // Graceful shutdown with 30s timeout
|
|
399
|
+
* await container.shutdown();
|
|
400
|
+
*
|
|
401
|
+
* // Custom timeout
|
|
402
|
+
* await container.shutdown(10000); // 10 seconds
|
|
403
|
+
* ```
|
|
404
|
+
*/
|
|
405
|
+
async shutdown(timeout = this.shutdownTimeout) {
|
|
406
|
+
if (this.lifecycleState === LifecycleState.SHUTDOWN) {
|
|
407
|
+
return; // Already shut down
|
|
408
|
+
}
|
|
409
|
+
if (this.lifecycleState === LifecycleState.SHUTTING_DOWN) {
|
|
410
|
+
throw new Error("Shutdown already in progress");
|
|
411
|
+
}
|
|
412
|
+
this.lifecycleState = LifecycleState.SHUTTING_DOWN;
|
|
413
|
+
this.eventEmitter.emit({
|
|
414
|
+
type: "container_state_changed",
|
|
415
|
+
containerId: "service-container",
|
|
416
|
+
action: "stop",
|
|
417
|
+
host: "local",
|
|
418
|
+
timestamp: getCurrentTimestamp(),
|
|
419
|
+
});
|
|
420
|
+
let timeoutId;
|
|
421
|
+
try {
|
|
422
|
+
// Create timeout promise with clearable timer to prevent leaks
|
|
423
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
424
|
+
timeoutId = setTimeout(() => reject(new Error(`Shutdown timed out after ${timeout}ms`)), timeout);
|
|
425
|
+
});
|
|
426
|
+
// Perform cleanup with timeout (closes connections, clears caches)
|
|
427
|
+
await Promise.race([this.performCleanup(), timeoutPromise]);
|
|
428
|
+
this.lifecycleState = LifecycleState.SHUTDOWN;
|
|
429
|
+
// Emit final shutdown event BEFORE removing listeners so subscribers
|
|
430
|
+
// can observe the shutdown completion
|
|
431
|
+
this.eventEmitter.emit({
|
|
432
|
+
type: "container_state_changed",
|
|
433
|
+
containerId: "service-container",
|
|
434
|
+
action: "stop",
|
|
435
|
+
host: "local",
|
|
436
|
+
timestamp: getCurrentTimestamp(),
|
|
437
|
+
});
|
|
438
|
+
// Now safe to remove all listeners
|
|
439
|
+
this.eventEmitter.removeAllListeners();
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
// Even if timeout occurs, mark as shutdown and clean up listeners
|
|
443
|
+
this.lifecycleState = LifecycleState.SHUTDOWN;
|
|
444
|
+
this.eventEmitter.removeAllListeners();
|
|
445
|
+
throw error;
|
|
446
|
+
}
|
|
447
|
+
finally {
|
|
448
|
+
// Clear the timeout timer to prevent leaks and unhandled rejections
|
|
449
|
+
if (timeoutId !== undefined)
|
|
450
|
+
clearTimeout(timeoutId);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Close connections and clear caches without removing event listeners.
|
|
455
|
+
* Used internally by shutdown() which handles listener cleanup after
|
|
456
|
+
* emitting the final shutdown event.
|
|
457
|
+
*/
|
|
458
|
+
async performCleanup() {
|
|
98
459
|
if (this.sshPool)
|
|
99
460
|
await this.sshPool.closeAll();
|
|
100
461
|
if (this.dockerService) {
|
|
101
462
|
this.dockerService.clearClients();
|
|
102
463
|
}
|
|
464
|
+
if (this.hostConfigRepository) {
|
|
465
|
+
this.hostConfigRepository.clearCache();
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Cleanup all services and close connections.
|
|
470
|
+
* Call during shutdown to ensure clean termination.
|
|
471
|
+
*
|
|
472
|
+
* @deprecated Use shutdown() for graceful shutdown with timeout.
|
|
473
|
+
* This method is kept for backward compatibility but performs immediate cleanup.
|
|
474
|
+
*/
|
|
475
|
+
async cleanup() {
|
|
476
|
+
await this.performCleanup();
|
|
477
|
+
this.eventEmitter.removeAllListeners();
|
|
103
478
|
}
|
|
104
479
|
}
|
|
105
480
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic checks for host health monitoring
|
|
3
|
+
*
|
|
4
|
+
* Provides actionable health checks for Docker hosts:
|
|
5
|
+
* - Resources: CPU/memory/disk thresholds
|
|
6
|
+
* - Containers: Exited/unhealthy container detection
|
|
7
|
+
* - Logs: Recent error pattern scanning
|
|
8
|
+
* - Processes: Zombie/defunct process detection
|
|
9
|
+
* - Docker: Daemon health verification
|
|
10
|
+
* - Network: Connectivity testing
|
|
11
|
+
*/
|
|
12
|
+
import type { HostConfig } from "../types.js";
|
|
13
|
+
import type { ISSHService, IDockerService } from "./interfaces.js";
|
|
14
|
+
/**
|
|
15
|
+
* Diagnostic check status
|
|
16
|
+
*/
|
|
17
|
+
export type DiagnosticStatus = "pass" | "warn" | "fail";
|
|
18
|
+
/**
|
|
19
|
+
* Result of a diagnostic check
|
|
20
|
+
*/
|
|
21
|
+
export interface DiagnosticCheckResult {
|
|
22
|
+
status: DiagnosticStatus;
|
|
23
|
+
message: string;
|
|
24
|
+
details?: string;
|
|
25
|
+
recommendations?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check host resources (CPU, memory, disk)
|
|
29
|
+
* Warns if any resource exceeds 80% usage
|
|
30
|
+
*/
|
|
31
|
+
export declare function checkResources(host: HostConfig, sshService: ISSHService): Promise<DiagnosticCheckResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Check container health
|
|
34
|
+
* Finds exited or unhealthy containers
|
|
35
|
+
*/
|
|
36
|
+
export declare function checkContainers(host: HostConfig, dockerService: IDockerService): Promise<DiagnosticCheckResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Check system logs for error patterns
|
|
39
|
+
* Scans journalctl for recent errors/warnings
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkLogs(host: HostConfig, sshService: ISSHService): Promise<DiagnosticCheckResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Check for zombie or defunct processes
|
|
44
|
+
* Detects processes that failed to clean up properly
|
|
45
|
+
*/
|
|
46
|
+
export declare function checkProcesses(host: HostConfig, sshService: ISSHService): Promise<DiagnosticCheckResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Check Docker daemon health
|
|
49
|
+
* Verifies Docker API connectivity and version
|
|
50
|
+
*/
|
|
51
|
+
export declare function checkDocker(host: HostConfig, dockerService: IDockerService): Promise<DiagnosticCheckResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Check network connectivity
|
|
54
|
+
* Tests external connectivity and measures latency
|
|
55
|
+
*/
|
|
56
|
+
export declare function checkNetwork(host: HostConfig, sshService: ISSHService): Promise<DiagnosticCheckResult>;
|
|
57
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/services/diagnostics.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGnE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,qBAAqB,CAAC,CAoDhC;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAsDhC;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,qBAAqB,CAAC,CA4ChC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,qBAAqB,CAAC,CA0ChC;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAuBhC;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,qBAAqB,CAAC,CAqChC"}
|