blockmine 1.21.0 → 1.23.0
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/.claude/agents/README.md +469 -0
- package/.claude/agents/auth-route-debugger.md +118 -0
- package/.claude/agents/auth-route-tester.md +93 -0
- package/.claude/agents/auto-error-resolver.md +97 -0
- package/.claude/agents/build-optimizer.md +236 -0
- package/.claude/agents/code-architecture-reviewer.md +83 -0
- package/.claude/agents/code-refactor-master.md +94 -0
- package/.claude/agents/cost-optimizer.md +134 -0
- package/.claude/agents/deployment-orchestrator.md +113 -0
- package/.claude/agents/documentation-architect.md +82 -0
- package/.claude/agents/frontend-error-fixer.md +77 -0
- package/.claude/agents/iac-code-generator.md +71 -0
- package/.claude/agents/incident-responder.md +346 -0
- package/.claude/agents/infrastructure-architect.md +31 -0
- package/.claude/agents/kubernetes-specialist.md +56 -0
- package/.claude/agents/migration-planner.md +181 -0
- package/.claude/agents/network-architect.md +196 -0
- package/.claude/agents/plan-reviewer.md +52 -0
- package/.claude/agents/refactor-planner.md +63 -0
- package/.claude/agents/security-scanner.md +102 -0
- package/.claude/agents/web-research-specialist.md +78 -0
- package/.claude/commands/cost-analysis.md +315 -0
- package/.claude/commands/dev-docs-update.md +55 -0
- package/.claude/commands/dev-docs.md +51 -0
- package/.claude/commands/incident-debug.md +247 -0
- package/.claude/commands/infra-plan.md +81 -0
- package/.claude/commands/migration-plan.md +478 -0
- package/.claude/commands/route-research-for-testing.md +37 -0
- package/.claude/commands/security-review.md +66 -0
- package/.claude/hooks/CONFIG.md +448 -0
- package/.claude/hooks/README.md +163 -0
- package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
- package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
- package/.claude/hooks/add-skill-activation-banners.ts +132 -0
- package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
- package/.claude/hooks/error-handling-reminder.sh +12 -0
- package/.claude/hooks/error-handling-reminder.ts +222 -0
- package/.claude/hooks/k8s-manifest-validator.sh +56 -0
- package/.claude/hooks/package-lock.json +556 -0
- package/.claude/hooks/package.json +16 -0
- package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
- package/.claude/hooks/post-tool-use-tracker.sh +183 -0
- package/.claude/hooks/security-policy-check.sh +247 -0
- package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
- package/.claude/hooks/skill-activation-prompt.sh +10 -0
- package/.claude/hooks/skill-activation-prompt.ts +141 -0
- package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
- package/.claude/hooks/terraform-validator.sh +53 -0
- package/.claude/hooks/test-input.json +7 -0
- package/.claude/hooks/test-skill-activation.ts +427 -0
- package/.claude/hooks/trigger-build-resolver.sh +79 -0
- package/.claude/hooks/tsc-check.sh +173 -0
- package/.claude/hooks/tsconfig.json +19 -0
- package/.claude/settings.json +59 -0
- package/.claude/settings.local.json +36 -14
- package/.claude/skills/README.md +507 -0
- package/.claude/skills/api-engineering/SKILL.md +63 -0
- package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
- package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
- package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
- package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
- package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
- package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
- package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
- package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
- package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
- package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
- package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
- package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
- package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
- package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
- package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
- package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
- package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
- package/.claude/skills/build-engineering/SKILL.md +431 -0
- package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
- package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
- package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
- package/.claude/skills/build-engineering/resources/build-security.md +95 -0
- package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
- package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
- package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
- package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
- package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
- package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
- package/.claude/skills/cloud-engineering/SKILL.md +675 -0
- package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
- package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
- package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
- package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
- package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
- package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
- package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
- package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
- package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
- package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
- package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
- package/.claude/skills/cybersecurity/SKILL.md +409 -0
- package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
- package/.claude/skills/database-engineering/SKILL.md +61 -0
- package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
- package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
- package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
- package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
- package/.claude/skills/devsecops/SKILL.md +374 -0
- package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
- package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
- package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
- package/.claude/skills/devsecops/resources/container-security.md +915 -0
- package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
- package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
- package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
- package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
- package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
- package/.claude/skills/devsecops/resources/security-testing.md +203 -0
- package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
- package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
- package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
- package/.claude/skills/documentation-as-code/SKILL.md +323 -0
- package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
- package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
- package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
- package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
- package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
- package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
- package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
- package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
- package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
- package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
- package/.claude/skills/engineering-management/SKILL.md +356 -0
- package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
- package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
- package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
- package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
- package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
- package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
- package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
- package/.claude/skills/error-tracking/SKILL.md +379 -0
- package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
- package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
- package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
- package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
- package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
- package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
- package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
- package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
- package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
- package/.claude/skills/general-it-engineering/SKILL.md +393 -0
- package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
- package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
- package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
- package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
- package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
- package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
- package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
- package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
- package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
- package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
- package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
- package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
- package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
- package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
- package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
- package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
- package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
- package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
- package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
- package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
- package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
- package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
- package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
- package/.claude/skills/network-engineering/SKILL.md +385 -0
- package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
- package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
- package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
- package/.claude/skills/network-engineering/resources/network-security.md +921 -0
- package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
- package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
- package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
- package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
- package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
- package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
- package/.claude/skills/observability-engineering/SKILL.md +101 -0
- package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
- package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
- package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
- package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
- package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
- package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
- package/.claude/skills/platform-engineering/SKILL.md +555 -0
- package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
- package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
- package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
- package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
- package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
- package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
- package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
- package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
- package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
- package/.claude/skills/release-engineering/SKILL.md +393 -0
- package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
- package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
- package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
- package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
- package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
- package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
- package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
- package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
- package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
- package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
- package/.claude/skills/route-tester/SKILL.md +392 -0
- package/.claude/skills/skill-developer/ADVANCED.md +197 -0
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
- package/.claude/skills/skill-developer/SKILL.md +430 -0
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
- package/.claude/skills/skill-rules.json +2940 -0
- package/.claude/skills/sre/SKILL.md +464 -0
- package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
- package/.claude/skills/sre/resources/capacity-planning.md +226 -0
- package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
- package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
- package/.claude/skills/sre/resources/incident-management.md +436 -0
- package/.claude/skills/sre/resources/observability-stack.md +240 -0
- package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
- package/.claude/skills/sre/resources/performance-optimization.md +108 -0
- package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
- package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
- package/.claude/skills/sre/resources/toil-reduction.md +145 -0
- package/.claude/skills/systems-engineering/SKILL.md +648 -0
- package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
- package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
- package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
- package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
- package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
- package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
- package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
- package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
- package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
- package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
- package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
- package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
- package/.claude/skills/technical-leadership/SKILL.md +728 -0
- package/CHANGELOG.md +102 -42
- package/CLAUDE.md +284 -0
- package/README.md +315 -71
- package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
- package/backend/jest.config.js +59 -0
- package/backend/package-lock.json +6801 -0
- package/backend/package.json +24 -4
- package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
- package/backend/prisma/migrations/20251116111851_add_execution_trace/migration.sql +22 -0
- package/backend/prisma/migrations/20251120154914_add_panel_api_keys/migration.sql +21 -0
- package/backend/prisma/migrations/20251121110241_add_proxy_table/migration.sql +45 -0
- package/backend/prisma/migrations/migration_lock.toml +2 -2
- package/backend/prisma/schema.prisma +103 -1
- package/backend/src/__tests__/core/DependencyService.test.js +336 -0
- package/backend/src/__tests__/core/UserService.test.js +875 -0
- package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
- package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
- package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
- package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
- package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
- package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
- package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
- package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
- package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
- package/backend/src/__tests__/secretsFilter.test.js +425 -0
- package/backend/src/__tests__/services/BotLifecycleService.test.js +416 -0
- package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
- package/backend/src/__tests__/services/CacheManager.test.js +125 -0
- package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
- package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
- package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
- package/backend/src/__tests__/setup.js +25 -0
- package/backend/src/ai/plugin-assistant-system-prompt.md +788 -0
- package/backend/src/api/middleware/auth.js +27 -0
- package/backend/src/api/middleware/botAccess.js +7 -3
- package/backend/src/api/middleware/panelApiAuth.js +135 -0
- package/backend/src/api/routes/aiAssistant.js +995 -0
- package/backend/src/api/routes/apiKeys.js +181 -0
- package/backend/src/api/routes/auth.js +669 -633
- package/backend/src/api/routes/botCommands.js +107 -0
- package/backend/src/api/routes/botGroups.js +165 -0
- package/backend/src/api/routes/botHistory.js +108 -0
- package/backend/src/api/routes/botPermissions.js +99 -0
- package/backend/src/api/routes/botStatus.js +36 -0
- package/backend/src/api/routes/botUsers.js +162 -0
- package/backend/src/api/routes/bots.js +2451 -2360
- package/backend/src/api/routes/eventGraphs.js +4 -1
- package/backend/src/api/routes/logs.js +13 -3
- package/backend/src/api/routes/panel.js +66 -66
- package/backend/src/api/routes/panelApiKeys.js +179 -0
- package/backend/src/api/routes/pluginIde.js +1715 -135
- package/backend/src/api/routes/plugins.js +376 -218
- package/backend/src/api/routes/proxies.js +130 -0
- package/backend/src/api/routes/search.js +4 -0
- package/backend/src/api/routes/servers.js +20 -3
- package/backend/src/api/routes/settings.js +5 -0
- package/backend/src/api/routes/system.js +174 -0
- package/backend/src/api/routes/traces.js +131 -0
- package/backend/src/config/debug.config.js +36 -0
- package/backend/src/container.js +82 -0
- package/backend/src/core/BotHistoryStore.js +180 -0
- package/backend/src/core/BotManager.js +149 -868
- package/backend/src/core/BotManager.old.js +1093 -0
- package/backend/src/core/BotProcess.js +850 -191
- package/backend/src/core/EventGraphManager.js +194 -198
- package/backend/src/core/GraphExecutionEngine.js +709 -57
- package/backend/src/core/MessageQueue.js +39 -12
- package/backend/src/core/NodeRegistry.js +37 -1134
- package/backend/src/core/PluginLoader.js +99 -5
- package/backend/src/core/PluginManager.js +126 -15
- package/backend/src/core/PrismaService.js +32 -0
- package/backend/src/core/TaskScheduler.js +1 -1
- package/backend/src/core/UserService.js +3 -3
- package/backend/src/core/__tests__/PrismaService.test.js +24 -0
- package/backend/src/core/commands/README.md +305 -0
- package/backend/src/core/commands/dev.js +13 -7
- package/backend/src/core/commands/ping.js +10 -4
- package/backend/src/core/commands/whois.js +63 -0
- package/backend/src/core/config/validation.js +27 -0
- package/backend/src/core/constants/graphTypes.js +21 -0
- package/backend/src/core/node-registries/actions.js +202 -0
- package/backend/src/core/node-registries/arrays.js +155 -0
- package/backend/src/core/node-registries/bot.js +23 -0
- package/backend/src/core/node-registries/data.js +290 -0
- package/backend/src/core/node-registries/debug.js +26 -0
- package/backend/src/core/node-registries/events.js +201 -0
- package/backend/src/core/node-registries/flow.js +139 -0
- package/backend/src/core/node-registries/logic.js +62 -0
- package/backend/src/core/node-registries/math.js +42 -0
- package/backend/src/core/node-registries/objects.js +98 -0
- package/backend/src/core/node-registries/strings.js +187 -0
- package/backend/src/core/node-registries/time.js +113 -0
- package/backend/src/core/node-registries/type.js +25 -0
- package/backend/src/core/node-registries/users.js +79 -0
- package/backend/src/core/nodes/{action_bot_look_at.js → actions/bot_look_at.js} +36 -36
- package/backend/src/core/nodes/{action_bot_set_variable.js → actions/bot_set_variable.js} +32 -32
- package/backend/src/core/nodes/actions/create_command.js +189 -0
- package/backend/src/core/nodes/actions/delete_command.js +92 -0
- package/backend/src/core/nodes/{action_send_log.js → actions/send_log.js} +28 -23
- package/backend/src/core/nodes/{action_send_message.js → actions/send_message.js} +32 -32
- package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
- package/backend/src/core/nodes/actions/update_command.js +133 -0
- package/backend/src/core/nodes/arrays/get_next.js +35 -0
- package/backend/src/core/nodes/arrays/join.js +28 -0
- package/backend/src/core/nodes/{data_cast.js → data/cast.js} +10 -1
- package/backend/src/core/nodes/data/datetime_literal.js +27 -0
- package/backend/src/core/nodes/data/entity_info.js +69 -0
- package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
- package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
- package/backend/src/core/nodes/{data_get_user_field.js → data/get_user_field.js} +1 -1
- package/backend/src/core/nodes/data/type_check.js +53 -0
- package/backend/src/core/nodes/{debug_log.js → debug/log.js} +16 -16
- package/backend/src/core/nodes/{flow_branch.js → flow/branch.js} +15 -15
- package/backend/src/core/nodes/{flow_break.js → flow/break.js} +14 -14
- package/backend/src/core/nodes/flow/delay.js +43 -0
- package/backend/src/core/nodes/{flow_for_each.js → flow/for_each.js} +39 -39
- package/backend/src/core/nodes/{flow_sequence.js → flow/sequence.js} +16 -16
- package/backend/src/core/nodes/{flow_switch.js → flow/switch.js} +47 -47
- package/backend/src/core/nodes/{flow_while.js → flow/while.js} +1 -1
- package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
- package/backend/src/core/nodes/logic/not.js +22 -0
- package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
- package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
- package/backend/src/core/nodes/{string_starts_with.js → strings/starts_with.js} +1 -1
- package/backend/src/core/nodes/strings/to_lower.js +22 -0
- package/backend/src/core/nodes/strings/to_upper.js +22 -0
- package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
- package/backend/src/core/nodes/time/add.js +33 -0
- package/backend/src/core/nodes/time/compare.js +35 -0
- package/backend/src/core/nodes/time/diff.js +29 -0
- package/backend/src/core/nodes/time/format.js +32 -0
- package/backend/src/core/nodes/time/now.js +18 -0
- package/backend/src/core/nodes/type/to_string.js +32 -0
- package/backend/src/core/nodes/{user_check_blacklist.js → users/check_blacklist.js} +37 -37
- package/backend/src/core/nodes/{user_get_groups.js → users/get_groups.js} +36 -36
- package/backend/src/core/nodes/{user_get_permissions.js → users/get_permissions.js} +36 -36
- package/backend/src/core/nodes/{user_set_blacklist.js → users/set_blacklist.js} +37 -37
- package/backend/src/core/services/BotLifecycleService.js +835 -0
- package/backend/src/core/services/BotProcessManager.js +163 -0
- package/backend/src/core/services/CacheManager.js +111 -0
- package/backend/src/core/services/CommandExecutionService.js +430 -0
- package/backend/src/core/services/DebugSessionManager.js +347 -0
- package/backend/src/core/services/GraphCollaborationManager.js +501 -0
- package/backend/src/core/services/MinecraftBotManager.js +259 -0
- package/backend/src/core/services/MinecraftViewerService.js +216 -0
- package/backend/src/core/services/ResourceMonitorService.js +90 -0
- package/backend/src/core/services/TelemetryService.js +124 -0
- package/backend/src/core/services/TraceCollectorService.js +545 -0
- package/backend/src/core/services/ValidationService.js +132 -0
- package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
- package/backend/src/core/services.js +20 -5
- package/backend/src/core/system/CommandContext.js +84 -0
- package/backend/src/core/system/RuntimeCommandRegistry.js +116 -0
- package/backend/src/core/system/Transport.js +74 -0
- package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
- package/backend/src/core/utils/jsonParser.js +18 -0
- package/backend/src/core/utils/secretsFilter.js +262 -0
- package/backend/src/core/utils/variableParser.js +89 -0
- package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
- package/backend/src/core/validation/nodeSchemas.js +112 -0
- package/backend/src/lib/prisma.js +2 -4
- package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
- package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
- package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
- package/backend/src/real-time/botApi/handlers/index.js +43 -0
- package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
- package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
- package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
- package/backend/src/real-time/botApi/index.js +40 -0
- package/backend/src/real-time/botApi/middleware.js +79 -0
- package/backend/src/real-time/botApi/utils.js +65 -0
- package/backend/src/real-time/panelNamespace.js +387 -0
- package/backend/src/real-time/presence.js +7 -2
- package/backend/src/real-time/socketHandler.js +400 -5
- package/backend/src/repositories/BaseRepository.js +43 -0
- package/backend/src/repositories/BotRepository.js +42 -0
- package/backend/src/repositories/CommandRepository.js +53 -0
- package/backend/src/repositories/EventGraphRepository.js +40 -0
- package/backend/src/repositories/GroupRepository.js +69 -0
- package/backend/src/repositories/PermissionRepository.js +48 -0
- package/backend/src/repositories/PluginRepository.js +42 -0
- package/backend/src/repositories/ServerRepository.js +27 -0
- package/backend/src/repositories/UserRepository.js +48 -0
- package/backend/src/server.js +21 -0
- package/backend/src/test-refactor.js +85 -0
- package/frontend/dist/assets/index-B1serztM.js +11210 -0
- package/frontend/dist/assets/index-t6K1u4OV.css +32 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package-lock.json +9437 -0
- package/frontend/package.json +8 -5
- package/package.json +3 -2
- package/screen/console.png +0 -0
- package/screen/dashboard.png +0 -0
- package/screen/graph_collabe.png +0 -0
- package/screen/graph_live_debug.png +0 -0
- package/screen/management_command.png +0 -0
- package/screen/node_debug_trace.png +0 -0
- package/screen/plugin_/320/276/320/261/320/267/320/276/321/200.png +0 -0
- package/screen/websocket.png +0 -0
- package/screen//320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270_/320/276/321/202/320/264/320/265/320/273/321/214/320/275/321/213/321/205_/320/272/320/276/320/274/320/260/320/275/320/264_/320/272/320/260/320/266/320/264/321/203_/320/272/320/276/320/274/320/260/320/275/320/273/320/264/321/203_/320/274/320/276/320/266/320/275/320/276_/320/275/320/260/321/201/321/202/321/200/320/260/320/270/320/262/320/260/321/202/321/214.png +0 -0
- package/screen//320/277/320/273/320/260/320/275/320/270/321/200/320/276/320/262/321/211/320/270/320/272_/320/274/320/276/320/266/320/275/320/276_/320/267/320/260/320/264/320/260/320/262/320/260/321/202/321/214_/320/264/320/265/320/271/321/201/321/202/320/262/320/270/321/217_/320/277/320/276_/320/262/321/200/320/265/320/274/320/265/320/275/320/270.png +0 -0
- package/frontend/dist/assets/index-B9GedHEa.js +0 -8352
- package/frontend/dist/assets/index-zLiy9MDx.css +0 -1
- package/nul +0 -0
- /package/backend/src/core/nodes/{action_http_request.js → actions/http_request.js} +0 -0
- /package/backend/src/core/nodes/{array_add_element.js → arrays/add_element.js} +0 -0
- /package/backend/src/core/nodes/{array_contains.js → arrays/contains.js} +0 -0
- /package/backend/src/core/nodes/{array_find_index.js → arrays/find_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_by_index.js → arrays/get_by_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_random_element.js → arrays/get_random_element.js} +0 -0
- /package/backend/src/core/nodes/{array_remove_by_index.js → arrays/remove_by_index.js} +0 -0
- /package/backend/src/core/nodes/{bot_get_position.js → bot/get_position.js} +0 -0
- /package/backend/src/core/nodes/{data_array_literal.js → data/array_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_boolean_literal.js → data/boolean_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_get_argument.js → data/get_argument.js} +0 -0
- /package/backend/src/core/nodes/{data_get_bot_look.js → data/get_bot_look.js} +0 -0
- /package/backend/src/core/nodes/{data_get_entity_field.js → data/get_entity_field.js} +0 -0
- /package/backend/src/core/nodes/{data_get_server_players.js → data/get_server_players.js} +0 -0
- /package/backend/src/core/nodes/{data_get_variable.js → data/get_variable.js} +0 -0
- /package/backend/src/core/nodes/{data_length.js → data/length.js} +0 -0
- /package/backend/src/core/nodes/{data_make_object.js → data/make_object.js} +0 -0
- /package/backend/src/core/nodes/{data_number_literal.js → data/number_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_string_literal.js → data/string_literal.js} +0 -0
- /package/backend/src/core/nodes/{logic_compare.js → logic/compare.js} +0 -0
- /package/backend/src/core/nodes/{logic_operation.js → logic/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_operation.js → math/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_random_number.js → math/random_number.js} +0 -0
- /package/backend/src/core/nodes/{object_create.js → objects/create.js} +0 -0
- /package/backend/src/core/nodes/{object_delete.js → objects/delete.js} +0 -0
- /package/backend/src/core/nodes/{object_get.js → objects/get.js} +0 -0
- /package/backend/src/core/nodes/{object_has_key.js → objects/has_key.js} +0 -0
- /package/backend/src/core/nodes/{object_set.js → objects/set.js} +0 -0
- /package/backend/src/core/nodes/{string_concat.js → strings/concat.js} +0 -0
- /package/backend/src/core/nodes/{string_contains.js → strings/contains.js} +0 -0
- /package/backend/src/core/nodes/{string_ends_with.js → strings/ends_with.js} +0 -0
- /package/backend/src/core/nodes/{string_equals.js → strings/equals.js} +0 -0
- /package/backend/src/core/nodes/{string_length.js → strings/length.js} +0 -0
- /package/backend/src/core/nodes/{string_matches.js → strings/matches.js} +0 -0
- /package/backend/src/core/nodes/{string_split.js → strings/split.js} +0 -0
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
# Migration Architecture
|
|
2
|
+
|
|
3
|
+
Guide to planning and executing infrastructure migrations with minimal risk and downtime.
|
|
4
|
+
|
|
5
|
+
## Migration Patterns
|
|
6
|
+
|
|
7
|
+
### 1. Strangler Fig Pattern
|
|
8
|
+
|
|
9
|
+
**Gradually replace old system with new:**
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Phase 1: Both systems running, proxy routes to old
|
|
13
|
+
┌──────┐ ┌─────────┐
|
|
14
|
+
│Client│────►│ Proxy │────►Old System (100%)
|
|
15
|
+
└──────┘ └─────────┘
|
|
16
|
+
|
|
17
|
+
Phase 2: Route new features to new system
|
|
18
|
+
┌──────┐ ┌─────────┐────►Old System (90%)
|
|
19
|
+
│Client│────►│ Proxy │
|
|
20
|
+
└──────┘ └─────────┘────►New System (10%)
|
|
21
|
+
|
|
22
|
+
Phase 3: Gradually shift traffic
|
|
23
|
+
┌──────┐ ┌─────────┐────►Old System (50%)
|
|
24
|
+
│Client│────►│ Proxy │
|
|
25
|
+
└──────┘ └─────────┘────►New System (50%)
|
|
26
|
+
|
|
27
|
+
Phase 4: Complete migration
|
|
28
|
+
┌──────┐ ┌─────────┐
|
|
29
|
+
│Client│────►│ Proxy │────►New System (100%)
|
|
30
|
+
└──────┘ └─────────┘ Old System (decommissioned)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Example:**
|
|
34
|
+
```typescript
|
|
35
|
+
// API proxy routing old → new gradually
|
|
36
|
+
app.use((req, res, next) => {
|
|
37
|
+
const rolloutPercentage = 20; // Start with 20%
|
|
38
|
+
|
|
39
|
+
// Feature flag or random routing
|
|
40
|
+
if (Math.random() * 100 < rolloutPercentage) {
|
|
41
|
+
return proxyToNewAPI(req, res); // New system
|
|
42
|
+
} else {
|
|
43
|
+
return proxyToOldAPI(req, res); // Old system
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Advantages:**
|
|
49
|
+
- ✅ Low risk (gradual rollout)
|
|
50
|
+
- ✅ Easy rollback
|
|
51
|
+
- ✅ No big bang
|
|
52
|
+
- ✅ Continuous delivery
|
|
53
|
+
|
|
54
|
+
**Disadvantages:**
|
|
55
|
+
- ❌ Both systems run simultaneously (higher cost)
|
|
56
|
+
- ❌ Longer timeline
|
|
57
|
+
- ❌ Data synchronization complexity
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### 2. Big Bang Migration
|
|
62
|
+
|
|
63
|
+
**Switch all at once:**
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Friday 11pm: Final backup
|
|
67
|
+
Friday 11:30pm: Migrate data
|
|
68
|
+
Saturday 12am: Switch DNS
|
|
69
|
+
Saturday 12:30am: Verify
|
|
70
|
+
Saturday 1am: Go-live
|
|
71
|
+
|
|
72
|
+
Downtime: 2 hours
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**When to use:**
|
|
76
|
+
- Small applications
|
|
77
|
+
- Can tolerate downtime
|
|
78
|
+
- Tight deadline
|
|
79
|
+
- Data migration simple
|
|
80
|
+
|
|
81
|
+
**Example:**
|
|
82
|
+
```bash
|
|
83
|
+
#!/bin/bash
|
|
84
|
+
# Big bang migration script
|
|
85
|
+
|
|
86
|
+
# 1. Stop old application
|
|
87
|
+
kubectl scale deployment/old-app --replicas=0
|
|
88
|
+
|
|
89
|
+
# 2. Final data export
|
|
90
|
+
pg_dump old_db > final_backup.sql
|
|
91
|
+
|
|
92
|
+
# 3. Import to new database
|
|
93
|
+
psql new_db < final_backup.sql
|
|
94
|
+
|
|
95
|
+
# 4. Deploy new application
|
|
96
|
+
kubectl apply -f new-app.yaml
|
|
97
|
+
|
|
98
|
+
# 5. Update DNS
|
|
99
|
+
aws route53 change-resource-record-sets ...
|
|
100
|
+
|
|
101
|
+
# 6. Verify
|
|
102
|
+
curl https://api.example.com/health
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Advantages:**
|
|
106
|
+
- ✅ Fast (single maintenance window)
|
|
107
|
+
- ✅ Simple (no dual operation)
|
|
108
|
+
- ✅ Lower cost (no parallel systems)
|
|
109
|
+
|
|
110
|
+
**Disadvantages:**
|
|
111
|
+
- ❌ High risk (all-or-nothing)
|
|
112
|
+
- ❌ Downtime required
|
|
113
|
+
- ❌ Difficult rollback
|
|
114
|
+
- ❌ Stressful
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### 3. Phased Migration
|
|
119
|
+
|
|
120
|
+
**Migrate in stages:**
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Phase 1: Migrate authentication service (1 week)
|
|
124
|
+
Phase 2: Migrate user profile service (1 week)
|
|
125
|
+
Phase 3: Migrate order service (1 week)
|
|
126
|
+
Phase 4: Migrate product catalog (1 week)
|
|
127
|
+
Phase 5: Decommission old system
|
|
128
|
+
|
|
129
|
+
Total: 5 weeks
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Advantages:**
|
|
133
|
+
- ✅ Lower risk per phase
|
|
134
|
+
- ✅ Learn and adjust
|
|
135
|
+
- ✅ Easier rollback (per service)
|
|
136
|
+
|
|
137
|
+
**Disadvantages:**
|
|
138
|
+
- ❌ Longer timeline
|
|
139
|
+
- ❌ Complex coordination
|
|
140
|
+
- ❌ Data consistency challenges
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### 4. Blue-Green Deployment
|
|
145
|
+
|
|
146
|
+
**Two identical environments:**
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
Blue (Current):
|
|
150
|
+
┌──────────────┐
|
|
151
|
+
│ v1.0 (100%) │◄─── Load Balancer (active)
|
|
152
|
+
└──────────────┘
|
|
153
|
+
|
|
154
|
+
Green (New):
|
|
155
|
+
┌──────────────┐
|
|
156
|
+
│ v2.0 (0%) │ (idle, testing)
|
|
157
|
+
└──────────────┘
|
|
158
|
+
|
|
159
|
+
After validation:
|
|
160
|
+
Blue (Old):
|
|
161
|
+
┌──────────────┐
|
|
162
|
+
│ v1.0 (0%) │ (idle, rollback ready)
|
|
163
|
+
└──────────────┘
|
|
164
|
+
|
|
165
|
+
Green (New):
|
|
166
|
+
┌──────────────┐
|
|
167
|
+
│ v2.0 (100%) │◄─── Load Balancer (active)
|
|
168
|
+
└──────────────┘
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Implementation:**
|
|
172
|
+
```yaml
|
|
173
|
+
# Blue deployment
|
|
174
|
+
apiVersion: apps/v1
|
|
175
|
+
kind: Deployment
|
|
176
|
+
metadata:
|
|
177
|
+
name: app-blue
|
|
178
|
+
labels:
|
|
179
|
+
version: blue
|
|
180
|
+
spec:
|
|
181
|
+
replicas: 10
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
# Green deployment
|
|
185
|
+
apiVersion: apps/v1
|
|
186
|
+
kind: Deployment
|
|
187
|
+
metadata:
|
|
188
|
+
name: app-green
|
|
189
|
+
labels:
|
|
190
|
+
version: green
|
|
191
|
+
spec:
|
|
192
|
+
replicas: 10
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
# Service switches between blue/green
|
|
196
|
+
apiVersion: v1
|
|
197
|
+
kind: Service
|
|
198
|
+
metadata:
|
|
199
|
+
name: app
|
|
200
|
+
spec:
|
|
201
|
+
selector:
|
|
202
|
+
version: blue # Switch to 'green' to cutover
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Advantages:**
|
|
206
|
+
- ✅ Zero downtime
|
|
207
|
+
- ✅ Instant rollback (switch back)
|
|
208
|
+
- ✅ Full validation before cutover
|
|
209
|
+
|
|
210
|
+
**Disadvantages:**
|
|
211
|
+
- ❌ 2x infrastructure cost
|
|
212
|
+
- ❌ Database migration complexity
|
|
213
|
+
- ❌ Data synchronization during transition
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Data Migration Strategies
|
|
218
|
+
|
|
219
|
+
### 1. Dual Writes
|
|
220
|
+
|
|
221
|
+
**Write to both old and new databases:**
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
async function createUser(data) {
|
|
225
|
+
// Write to old database
|
|
226
|
+
await oldDB.users.create({ data });
|
|
227
|
+
|
|
228
|
+
// Also write to new database
|
|
229
|
+
try {
|
|
230
|
+
await newDB.users.create({ data });
|
|
231
|
+
} catch (error) {
|
|
232
|
+
logger.error('New DB write failed', error);
|
|
233
|
+
// Continue (old DB is source of truth)
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Read from old database (still source of truth)
|
|
238
|
+
async function getUser(id) {
|
|
239
|
+
return await oldDB.users.findUnique({ where: { id } });
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Phases:**
|
|
244
|
+
1. Dual writes (both DBs)
|
|
245
|
+
2. Backfill new DB with historical data
|
|
246
|
+
3. Verify data consistency
|
|
247
|
+
4. Switch reads to new DB
|
|
248
|
+
5. Stop writes to old DB
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
### 2. Change Data Capture (CDC)
|
|
253
|
+
|
|
254
|
+
**Stream changes from old to new:**
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
Old Database → Debezium → Kafka → Consumer → New Database
|
|
258
|
+
|
|
259
|
+
Real-time replication without application changes
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
```yaml
|
|
263
|
+
# Debezium connector
|
|
264
|
+
{
|
|
265
|
+
"name": "mysql-connector",
|
|
266
|
+
"config": {
|
|
267
|
+
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
|
|
268
|
+
"database.hostname": "old-mysql",
|
|
269
|
+
"database.port": "3306",
|
|
270
|
+
"database.user": "debezium",
|
|
271
|
+
"database.dbname": "prod",
|
|
272
|
+
"database.server.id": "1",
|
|
273
|
+
"table.include.list": "prod.users,prod.orders",
|
|
274
|
+
"database.history.kafka.bootstrap.servers": "kafka:9092",
|
|
275
|
+
"database.history.kafka.topic": "schema-changes"
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**Advantages:**
|
|
281
|
+
- ✅ No application code changes
|
|
282
|
+
- ✅ Real-time replication
|
|
283
|
+
- ✅ Can replay events
|
|
284
|
+
|
|
285
|
+
**Disadvantages:**
|
|
286
|
+
- ❌ Requires CDC-capable database
|
|
287
|
+
- ❌ Additional infrastructure (Kafka)
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
### 3. Database Replication
|
|
292
|
+
|
|
293
|
+
**Built-in database replication:**
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
MySQL → MySQL (read replica) → Promote to standalone
|
|
297
|
+
|
|
298
|
+
or
|
|
299
|
+
|
|
300
|
+
PostgreSQL → PostgreSQL (streaming replication)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
```sql
|
|
304
|
+
-- Create read replica (AWS RDS)
|
|
305
|
+
aws rds create-db-instance-read-replica \
|
|
306
|
+
--db-instance-identifier prod-db-replica \
|
|
307
|
+
--source-db-instance-identifier prod-db \
|
|
308
|
+
--db-instance-class db.r5.xlarge
|
|
309
|
+
|
|
310
|
+
-- Promote replica to standalone
|
|
311
|
+
aws rds promote-read-replica \
|
|
312
|
+
--db-instance-identifier prod-db-replica
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Migration Checklist
|
|
318
|
+
|
|
319
|
+
### Pre-Migration
|
|
320
|
+
|
|
321
|
+
**Planning:**
|
|
322
|
+
- [ ] Document current architecture
|
|
323
|
+
- [ ] Define success criteria
|
|
324
|
+
- [ ] Identify dependencies
|
|
325
|
+
- [ ] Estimate timeline
|
|
326
|
+
- [ ] Calculate costs (old + new during migration)
|
|
327
|
+
- [ ] Plan rollback procedures
|
|
328
|
+
|
|
329
|
+
**Risk Assessment:**
|
|
330
|
+
- [ ] Identify high-risk components
|
|
331
|
+
- [ ] Plan for data loss scenarios
|
|
332
|
+
- [ ] Define acceptable downtime
|
|
333
|
+
- [ ] Set up monitoring/alerting
|
|
334
|
+
- [ ] Practice in staging
|
|
335
|
+
|
|
336
|
+
**Communication:**
|
|
337
|
+
- [ ] Notify stakeholders
|
|
338
|
+
- [ ] Create maintenance window (if needed)
|
|
339
|
+
- [ ] Prepare status page updates
|
|
340
|
+
- [ ] Assign on-call engineers
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
### During Migration
|
|
345
|
+
|
|
346
|
+
**Execution:**
|
|
347
|
+
- [ ] Execute migration plan step-by-step
|
|
348
|
+
- [ ] Monitor metrics continuously
|
|
349
|
+
- [ ] Document issues encountered
|
|
350
|
+
- [ ] Be ready to rollback
|
|
351
|
+
|
|
352
|
+
**Validation:**
|
|
353
|
+
- [ ] Smoke tests (critical paths)
|
|
354
|
+
- [ ] Data integrity checks
|
|
355
|
+
- [ ] Performance benchmarks
|
|
356
|
+
- [ ] User acceptance testing
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
### Post-Migration
|
|
361
|
+
|
|
362
|
+
**Verification:**
|
|
363
|
+
- [ ] Monitor for 24-48 hours
|
|
364
|
+
- [ ] Compare metrics (old vs new)
|
|
365
|
+
- [ ] Validate business KPIs
|
|
366
|
+
- [ ] Address any issues
|
|
367
|
+
|
|
368
|
+
**Cleanup:**
|
|
369
|
+
- [ ] Decommission old infrastructure (after 2-4 weeks)
|
|
370
|
+
- [ ] Update documentation
|
|
371
|
+
- [ ] Delete old backups (after retention period)
|
|
372
|
+
- [ ] Post-mortem meeting
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## Zero-Downtime Migration Techniques
|
|
377
|
+
|
|
378
|
+
### Database Schema Changes
|
|
379
|
+
|
|
380
|
+
**Expand-Contract Pattern:**
|
|
381
|
+
|
|
382
|
+
```sql
|
|
383
|
+
-- Phase 1: EXPAND (add new column, keep old)
|
|
384
|
+
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);
|
|
385
|
+
|
|
386
|
+
-- Dual-write both columns
|
|
387
|
+
UPDATE users SET full_name = CONCAT(first_name, ' ', last_name);
|
|
388
|
+
|
|
389
|
+
-- Phase 2: Migrate code to use new column
|
|
390
|
+
-- (deploy application changes)
|
|
391
|
+
|
|
392
|
+
-- Phase 3: CONTRACT (remove old columns)
|
|
393
|
+
ALTER TABLE users DROP COLUMN first_name;
|
|
394
|
+
ALTER TABLE users DROP COLUMN last_name;
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Migration steps must be backward-compatible!**
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
### DNS Cutover
|
|
402
|
+
|
|
403
|
+
```
|
|
404
|
+
1. Lower DNS TTL to 60 seconds (24 hours before)
|
|
405
|
+
2. Update DNS to point to new system
|
|
406
|
+
3. Wait for TTL expiration (1-5 minutes)
|
|
407
|
+
4. Monitor both systems for stragglers
|
|
408
|
+
5. After 24 hours, decommission old
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## Rollback Strategies
|
|
414
|
+
|
|
415
|
+
### Feature Flags
|
|
416
|
+
|
|
417
|
+
```typescript
|
|
418
|
+
const useNewAPI = featureFlags.isEnabled('new-api');
|
|
419
|
+
|
|
420
|
+
if (useNewAPI) {
|
|
421
|
+
return await newAPI.getUsers();
|
|
422
|
+
} else {
|
|
423
|
+
return await oldAPI.getUsers();
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Instant rollback: Disable feature flag
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### Database Rollback
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
# Backup before migration
|
|
433
|
+
pg_dump prod_db > pre_migration_backup.sql
|
|
434
|
+
|
|
435
|
+
# If migration fails:
|
|
436
|
+
psql prod_db < pre_migration_backup.sql
|
|
437
|
+
|
|
438
|
+
# Rollback application
|
|
439
|
+
kubectl rollout undo deployment/api
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## Migration Timeline Template
|
|
445
|
+
|
|
446
|
+
```markdown
|
|
447
|
+
# Migration: Monolith → Microservices
|
|
448
|
+
|
|
449
|
+
## Week 1-2: Preparation
|
|
450
|
+
- Document current architecture
|
|
451
|
+
- Set up new infrastructure (Kubernetes)
|
|
452
|
+
- Create migration plan
|
|
453
|
+
- Practice in staging
|
|
454
|
+
|
|
455
|
+
## Week 3-4: Phase 1 - Authentication Service
|
|
456
|
+
- Extract auth service
|
|
457
|
+
- Deploy to production (0% traffic)
|
|
458
|
+
- Shadow traffic testing
|
|
459
|
+
- Ramp to 10% → 50% → 100%
|
|
460
|
+
- Decommission old auth code
|
|
461
|
+
|
|
462
|
+
## Week 5-6: Phase 2 - User Profile Service
|
|
463
|
+
- Extract profile service
|
|
464
|
+
- Deploy and test
|
|
465
|
+
- Ramp traffic gradually
|
|
466
|
+
- Monitor and optimize
|
|
467
|
+
|
|
468
|
+
## Week 7-8: Phase 3 - Order Service
|
|
469
|
+
- (repeat process)
|
|
470
|
+
|
|
471
|
+
## Week 9: Final Cutover
|
|
472
|
+
- Decommission monolith
|
|
473
|
+
- Update documentation
|
|
474
|
+
- Post-mortem
|
|
475
|
+
|
|
476
|
+
## Week 10+: Monitoring & Optimization
|
|
477
|
+
- Monitor for 2-4 weeks
|
|
478
|
+
- Performance tuning
|
|
479
|
+
- Cost optimization
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
---
|
|
483
|
+
|
|
484
|
+
## Common Migration Pitfalls
|
|
485
|
+
|
|
486
|
+
❌ **No rollback plan** - Always have a way back
|
|
487
|
+
❌ **Insufficient testing** - Practice in staging first
|
|
488
|
+
❌ **Big bang approach** - Prefer gradual migration
|
|
489
|
+
❌ **Ignoring data consistency** - Dual writes, CDC, or replication
|
|
490
|
+
❌ **No monitoring** - Can't detect issues quickly
|
|
491
|
+
❌ **Poor communication** - Stakeholders surprised
|
|
492
|
+
❌ **Rushing** - Give adequate time for each phase
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
## Best Practices
|
|
497
|
+
|
|
498
|
+
✅ **Migrate gradually** - Strangler fig preferred
|
|
499
|
+
✅ **Test thoroughly** - Staging should mirror production
|
|
500
|
+
✅ **Monitor everything** - Metrics before/during/after
|
|
501
|
+
✅ **Have rollback plan** - Test rollback procedure
|
|
502
|
+
✅ **Communicate clearly** - Keep stakeholders informed
|
|
503
|
+
✅ **Document everything** - Architecture, decisions, issues
|
|
504
|
+
✅ **Validate data** - Check integrity after migration
|
|
505
|
+
✅ **Keep old system** - Don't decommission for 2-4 weeks
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
**Related Resources:**
|
|
510
|
+
- architecture-patterns.md - Microservices, strangler fig
|
|
511
|
+
- disaster-recovery.md - Backup and recovery procedures
|
|
512
|
+
- multi-region-design.md - Multi-region migration
|