blockmine 1.24.0 → 1.25.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/CHANGELOG.md +32 -0
- package/README.en.md +427 -0
- package/README.md +40 -0
- package/backend/cli.js +1 -1
- package/backend/src/ai/plugin-assistant-system-prompt.md +664 -5
- package/backend/src/api/routes/bots.js +13 -0
- package/backend/src/api/routes/servers.js +14 -2
- package/backend/src/core/BotProcess.js +98 -2
- package/backend/src/core/PluginLoader.js +83 -3
- package/backend/src/core/PluginManager.js +75 -5
- package/backend/src/core/services/BotLifecycleService.js +186 -2
- package/backend/src/server.js +11 -1
- package/frontend/dist/assets/browser-ponyfill-DN7pwmHT.js +2 -0
- package/frontend/dist/assets/index-LSy71uwm.js +11261 -0
- package/frontend/dist/assets/index-SfhKxI4-.css +32 -0
- package/frontend/dist/flags/en.svg +32 -0
- package/frontend/dist/flags/ru.svg +5 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/dist/locales/en/admin.json +100 -0
- package/frontend/dist/locales/en/api-keys.json +58 -0
- package/frontend/dist/locales/en/bots.json +110 -0
- package/frontend/dist/locales/en/common.json +47 -0
- package/frontend/dist/locales/en/configuration.json +22 -0
- package/frontend/dist/locales/en/console.json +10 -0
- package/frontend/dist/locales/en/dashboard.json +85 -0
- package/frontend/dist/locales/en/dialogs.json +70 -0
- package/frontend/dist/locales/en/event-graphs.json +50 -0
- package/frontend/dist/locales/en/graph-store.json +70 -0
- package/frontend/dist/locales/en/login.json +34 -0
- package/frontend/dist/locales/en/management.json +114 -0
- package/frontend/dist/locales/en/minecraft-viewer.json +27 -0
- package/frontend/dist/locales/en/nodes.json +1077 -0
- package/frontend/dist/locales/en/permissions.json +50 -0
- package/frontend/dist/locales/en/plugin-detail.json +49 -0
- package/frontend/dist/locales/en/plugins.json +110 -0
- package/frontend/dist/locales/en/proxies.json +81 -0
- package/frontend/dist/locales/en/servers.json +39 -0
- package/frontend/dist/locales/en/setup.json +17 -0
- package/frontend/dist/locales/en/sidebar.json +27 -0
- package/frontend/dist/locales/en/tasks.json +62 -0
- package/frontend/dist/locales/en/visual-editor.json +219 -0
- package/frontend/dist/locales/en/websocket.json +86 -0
- package/frontend/dist/locales/ru/admin.json +100 -0
- package/frontend/dist/locales/ru/api-keys.json +58 -0
- package/frontend/dist/locales/ru/bots.json +110 -0
- package/frontend/dist/locales/ru/common.json +49 -0
- package/frontend/dist/locales/ru/configuration.json +22 -0
- package/frontend/dist/locales/ru/console.json +10 -0
- package/frontend/dist/locales/ru/dashboard.json +85 -0
- package/frontend/dist/locales/ru/dialogs.json +70 -0
- package/frontend/dist/locales/ru/event-graphs.json +50 -0
- package/frontend/dist/locales/ru/graph-store.json +70 -0
- package/frontend/dist/locales/ru/login.json +34 -0
- package/frontend/dist/locales/ru/management.json +114 -0
- package/frontend/dist/locales/ru/minecraft-viewer.json +27 -0
- package/frontend/dist/locales/ru/nodes.json +1077 -0
- package/frontend/dist/locales/ru/permissions.json +50 -0
- package/frontend/dist/locales/ru/plugin-detail.json +49 -0
- package/frontend/dist/locales/ru/plugins.json +110 -0
- package/frontend/dist/locales/ru/proxies.json +81 -0
- package/frontend/dist/locales/ru/servers.json +39 -0
- package/frontend/dist/locales/ru/setup.json +17 -0
- package/frontend/dist/locales/ru/sidebar.json +27 -0
- package/frontend/dist/locales/ru/tasks.json +62 -0
- package/frontend/dist/locales/ru/visual-editor.json +221 -0
- package/frontend/dist/locales/ru/websocket.json +86 -0
- package/frontend/dist/monacoeditorwork/css.worker.bundle.js +7 -7
- package/frontend/dist/monacoeditorwork/html.worker.bundle.js +7 -7
- package/frontend/dist/monacoeditorwork/json.worker.bundle.js +7 -7
- package/frontend/dist/monacoeditorwork/ts.worker.bundle.js +3 -3
- package/frontend/package.json +4 -0
- package/package.json +1 -1
- package/screen/3dviewer.png +0 -0
- 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/language_selector.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/.claude/agents/README.md +0 -469
- package/.claude/agents/auth-route-debugger.md +0 -118
- package/.claude/agents/auth-route-tester.md +0 -93
- package/.claude/agents/auto-error-resolver.md +0 -97
- package/.claude/agents/build-optimizer.md +0 -236
- package/.claude/agents/code-architect.md +0 -34
- package/.claude/agents/code-architecture-reviewer.md +0 -83
- package/.claude/agents/code-explorer.md +0 -51
- package/.claude/agents/code-refactor-master.md +0 -94
- package/.claude/agents/code-reviewer.md +0 -46
- package/.claude/agents/cost-optimizer.md +0 -134
- package/.claude/agents/deployment-orchestrator.md +0 -113
- package/.claude/agents/documentation-architect.md +0 -82
- package/.claude/agents/frontend-error-fixer.md +0 -77
- package/.claude/agents/iac-code-generator.md +0 -71
- package/.claude/agents/incident-responder.md +0 -346
- package/.claude/agents/infrastructure-architect.md +0 -31
- package/.claude/agents/kubernetes-specialist.md +0 -56
- package/.claude/agents/migration-planner.md +0 -181
- package/.claude/agents/network-architect.md +0 -196
- package/.claude/agents/plan-reviewer.md +0 -52
- package/.claude/agents/refactor-planner.md +0 -63
- package/.claude/agents/security-scanner.md +0 -102
- package/.claude/agents/web-research-specialist.md +0 -78
- package/.claude/commands/cost-analysis.md +0 -315
- package/.claude/commands/dev-docs-update.md +0 -55
- package/.claude/commands/dev-docs.md +0 -51
- package/.claude/commands/feature-dev.md +0 -125
- package/.claude/commands/incident-debug.md +0 -247
- package/.claude/commands/infra-plan.md +0 -81
- package/.claude/commands/migration-plan.md +0 -478
- package/.claude/commands/route-research-for-testing.md +0 -37
- package/.claude/commands/security-review.md +0 -66
- package/.claude/hooks/CONFIG.md +0 -448
- package/.claude/hooks/README.md +0 -163
- package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +0 -226
- package/.claude/hooks/WINDOWS_HOOKS_README.md +0 -151
- package/.claude/hooks/add-skill-activation-banners.ts +0 -132
- package/.claude/hooks/comprehensive-skill-test.ts +0 -1315
- package/.claude/hooks/error-handling-reminder.sh +0 -12
- package/.claude/hooks/error-handling-reminder.ts +0 -222
- package/.claude/hooks/k8s-manifest-validator.sh +0 -56
- package/.claude/hooks/package-lock.json +0 -556
- package/.claude/hooks/package.json +0 -16
- package/.claude/hooks/post-tool-use-tracker.ps1 +0 -174
- package/.claude/hooks/post-tool-use-tracker.sh +0 -183
- package/.claude/hooks/security-policy-check.sh +0 -247
- package/.claude/hooks/skill-activation-prompt.ps1 +0 -10
- package/.claude/hooks/skill-activation-prompt.sh +0 -10
- package/.claude/hooks/skill-activation-prompt.ts +0 -141
- package/.claude/hooks/stop-build-check-enhanced.sh +0 -130
- package/.claude/hooks/terraform-validator.sh +0 -53
- package/.claude/hooks/test-input.json +0 -7
- package/.claude/hooks/test-skill-activation.ts +0 -427
- package/.claude/hooks/trigger-build-resolver.sh +0 -79
- package/.claude/hooks/tsc-check.sh +0 -173
- package/.claude/hooks/tsconfig.json +0 -19
- package/.claude/settings.json +0 -59
- package/.claude/settings.local.json +0 -67
- package/.claude/skills/README.md +0 -507
- package/.claude/skills/api-engineering/SKILL.md +0 -63
- package/.claude/skills/api-engineering/resources/api-versioning.md +0 -88
- package/.claude/skills/api-engineering/resources/graphql-patterns.md +0 -106
- package/.claude/skills/api-engineering/resources/rate-limiting.md +0 -118
- package/.claude/skills/api-engineering/resources/rest-api-design.md +0 -105
- package/.claude/skills/backend-dev-guidelines/SKILL.md +0 -306
- package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +0 -451
- package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +0 -307
- package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +0 -638
- package/.claude/skills/backend-dev-guidelines/resources/configuration.md +0 -275
- package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +0 -224
- package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +0 -213
- package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +0 -756
- package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +0 -336
- package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +0 -789
- package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +0 -235
- package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +0 -754
- package/.claude/skills/budget-and-cost-management/SKILL.md +0 -850
- package/.claude/skills/build-engineering/SKILL.md +0 -431
- package/.claude/skills/build-engineering/resources/artifact-repositories.md +0 -72
- package/.claude/skills/build-engineering/resources/build-caching.md +0 -96
- package/.claude/skills/build-engineering/resources/build-pipelines.md +0 -105
- package/.claude/skills/build-engineering/resources/build-security.md +0 -95
- package/.claude/skills/build-engineering/resources/build-systems.md +0 -389
- package/.claude/skills/build-engineering/resources/compilation-optimization.md +0 -201
- package/.claude/skills/build-engineering/resources/dependency-management.md +0 -73
- package/.claude/skills/build-engineering/resources/monorepo-builds.md +0 -110
- package/.claude/skills/build-engineering/resources/performance-optimization.md +0 -113
- package/.claude/skills/build-engineering/resources/reproducible-builds.md +0 -82
- package/.claude/skills/cloud-engineering/SKILL.md +0 -675
- package/.claude/skills/cloud-engineering/resources/aws-patterns.md +0 -742
- package/.claude/skills/cloud-engineering/resources/azure-patterns.md +0 -714
- package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +0 -987
- package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +0 -757
- package/.claude/skills/cloud-engineering/resources/cloud-networking.md +0 -1058
- package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +0 -1530
- package/.claude/skills/cloud-engineering/resources/cloud-security.md +0 -990
- package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +0 -758
- package/.claude/skills/cloud-engineering/resources/migration-strategies.md +0 -820
- package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +0 -670
- package/.claude/skills/cloud-engineering/resources/oci-patterns.md +0 -1198
- package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +0 -795
- package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +0 -966
- package/.claude/skills/cybersecurity/SKILL.md +0 -409
- package/.claude/skills/cybersecurity/resources/security-architecture.md +0 -266
- package/.claude/skills/database-engineering/SKILL.md +0 -61
- package/.claude/skills/database-engineering/resources/backup-and-recovery.md +0 -72
- package/.claude/skills/database-engineering/resources/database-replication.md +0 -63
- package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +0 -70
- package/.claude/skills/database-engineering/resources/query-optimization.md +0 -68
- package/.claude/skills/devsecops/SKILL.md +0 -374
- package/.claude/skills/devsecops/resources/ci-cd-security.md +0 -204
- package/.claude/skills/devsecops/resources/compliance-automation.md +0 -530
- package/.claude/skills/devsecops/resources/compliance-frameworks.md +0 -2322
- package/.claude/skills/devsecops/resources/container-security.md +0 -915
- package/.claude/skills/devsecops/resources/cspm-integration.md +0 -1440
- package/.claude/skills/devsecops/resources/policy-enforcement.md +0 -619
- package/.claude/skills/devsecops/resources/secrets-management.md +0 -755
- package/.claude/skills/devsecops/resources/security-monitoring.md +0 -146
- package/.claude/skills/devsecops/resources/security-scanning.md +0 -887
- package/.claude/skills/devsecops/resources/security-testing.md +0 -203
- package/.claude/skills/devsecops/resources/supply-chain-security.md +0 -518
- package/.claude/skills/devsecops/resources/vulnerability-management.md +0 -481
- package/.claude/skills/devsecops/resources/zero-trust-architecture.md +0 -177
- package/.claude/skills/documentation-as-code/SKILL.md +0 -323
- package/.claude/skills/documentation-as-code/resources/api-documentation.md +0 -90
- package/.claude/skills/documentation-as-code/resources/changelog-management.md +0 -79
- package/.claude/skills/documentation-as-code/resources/diagram-generation.md +0 -44
- package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +0 -99
- package/.claude/skills/documentation-as-code/resources/documentation-automation.md +0 -68
- package/.claude/skills/documentation-as-code/resources/documentation-sites.md +0 -79
- package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +0 -162
- package/.claude/skills/documentation-as-code/resources/openapi-specification.md +0 -77
- package/.claude/skills/documentation-as-code/resources/readme-engineering.md +0 -60
- package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +0 -202
- package/.claude/skills/engineering-management/SKILL.md +0 -356
- package/.claude/skills/engineering-management/resources/career-ladders.md +0 -609
- package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +0 -555
- package/.claude/skills/engineering-management/resources/one-on-one-guides.md +0 -609
- package/.claude/skills/engineering-management/resources/resource-planning.md +0 -557
- package/.claude/skills/engineering-management/resources/team-organization-patterns.md +0 -491
- package/.claude/skills/engineering-management/resources/technical-interviews.md +0 -474
- package/.claude/skills/engineering-operations-management/SKILL.md +0 -817
- package/.claude/skills/error-tracking/SKILL.md +0 -379
- package/.claude/skills/frontend-design/SKILL.md +0 -42
- package/.claude/skills/frontend-dev-guidelines/SKILL.md +0 -403
- package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +0 -331
- package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +0 -872
- package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +0 -502
- package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +0 -767
- package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +0 -502
- package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +0 -501
- package/.claude/skills/frontend-dev-guidelines/resources/performance.md +0 -406
- package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +0 -364
- package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +0 -428
- package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +0 -418
- package/.claude/skills/general-it-engineering/SKILL.md +0 -393
- package/.claude/skills/general-it-engineering/resources/asset-management.md +0 -712
- package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +0 -817
- package/.claude/skills/general-it-engineering/resources/business-continuity.md +0 -786
- package/.claude/skills/general-it-engineering/resources/change-management.md +0 -715
- package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +0 -729
- package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +0 -738
- package/.claude/skills/general-it-engineering/resources/incident-service-management.md +0 -834
- package/.claude/skills/general-it-engineering/resources/it-governance.md +0 -753
- package/.claude/skills/general-it-engineering/resources/itil-framework.md +0 -503
- package/.claude/skills/general-it-engineering/resources/service-management.md +0 -669
- package/.claude/skills/infrastructure-architecture/SKILL.md +0 -328
- package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +0 -505
- package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +0 -528
- package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +0 -453
- package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +0 -773
- package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +0 -499
- package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +0 -501
- package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +0 -535
- package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +0 -512
- package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +0 -608
- package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +0 -562
- package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +0 -538
- package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +0 -489
- package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +0 -1000
- package/.claude/skills/infrastructure-strategy/SKILL.md +0 -924
- package/.claude/skills/network-engineering/SKILL.md +0 -385
- package/.claude/skills/network-engineering/resources/dns-management.md +0 -738
- package/.claude/skills/network-engineering/resources/load-balancing.md +0 -820
- package/.claude/skills/network-engineering/resources/network-architecture.md +0 -546
- package/.claude/skills/network-engineering/resources/network-security.md +0 -921
- package/.claude/skills/network-engineering/resources/network-troubleshooting.md +0 -749
- package/.claude/skills/network-engineering/resources/routing-switching.md +0 -373
- package/.claude/skills/network-engineering/resources/sdn-networking.md +0 -695
- package/.claude/skills/network-engineering/resources/service-mesh-networking.md +0 -777
- package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +0 -444
- package/.claude/skills/network-engineering/resources/vpn-connectivity.md +0 -672
- package/.claude/skills/node-development/SKILL.md +0 -317
- package/.claude/skills/observability-engineering/SKILL.md +0 -101
- package/.claude/skills/observability-engineering/resources/apm-tools.md +0 -97
- package/.claude/skills/observability-engineering/resources/correlation-strategies.md +0 -87
- package/.claude/skills/observability-engineering/resources/distributed-tracing.md +0 -98
- package/.claude/skills/observability-engineering/resources/logs-aggregation.md +0 -118
- package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +0 -141
- package/.claude/skills/observability-engineering/resources/opentelemetry.md +0 -110
- package/.claude/skills/platform-engineering/SKILL.md +0 -555
- package/.claude/skills/platform-engineering/resources/architecture-overview.md +0 -600
- package/.claude/skills/platform-engineering/resources/container-orchestration.md +0 -916
- package/.claude/skills/platform-engineering/resources/cost-optimization.md +0 -634
- package/.claude/skills/platform-engineering/resources/developer-platforms.md +0 -670
- package/.claude/skills/platform-engineering/resources/gitops-automation.md +0 -650
- package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +0 -778
- package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +0 -708
- package/.claude/skills/platform-engineering/resources/multi-tenancy.md +0 -602
- package/.claude/skills/platform-engineering/resources/platform-security.md +0 -711
- package/.claude/skills/platform-engineering/resources/resource-management.md +0 -592
- package/.claude/skills/platform-engineering/resources/service-mesh.md +0 -628
- package/.claude/skills/release-engineering/SKILL.md +0 -393
- package/.claude/skills/release-engineering/resources/artifact-management.md +0 -108
- package/.claude/skills/release-engineering/resources/build-optimization.md +0 -84
- package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +0 -411
- package/.claude/skills/release-engineering/resources/deployment-strategies.md +0 -197
- package/.claude/skills/release-engineering/resources/pipeline-security.md +0 -62
- package/.claude/skills/release-engineering/resources/progressive-delivery.md +0 -83
- package/.claude/skills/release-engineering/resources/release-automation.md +0 -68
- package/.claude/skills/release-engineering/resources/release-orchestration.md +0 -77
- package/.claude/skills/release-engineering/resources/rollback-strategies.md +0 -66
- package/.claude/skills/release-engineering/resources/versioning-strategies.md +0 -59
- package/.claude/skills/route-tester/SKILL.md +0 -392
- package/.claude/skills/skill-developer/ADVANCED.md +0 -197
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +0 -306
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +0 -152
- package/.claude/skills/skill-developer/SKILL.md +0 -430
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +0 -315
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +0 -305
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +0 -514
- package/.claude/skills/skill-rules.json +0 -2989
- package/.claude/skills/sre/SKILL.md +0 -464
- package/.claude/skills/sre/resources/alerting-best-practices.md +0 -282
- package/.claude/skills/sre/resources/capacity-planning.md +0 -226
- package/.claude/skills/sre/resources/chaos-engineering.md +0 -193
- package/.claude/skills/sre/resources/disaster-recovery.md +0 -232
- package/.claude/skills/sre/resources/incident-management.md +0 -436
- package/.claude/skills/sre/resources/observability-stack.md +0 -240
- package/.claude/skills/sre/resources/on-call-runbooks.md +0 -167
- package/.claude/skills/sre/resources/performance-optimization.md +0 -108
- package/.claude/skills/sre/resources/reliability-patterns.md +0 -183
- package/.claude/skills/sre/resources/slo-sli-sla.md +0 -464
- package/.claude/skills/sre/resources/toil-reduction.md +0 -145
- package/.claude/skills/systems-engineering/SKILL.md +0 -648
- package/.claude/skills/systems-engineering/resources/automation-patterns.md +0 -771
- package/.claude/skills/systems-engineering/resources/configuration-management.md +0 -998
- package/.claude/skills/systems-engineering/resources/linux-administration.md +0 -672
- package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +0 -982
- package/.claude/skills/systems-engineering/resources/performance-tuning.md +0 -871
- package/.claude/skills/systems-engineering/resources/powershell-scripting.md +0 -482
- package/.claude/skills/systems-engineering/resources/security-hardening.md +0 -739
- package/.claude/skills/systems-engineering/resources/shell-scripting.md +0 -915
- package/.claude/skills/systems-engineering/resources/storage-management.md +0 -628
- package/.claude/skills/systems-engineering/resources/system-monitoring.md +0 -787
- package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +0 -753
- package/.claude/skills/systems-engineering/resources/windows-administration.md +0 -738
- package/.claude/skills/technical-leadership/SKILL.md +0 -728
- package/backend/docs/SECRETS_DOCUMENTATION.md +0 -327
- package/frontend/dist/assets/index-BC-NbKXi.css +0 -32
- package/frontend/dist/assets/index-DqJXZMHY.js +0 -11266
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: node-development
|
|
3
|
-
description: Создание нод для визуального редактора BlockMine. Используй при создании новых нод, исправлении ошибок в нодах, работе с executor/evaluator, helpers, регистрацией нод на backend и frontend.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Node Development - Визуальный редактор BlockMine
|
|
7
|
-
|
|
8
|
-
## Архитектура нод
|
|
9
|
-
|
|
10
|
-
Ноды состоят из двух частей:
|
|
11
|
-
- **Backend** - логика выполнения (executor/evaluator)
|
|
12
|
-
- **Frontend** - визуальное представление (NodeDefinition)
|
|
13
|
-
|
|
14
|
-
## Типы нод
|
|
15
|
-
|
|
16
|
-
### 1. Action Node (с exec пинами)
|
|
17
|
-
- Имеет входной `exec` пин и выходные `exec`/`exec_failed` пины
|
|
18
|
-
- Использует **executor** для выполнения действий
|
|
19
|
-
- Может иметь **evaluator** для data-выходов
|
|
20
|
-
|
|
21
|
-
### 2. Data Node (без exec пинов)
|
|
22
|
-
- Только data-пины (Number, String, Boolean, Object, Array)
|
|
23
|
-
- Использует только **evaluator**
|
|
24
|
-
- Вычисляет значения по запросу
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## Backend: Структура файлов
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
backend/src/core/
|
|
32
|
-
├── nodes/{category}/{node_name}.js # Логика ноды
|
|
33
|
-
├── node-registries/{category}.js # Регистрация нод категории
|
|
34
|
-
└── constants/graphTypes.js # Типы графов
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Backend: Executor (Action ноды)
|
|
40
|
-
|
|
41
|
-
```javascript
|
|
42
|
-
async function execute(node, context, helpers) {
|
|
43
|
-
const { resolvePinValue, traverse, memo } = helpers;
|
|
44
|
-
const bot = context.bot;
|
|
45
|
-
|
|
46
|
-
// Получить значение входного пина (с fallback на node.data)
|
|
47
|
-
const value = await resolvePinValue(node, 'pinName', node.data?.pinName);
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
// Выполнить действие...
|
|
51
|
-
const result = await bot.someAction();
|
|
52
|
-
|
|
53
|
-
// Сохранить результаты для data-выходов
|
|
54
|
-
memo.set(`${node.id}:outputPin`, result);
|
|
55
|
-
memo.set(`${node.id}:success`, true);
|
|
56
|
-
|
|
57
|
-
// Перейти к следующей ноде (успех)
|
|
58
|
-
await traverse(node, 'exec');
|
|
59
|
-
} catch (error) {
|
|
60
|
-
memo.set(`${node.id}:success`, false);
|
|
61
|
-
// Перейти к exec_failed
|
|
62
|
-
await traverse(node, 'exec_failed');
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
module.exports = { execute };
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Backend: Evaluator (Data ноды и data-выходы)
|
|
72
|
-
|
|
73
|
-
```javascript
|
|
74
|
-
async function evaluate(node, pinId, context, helpers) {
|
|
75
|
-
const { resolvePinValue, memo } = helpers;
|
|
76
|
-
const bot = context.bot;
|
|
77
|
-
|
|
78
|
-
// Получить входные значения
|
|
79
|
-
const inputValue = await resolvePinValue(node, 'inputPin');
|
|
80
|
-
|
|
81
|
-
// Вернуть значение для запрошенного пина
|
|
82
|
-
if (pinId === 'outputPin') {
|
|
83
|
-
return computedValue;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Для action нод - читать из memo
|
|
87
|
-
if (pinId === 'success') {
|
|
88
|
-
return memo.get(`${node.id}:success`) ?? false;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
module.exports = { evaluate };
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## ВАЖНО: Правильные helpers
|
|
100
|
-
|
|
101
|
-
```javascript
|
|
102
|
-
// ПРАВИЛЬНО:
|
|
103
|
-
await helpers.resolvePinValue(node, 'pinName');
|
|
104
|
-
await helpers.resolvePinValue(node, 'pinName', defaultValue);
|
|
105
|
-
|
|
106
|
-
// НЕПРАВИЛЬНО (не существует!):
|
|
107
|
-
await helpers.resolveInput(node.id, 'pinName'); // НЕ РАБОТАЕТ!
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Helpers в Executor:
|
|
111
|
-
- `resolvePinValue(node, pinId, defaultValue?)` - получить значение пина
|
|
112
|
-
- `traverse(node, execPinId)` - перейти к следующей ноде
|
|
113
|
-
- `memo` - Map для хранения результатов
|
|
114
|
-
- `clearLoopBodyMemo(loopNodeId)` - очистить memo тела цикла
|
|
115
|
-
|
|
116
|
-
### Helpers в Evaluator:
|
|
117
|
-
- `resolvePinValue(node, pinId, defaultValue?)` - получить значение пина
|
|
118
|
-
- `memo` - Map для чтения результатов
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Backend: Регистрация ноды
|
|
123
|
-
|
|
124
|
-
```javascript
|
|
125
|
-
// backend/src/core/node-registries/{category}.js
|
|
126
|
-
const { GRAPH_TYPES } = require('../constants/graphTypes');
|
|
127
|
-
|
|
128
|
-
function registerNodes(registry) {
|
|
129
|
-
// Action нода (с exec)
|
|
130
|
-
registry.registerNodeType({
|
|
131
|
-
type: 'category:node_name',
|
|
132
|
-
label: '🔥 Название',
|
|
133
|
-
category: 'Категория',
|
|
134
|
-
description: 'Описание ноды',
|
|
135
|
-
graphType: GRAPH_TYPES.ALL,
|
|
136
|
-
executor: require('../nodes/category/node_name').execute,
|
|
137
|
-
evaluator: require('../nodes/category/node_name').evaluate, // опционально
|
|
138
|
-
pins: {
|
|
139
|
-
inputs: [
|
|
140
|
-
{ id: 'exec', name: 'Выполнить', type: 'Exec' },
|
|
141
|
-
{ id: 'inputPin', name: 'Вход', type: 'String', required: true },
|
|
142
|
-
],
|
|
143
|
-
outputs: [
|
|
144
|
-
{ id: 'exec', name: 'Готово', type: 'Exec' },
|
|
145
|
-
{ id: 'exec_failed', name: 'Ошибка', type: 'Exec' },
|
|
146
|
-
{ id: 'result', name: 'Результат', type: 'Object' },
|
|
147
|
-
{ id: 'success', name: 'Успех?', type: 'Boolean' },
|
|
148
|
-
]
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
// Data нода (без exec)
|
|
153
|
-
registry.registerNodeType({
|
|
154
|
-
type: 'category:data_node',
|
|
155
|
-
label: '📊 Название',
|
|
156
|
-
category: 'Категория',
|
|
157
|
-
description: 'Описание',
|
|
158
|
-
graphType: GRAPH_TYPES.ALL,
|
|
159
|
-
evaluator: require('../nodes/category/data_node').evaluate,
|
|
160
|
-
pins: {
|
|
161
|
-
inputs: [
|
|
162
|
-
{ id: 'input', name: 'Вход', type: 'String', required: true },
|
|
163
|
-
],
|
|
164
|
-
outputs: [
|
|
165
|
-
{ id: 'output', name: 'Выход', type: 'String' },
|
|
166
|
-
]
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
module.exports = { registerNodes };
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Frontend: Структура файлов
|
|
177
|
-
|
|
178
|
-
```
|
|
179
|
-
frontend/src/components/visual-editor/nodes/
|
|
180
|
-
├── {category}/
|
|
181
|
-
│ ├── {nodeName}.js # NodeDefinition
|
|
182
|
-
│ ├── {NodeName}Settings.jsx # Компонент настроек (опционально)
|
|
183
|
-
│ └── index.js # Экспорты категории
|
|
184
|
-
└── index.js # Регистрация всех нод
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Frontend: NodeDefinition
|
|
190
|
-
|
|
191
|
-
```javascript
|
|
192
|
-
// frontend/src/components/visual-editor/nodes/{category}/{nodeName}.js
|
|
193
|
-
import { NodeDefinition } from '../../core/registry';
|
|
194
|
-
import NodeNameSettings from './NodeNameSettings'; // опционально
|
|
195
|
-
|
|
196
|
-
export const nodeNameDefinition = new NodeDefinition({
|
|
197
|
-
type: 'category:node_name', // Должен совпадать с backend!
|
|
198
|
-
category: 'category',
|
|
199
|
-
label: '🔥 Название',
|
|
200
|
-
description: 'Описание ноды',
|
|
201
|
-
|
|
202
|
-
computeInputs: (data) => [
|
|
203
|
-
{ id: 'exec', name: 'Выполнить', type: 'Exec' },
|
|
204
|
-
{
|
|
205
|
-
id: 'inputPin',
|
|
206
|
-
name: 'Вход',
|
|
207
|
-
type: 'String',
|
|
208
|
-
required: true,
|
|
209
|
-
inlineField: true, // Поле ввода прямо в ноде
|
|
210
|
-
placeholder: 'значение',
|
|
211
|
-
description: 'Подсказка при наведении'
|
|
212
|
-
},
|
|
213
|
-
],
|
|
214
|
-
|
|
215
|
-
computeOutputs: (data) => [
|
|
216
|
-
{ id: 'exec', name: 'Готово', type: 'Exec' },
|
|
217
|
-
{ id: 'exec_failed', name: 'Ошибка', type: 'Exec' },
|
|
218
|
-
{ id: 'result', name: 'Результат', type: 'Object' },
|
|
219
|
-
],
|
|
220
|
-
|
|
221
|
-
SettingsComponent: NodeNameSettings, // опционально
|
|
222
|
-
|
|
223
|
-
defaultData: {
|
|
224
|
-
inputPin: '',
|
|
225
|
-
},
|
|
226
|
-
|
|
227
|
-
theme: {
|
|
228
|
-
headerColor: '#d97706', // Цвет заголовка
|
|
229
|
-
accentColor: '#f59e0b', // Акцентный цвет
|
|
230
|
-
},
|
|
231
|
-
});
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## Frontend: Settings компонент (опционально)
|
|
237
|
-
|
|
238
|
-
```jsx
|
|
239
|
-
// frontend/src/components/visual-editor/nodes/{category}/{NodeName}Settings.jsx
|
|
240
|
-
import React, { useState } from 'react';
|
|
241
|
-
import { Button } from '@/components/ui/button';
|
|
242
|
-
import CoordinatePickerDialog from '@/components/minecraft/CoordinatePickerDialog';
|
|
243
|
-
|
|
244
|
-
const NodeNameSettings = ({ nodeId, data, updateNodeData }) => {
|
|
245
|
-
const [pickerOpen, setPickerOpen] = useState(false);
|
|
246
|
-
|
|
247
|
-
const handleSelect = (coords) => {
|
|
248
|
-
updateNodeData(nodeId, {
|
|
249
|
-
x: coords.x,
|
|
250
|
-
y: coords.y,
|
|
251
|
-
z: coords.z,
|
|
252
|
-
});
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
return (
|
|
256
|
-
<div className="p-2 border-t border-slate-700">
|
|
257
|
-
<Button onClick={() => setPickerOpen(true)}>
|
|
258
|
-
Выбрать координаты
|
|
259
|
-
</Button>
|
|
260
|
-
<CoordinatePickerDialog
|
|
261
|
-
open={pickerOpen}
|
|
262
|
-
onClose={() => setPickerOpen(false)}
|
|
263
|
-
onSelect={handleSelect}
|
|
264
|
-
currentCoords={data}
|
|
265
|
-
targetBlock={true}
|
|
266
|
-
/>
|
|
267
|
-
</div>
|
|
268
|
-
);
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
export default NodeNameSettings;
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## Frontend: Регистрация
|
|
277
|
-
|
|
278
|
-
```javascript
|
|
279
|
-
// frontend/src/components/visual-editor/nodes/{category}/index.js
|
|
280
|
-
export { nodeNameDefinition } from './nodeName';
|
|
281
|
-
export { otherNodeDefinition } from './otherNode';
|
|
282
|
-
|
|
283
|
-
// frontend/src/components/visual-editor/nodes/index.js
|
|
284
|
-
import { nodeNameDefinition } from './category';
|
|
285
|
-
|
|
286
|
-
export function registerAllNodes() {
|
|
287
|
-
NodeRegistry.register(nodeNameDefinition);
|
|
288
|
-
// ...
|
|
289
|
-
}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Типы пинов
|
|
295
|
-
|
|
296
|
-
| Тип | Цвет | Описание |
|
|
297
|
-
|-----|------|----------|
|
|
298
|
-
| `Exec` | Белый | Поток выполнения |
|
|
299
|
-
| `String` | Розовый | Строка |
|
|
300
|
-
| `Number` | Синий | Число |
|
|
301
|
-
| `Boolean` | Красный | true/false |
|
|
302
|
-
| `Object` | Фиолетовый | Объект |
|
|
303
|
-
| `Array` | Оранжевый | Массив |
|
|
304
|
-
| `Wildcard` | Серый | Любой тип |
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
## Чеклист создания ноды
|
|
309
|
-
|
|
310
|
-
- [ ] Backend: создать `nodes/{category}/{name}.js` с execute/evaluate
|
|
311
|
-
- [ ] Backend: добавить в `node-registries/{category}.js`
|
|
312
|
-
- [ ] Frontend: создать `nodes/{category}/{name}.js` с NodeDefinition
|
|
313
|
-
- [ ] Frontend: создать Settings компонент (если нужен)
|
|
314
|
-
- [ ] Frontend: экспортировать в `nodes/{category}/index.js`
|
|
315
|
-
- [ ] Frontend: зарегистрировать в `nodes/index.js`
|
|
316
|
-
- [ ] Проверить что `type` совпадает на backend и frontend
|
|
317
|
-
- [ ] Использовать `resolvePinValue(node, 'pin')` НЕ `resolveInput`
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# Observability Engineering
|
|
2
|
-
|
|
3
|
-
Deep dive into distributed tracing, APM tools, OpenTelemetry, logs aggregation, and observability best practices.
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
Enable teams to gain deep visibility into distributed systems with comprehensive observability practices beyond basic monitoring.
|
|
8
|
-
|
|
9
|
-
## When to Use This Skill
|
|
10
|
-
|
|
11
|
-
Automatically activates when working on:
|
|
12
|
-
- Distributed tracing (Jaeger, Tempo, Zipkin)
|
|
13
|
-
- OpenTelemetry instrumentation
|
|
14
|
-
- APM tools (DataDog, New Relic, Dynatrace)
|
|
15
|
-
- Logs aggregation (ELK, Loki)
|
|
16
|
-
- Correlation strategies (trace IDs, unified observability)
|
|
17
|
-
- Service mesh observability
|
|
18
|
-
- Observability cost optimization
|
|
19
|
-
|
|
20
|
-
## Quick Start Checklist
|
|
21
|
-
|
|
22
|
-
- [ ] Instrument application with OpenTelemetry
|
|
23
|
-
- [ ] Set up distributed tracing backend
|
|
24
|
-
- [ ] Configure logs aggregation
|
|
25
|
-
- [ ] Implement correlation (trace IDs across logs/metrics/traces)
|
|
26
|
-
- [ ] Set up APM dashboards
|
|
27
|
-
- [ ] Configure sampling strategies
|
|
28
|
-
- [ ] Monitor observability costs
|
|
29
|
-
- [ ] Create SLO-based alerts
|
|
30
|
-
|
|
31
|
-
## Core Concepts
|
|
32
|
-
|
|
33
|
-
### Three Pillars of Observability
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
Logs: What happened (events)
|
|
37
|
-
Metrics: How much (counters, gauges)
|
|
38
|
-
Traces: Where time was spent (distributed request flow)
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### OpenTelemetry
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
import { trace, context } from '@opentelemetry/api';
|
|
45
|
-
|
|
46
|
-
const tracer = trace.getTracer('my-service');
|
|
47
|
-
|
|
48
|
-
async function handleRequest(req, res) {
|
|
49
|
-
const span = tracer.startSpan('handleRequest');
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
const user = await fetchUser(req.userId);
|
|
53
|
-
span.setAttribute('user.id', user.id);
|
|
54
|
-
|
|
55
|
-
const result = await processData(user);
|
|
56
|
-
res.json(result);
|
|
57
|
-
} finally {
|
|
58
|
-
span.end();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Resource Files
|
|
64
|
-
|
|
65
|
-
### Tracing & APM
|
|
66
|
-
- **[distributed-tracing.md](resources/distributed-tracing.md)** - Jaeger, Tempo, trace propagation, span design
|
|
67
|
-
- **[opentelemetry.md](resources/opentelemetry.md)** - OTEL SDK, auto-instrumentation, collectors, exporters
|
|
68
|
-
- **[apm-tools.md](resources/apm-tools.md)** - DataDog, New Relic, Dynatrace comparison
|
|
69
|
-
|
|
70
|
-
### Logs & Correlation
|
|
71
|
-
- **[logs-aggregation.md](resources/logs-aggregation.md)** - ELK Stack, Loki, structured logging
|
|
72
|
-
- **[correlation-strategies.md](resources/correlation-strategies.md)** - Trace IDs, unified observability
|
|
73
|
-
|
|
74
|
-
### Cost & Best Practices
|
|
75
|
-
- **[observability-cost-optimization.md](resources/observability-cost-optimization.md)** - Sampling, retention, cost strategies
|
|
76
|
-
|
|
77
|
-
## Best Practices
|
|
78
|
-
|
|
79
|
-
✅ Use OpenTelemetry (vendor-neutral)
|
|
80
|
-
✅ Implement structured logging
|
|
81
|
-
✅ Correlate logs/metrics/traces (trace IDs)
|
|
82
|
-
✅ Sample intelligently (head-based, tail-based)
|
|
83
|
-
✅ Monitor observability costs
|
|
84
|
-
✅ Create dashboards from traces
|
|
85
|
-
✅ Use service mesh for automatic instrumentation
|
|
86
|
-
|
|
87
|
-
## Integration Points
|
|
88
|
-
|
|
89
|
-
- **sre**: Monitoring and alerting
|
|
90
|
-
- **devsecops**: Security monitoring
|
|
91
|
-
- **platform-engineering**: Service mesh observability
|
|
92
|
-
- **backend-dev-guidelines**: Application instrumentation
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
96
|
-
🎯 SKILL ACTIVATED: observability-engineering
|
|
97
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
**Total Resources:** 6 focused guides on observability engineering
|
|
101
|
-
**Focus:** Distributed tracing, OpenTelemetry, APM, cost optimization
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# APM Tools
|
|
2
|
-
|
|
3
|
-
Comparison and guide to Application Performance Monitoring tools: DataDog, New Relic, Dynatrace.
|
|
4
|
-
|
|
5
|
-
## DataDog
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
// DataDog APM
|
|
9
|
-
import tracer from 'dd-trace';
|
|
10
|
-
tracer.init({
|
|
11
|
-
service: 'my-app',
|
|
12
|
-
env: 'production',
|
|
13
|
-
version: '1.0.0',
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Auto-instruments Express, Prisma, Redis, etc.
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Pros:**
|
|
20
|
-
- ✅ Easy setup (auto-instrumentation)
|
|
21
|
-
- ✅ Unified logs/metrics/traces
|
|
22
|
-
- ✅ Great dashboards
|
|
23
|
-
- ✅ APM + infrastructure monitoring
|
|
24
|
-
|
|
25
|
-
**Cons:**
|
|
26
|
-
- ❌ Expensive at scale
|
|
27
|
-
- ❌ Vendor lock-in
|
|
28
|
-
|
|
29
|
-
## New Relic
|
|
30
|
-
|
|
31
|
-
```javascript
|
|
32
|
-
// newrelic.js
|
|
33
|
-
exports.config = {
|
|
34
|
-
app_name: ['My App'],
|
|
35
|
-
license_key: process.env.NEW_RELIC_LICENSE_KEY,
|
|
36
|
-
distributed_tracing: {
|
|
37
|
-
enabled: true,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// Load before app
|
|
42
|
-
require('newrelic');
|
|
43
|
-
const app = require('./app');
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
**Pros:**
|
|
47
|
-
- ✅ Powerful query language (NRQL)
|
|
48
|
-
- ✅ Good for complex architectures
|
|
49
|
-
- ✅ Real-time alerting
|
|
50
|
-
|
|
51
|
-
**Cons:**
|
|
52
|
-
- ❌ Steeper learning curve
|
|
53
|
-
- ❌ Can be expensive
|
|
54
|
-
|
|
55
|
-
## Dynatrace
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
Dynatrace OneAgent (auto-deploys)
|
|
59
|
-
- No code changes required
|
|
60
|
-
- Full-stack monitoring
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
**Pros:**
|
|
64
|
-
- ✅ AI-powered root cause analysis
|
|
65
|
-
- ✅ Zero-code instrumentation
|
|
66
|
-
- ✅ Enterprise features
|
|
67
|
-
|
|
68
|
-
**Cons:**
|
|
69
|
-
- ❌ Most expensive
|
|
70
|
-
- ❌ Overkill for small teams
|
|
71
|
-
|
|
72
|
-
## Cost Comparison
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
Small team (5 services, 1M spans/month):
|
|
76
|
-
- DataDog: ~$500/month
|
|
77
|
-
- New Relic: ~$400/month
|
|
78
|
-
- Dynatrace: ~$800/month
|
|
79
|
-
|
|
80
|
-
Large team (50 services, 100M spans/month):
|
|
81
|
-
- DataDog: ~$5,000/month
|
|
82
|
-
- New Relic: ~$4,000/month
|
|
83
|
-
- Dynatrace: ~$10,000/month
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Open Source Alternative
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
Jaeger + Prometheus + Grafana = $0
|
|
90
|
-
(but requires self-hosting and maintenance)
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
**Related Resources:**
|
|
96
|
-
- observability-cost-optimization.md - Cost management
|
|
97
|
-
- opentelemetry.md - Vendor-neutral instrumentation
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# Correlation Strategies
|
|
2
|
-
|
|
3
|
-
Guide to correlating logs, metrics, and traces for unified observability.
|
|
4
|
-
|
|
5
|
-
## Trace ID Propagation
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
import { trace, context } from '@opentelemetry/api';
|
|
9
|
-
import { logger } from './logger';
|
|
10
|
-
|
|
11
|
-
app.use((req, res, next) => {
|
|
12
|
-
const span = trace.getActiveSpan();
|
|
13
|
-
const traceId = span?.spanContext().traceId;
|
|
14
|
-
|
|
15
|
-
// Attach trace ID to logger context
|
|
16
|
-
req.logger = logger.child({ traceId });
|
|
17
|
-
|
|
18
|
-
next();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
app.get('/users/:id', async (req, res) => {
|
|
22
|
-
req.logger.info('Fetching user', { userId: req.params.id });
|
|
23
|
-
// Log includes traceId automatically
|
|
24
|
-
|
|
25
|
-
const user = await getUser(req.params.id);
|
|
26
|
-
res.json(user);
|
|
27
|
-
});
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Unified Observability
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
Request arrives:
|
|
34
|
-
1. Generate trace ID
|
|
35
|
-
2. Create span (trace)
|
|
36
|
-
3. Emit metrics (counter, histogram)
|
|
37
|
-
4. Log with trace ID
|
|
38
|
-
|
|
39
|
-
All three pillars linked by trace ID:
|
|
40
|
-
- Logs: {"traceId": "abc123", "message": "User fetched"}
|
|
41
|
-
- Metrics: user_requests_total{trace_id="abc123"}
|
|
42
|
-
- Traces: Trace abc123 shows spans
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Correlation in Practice
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
// 1. Start span (tracing)
|
|
49
|
-
const span = tracer.startSpan('handleRequest');
|
|
50
|
-
const traceId = span.spanContext().traceId;
|
|
51
|
-
|
|
52
|
-
// 2. Log with trace ID (logs)
|
|
53
|
-
logger.info('Processing request', { traceId, userId: req.userId });
|
|
54
|
-
|
|
55
|
-
// 3. Increment metric (metrics)
|
|
56
|
-
requestCounter.add(1, { traceId, endpoint: '/users' });
|
|
57
|
-
|
|
58
|
-
// 4. All linked by traceId
|
|
59
|
-
span.end();
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Querying Across Pillars
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
# Find all logs for a trace
|
|
66
|
-
traceId:"abc123"
|
|
67
|
-
|
|
68
|
-
# Find traces with errors
|
|
69
|
-
status:error AND service:"user-service"
|
|
70
|
-
|
|
71
|
-
# Find metrics for specific trace
|
|
72
|
-
trace_id="abc123" AND metric="http_request_duration"
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Best Practices
|
|
76
|
-
|
|
77
|
-
✅ Always propagate trace IDs
|
|
78
|
-
✅ Include trace IDs in all logs
|
|
79
|
-
✅ Use trace IDs in metric labels (when cardinality allows)
|
|
80
|
-
✅ Link dashboards (click log → view trace)
|
|
81
|
-
✅ Standardize field names (traceId, spanId)
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
**Related Resources:**
|
|
86
|
-
- distributed-tracing.md - Trace propagation
|
|
87
|
-
- logs-aggregation.md - Structured logging with trace IDs
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Distributed Tracing
|
|
2
|
-
|
|
3
|
-
Guide to implementing distributed tracing with Jaeger, Tempo, and other tools.
|
|
4
|
-
|
|
5
|
-
## What is Distributed Tracing?
|
|
6
|
-
|
|
7
|
-
Tracks requests as they flow through microservices:
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
User Request
|
|
11
|
-
↓
|
|
12
|
-
API Gateway (span 1) ──→ 50ms
|
|
13
|
-
↓
|
|
14
|
-
User Service (span 2) ──→ 20ms
|
|
15
|
-
↓
|
|
16
|
-
Database (span 3) ──────→ 80ms
|
|
17
|
-
Total: 150ms
|
|
18
|
-
|
|
19
|
-
Trace shows:
|
|
20
|
-
- Total request time: 150ms
|
|
21
|
-
- Database was bottleneck: 80ms (53%)
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Jaeger Setup
|
|
25
|
-
|
|
26
|
-
```yaml
|
|
27
|
-
# docker-compose.yml
|
|
28
|
-
version: '3'
|
|
29
|
-
services:
|
|
30
|
-
jaeger:
|
|
31
|
-
image: jaegertracing/all-in-one:latest
|
|
32
|
-
ports:
|
|
33
|
-
- "16686:16686" # UI
|
|
34
|
-
- "14268:14268" # HTTP collector
|
|
35
|
-
- "6831:6831/udp" # Agent
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Instrumentation
|
|
39
|
-
|
|
40
|
-
```typescript
|
|
41
|
-
import { trace, context, SpanStatusCode } from '@opentelemetry/api';
|
|
42
|
-
|
|
43
|
-
const tracer = trace.getTracer('user-service');
|
|
44
|
-
|
|
45
|
-
async function getUser(userId: string) {
|
|
46
|
-
const span = tracer.startSpan('getUser');
|
|
47
|
-
span.setAttribute('user.id', userId);
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
const user = await db.users.findUnique({ where: { id: userId } });
|
|
51
|
-
span.setStatus({ code: SpanStatusCode.OK });
|
|
52
|
-
return user;
|
|
53
|
-
} catch (error) {
|
|
54
|
-
span.setStatus({
|
|
55
|
-
code: SpanStatusCode.ERROR,
|
|
56
|
-
message: error.message
|
|
57
|
-
});
|
|
58
|
-
span.recordException(error);
|
|
59
|
-
throw error;
|
|
60
|
-
} finally {
|
|
61
|
-
span.end();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Trace Propagation
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
// Service A creates trace
|
|
70
|
-
const span = tracer.startSpan('callServiceB');
|
|
71
|
-
const headers = {};
|
|
72
|
-
|
|
73
|
-
// Inject trace context into headers
|
|
74
|
-
propagation.inject(context.active(), headers);
|
|
75
|
-
|
|
76
|
-
// Call Service B with trace context
|
|
77
|
-
await fetch('http://service-b/api', { headers });
|
|
78
|
-
|
|
79
|
-
span.end();
|
|
80
|
-
|
|
81
|
-
// Service B continues the trace
|
|
82
|
-
const extractedContext = propagation.extract(context.active(), req.headers);
|
|
83
|
-
const span = tracer.startSpan('handleRequest', {}, extractedContext);
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Best Practices
|
|
87
|
-
|
|
88
|
-
✅ Trace critical paths
|
|
89
|
-
✅ Add meaningful attributes
|
|
90
|
-
✅ Sample high-volume endpoints
|
|
91
|
-
✅ Keep span names consistent
|
|
92
|
-
✅ Record errors in spans
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
**Related Resources:**
|
|
97
|
-
- opentelemetry.md - OTEL implementation
|
|
98
|
-
- correlation-strategies.md - Trace ID usage
|