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,101 @@
|
|
|
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
|
|
@@ -0,0 +1,97 @@
|
|
|
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
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
|
@@ -0,0 +1,98 @@
|
|
|
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
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Logs Aggregation
|
|
2
|
+
|
|
3
|
+
Guide to ELK Stack, Loki, and structured logging for centralized log management.
|
|
4
|
+
|
|
5
|
+
## ELK Stack (Elasticsearch, Logstash, Kibana)
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
# docker-compose.yml
|
|
9
|
+
version: '3'
|
|
10
|
+
services:
|
|
11
|
+
elasticsearch:
|
|
12
|
+
image: elasticsearch:8.11.0
|
|
13
|
+
environment:
|
|
14
|
+
- discovery.type=single-node
|
|
15
|
+
ports:
|
|
16
|
+
- "9200:9200"
|
|
17
|
+
|
|
18
|
+
logstash:
|
|
19
|
+
image: logstash:8.11.0
|
|
20
|
+
volumes:
|
|
21
|
+
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
|
|
22
|
+
|
|
23
|
+
kibana:
|
|
24
|
+
image: kibana:8.11.0
|
|
25
|
+
ports:
|
|
26
|
+
- "5601:5601"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Structured Logging
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import winston from 'winston';
|
|
33
|
+
|
|
34
|
+
const logger = winston.createLogger({
|
|
35
|
+
format: winston.format.json(),
|
|
36
|
+
transports: [
|
|
37
|
+
new winston.transports.Console(),
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
logger.info('User logged in', {
|
|
42
|
+
userId: 'user-123',
|
|
43
|
+
ipAddress: req.ip,
|
|
44
|
+
traceId: span.spanContext().traceId, // Correlation
|
|
45
|
+
timestamp: new Date().toISOString(),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Output:
|
|
49
|
+
// {"level":"info","message":"User logged in","userId":"user-123","traceId":"abc123",...}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Grafana Loki
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
# loki-config.yaml
|
|
56
|
+
auth_enabled: false
|
|
57
|
+
|
|
58
|
+
server:
|
|
59
|
+
http_listen_port: 3100
|
|
60
|
+
|
|
61
|
+
ingester:
|
|
62
|
+
lifecycler:
|
|
63
|
+
ring:
|
|
64
|
+
kvstore:
|
|
65
|
+
store: inmemory
|
|
66
|
+
replication_factor: 1
|
|
67
|
+
|
|
68
|
+
schema_config:
|
|
69
|
+
configs:
|
|
70
|
+
- from: 2020-10-24
|
|
71
|
+
store: boltdb-shipper
|
|
72
|
+
object_store: s3
|
|
73
|
+
schema: v11
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
// Ship logs to Loki
|
|
78
|
+
import Pino from 'pino';
|
|
79
|
+
|
|
80
|
+
const logger = Pino({
|
|
81
|
+
transport: {
|
|
82
|
+
target: 'pino-loki',
|
|
83
|
+
options: {
|
|
84
|
+
batching: true,
|
|
85
|
+
interval: 5,
|
|
86
|
+
host: 'http://loki:3100',
|
|
87
|
+
labels: {
|
|
88
|
+
service: 'my-app',
|
|
89
|
+
env: 'production',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Log Levels
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
logger.error('Payment failed', { orderId: '123', error: err.message });
|
|
100
|
+
logger.warn('High memory usage', { memoryMB: 850 });
|
|
101
|
+
logger.info('User registered', { userId: 'user-456' });
|
|
102
|
+
logger.debug('Cache miss', { key: 'user:123' });
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Best Practices
|
|
106
|
+
|
|
107
|
+
✅ Use structured logging (JSON)
|
|
108
|
+
✅ Include trace IDs for correlation
|
|
109
|
+
✅ Log at appropriate levels
|
|
110
|
+
✅ Avoid logging sensitive data (PII, passwords)
|
|
111
|
+
✅ Set retention policies (30-90 days)
|
|
112
|
+
✅ Index important fields
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
**Related Resources:**
|
|
117
|
+
- correlation-strategies.md - Linking logs with traces
|
|
118
|
+
- observability-cost-optimization.md - Log retention costs
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Observability Cost Optimization
|
|
2
|
+
|
|
3
|
+
Guide to managing observability costs through sampling, retention policies, and efficient practices.
|
|
4
|
+
|
|
5
|
+
## Sampling Strategies
|
|
6
|
+
|
|
7
|
+
### Head-Based Sampling
|
|
8
|
+
```typescript
|
|
9
|
+
// Sample 10% of traces
|
|
10
|
+
const sampler = new TraceIdRatioBasedSampler(0.1);
|
|
11
|
+
|
|
12
|
+
const sdk = new NodeSDK({
|
|
13
|
+
sampler,
|
|
14
|
+
// ...
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// Pros: Simple, predictable cost
|
|
18
|
+
// Cons: May miss rare errors
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Tail-Based Sampling
|
|
22
|
+
```typescript
|
|
23
|
+
// Sample based on outcome (keep all errors, 1% of success)
|
|
24
|
+
const tailSampler = {
|
|
25
|
+
shouldSample: (span) => {
|
|
26
|
+
if (span.status.code === SpanStatusCode.ERROR) {
|
|
27
|
+
return true; // Keep all errors
|
|
28
|
+
}
|
|
29
|
+
if (span.attributes['http.status_code'] >= 500) {
|
|
30
|
+
return true; // Keep server errors
|
|
31
|
+
}
|
|
32
|
+
return Math.random() < 0.01; // 1% of successful requests
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// Pros: Keeps important traces, lower cost
|
|
37
|
+
// Cons: More complex
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Retention Policies
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Hot storage (recent, fast):
|
|
44
|
+
- Traces: 7 days
|
|
45
|
+
- Logs: 14 days
|
|
46
|
+
- Metrics: 30 days
|
|
47
|
+
|
|
48
|
+
Warm storage (archived, slower):
|
|
49
|
+
- Traces: 30 days
|
|
50
|
+
- Logs: 90 days
|
|
51
|
+
- Metrics: 1 year
|
|
52
|
+
|
|
53
|
+
Cold storage (compliance):
|
|
54
|
+
- Logs: 7 years (compressed)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Cost Breakdown
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Typical observability costs (10 services, 1M RPM):
|
|
61
|
+
|
|
62
|
+
DataDog:
|
|
63
|
+
- APM: $2,000/month (100M spans)
|
|
64
|
+
- Logs: $1,500/month (500 GB)
|
|
65
|
+
- Metrics: $500/month
|
|
66
|
+
- Total: $4,000/month
|
|
67
|
+
|
|
68
|
+
Self-Hosted (Jaeger + Loki + Prometheus):
|
|
69
|
+
- Infrastructure: $800/month
|
|
70
|
+
- Maintenance: $3,000/month (0.3 engineer)
|
|
71
|
+
- Total: $3,800/month
|
|
72
|
+
|
|
73
|
+
Savings with optimization:
|
|
74
|
+
- 90% sampling: $400 APM (vs $2,000)
|
|
75
|
+
- 30-day retention: $500 logs (vs $1,500)
|
|
76
|
+
- Total: $1,400/month (65% reduction)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Optimization Strategies
|
|
80
|
+
|
|
81
|
+
### 1. Sample Aggressively
|
|
82
|
+
```
|
|
83
|
+
High-volume endpoints: 1% sample rate
|
|
84
|
+
Low-volume endpoints: 100% sample rate
|
|
85
|
+
Errors: Always keep
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 2. Reduce Log Volume
|
|
89
|
+
```typescript
|
|
90
|
+
// Don't log every request
|
|
91
|
+
if (req.path !== '/health' && req.path !== '/metrics') {
|
|
92
|
+
logger.info('Request', { method: req.method, path: req.path });
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Sample logs
|
|
96
|
+
if (Math.random() < 0.1) { // 10% of logs
|
|
97
|
+
logger.debug('Debug info', { ...details });
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 3. Optimize Metric Cardinality
|
|
102
|
+
```typescript
|
|
103
|
+
// ❌ Bad: Unbounded cardinality
|
|
104
|
+
requestCounter.add(1, { userId: req.userId }); // Millions of users
|
|
105
|
+
|
|
106
|
+
// ✅ Good: Bounded cardinality
|
|
107
|
+
requestCounter.add(1, { endpoint: req.route }); // ~100 endpoints
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 4. Use Cheaper Storage
|
|
111
|
+
```
|
|
112
|
+
S3 Glacier for old logs: $0.004/GB (vs $0.023/GB Standard)
|
|
113
|
+
83% cheaper for infrequently accessed data
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Monitoring Observability Costs
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
// Track observability data volume
|
|
120
|
+
observabilityCostGauge.set(dailySpanCount * 0.0001); // $0.0001 per span
|
|
121
|
+
|
|
122
|
+
// Alert on cost spikes
|
|
123
|
+
if (dailyObservabilityCost > threshold) {
|
|
124
|
+
alert('Observability costs exceeded budget');
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Best Practices
|
|
129
|
+
|
|
130
|
+
✅ Sample high-volume endpoints
|
|
131
|
+
✅ Always keep errors
|
|
132
|
+
✅ Set aggressive retention policies
|
|
133
|
+
✅ Reduce metric cardinality
|
|
134
|
+
✅ Use cheaper storage tiers
|
|
135
|
+
✅ Monitor observability costs
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
**Related Resources:**
|
|
140
|
+
- distributed-tracing.md - Sampling implementation
|
|
141
|
+
- logs-aggregation.md - Log retention
|