dojo.md 0.1.0 → 0.2.1
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/courses/GENERATION_LOG.md +72 -0
- package/courses/api-error-handling/course.yaml +16 -0
- package/courses/api-error-handling/scenarios/level-1/error-response-format.yaml +131 -0
- package/courses/api-error-handling/scenarios/level-1/http-status-codes-basics.yaml +90 -0
- package/courses/api-error-handling/scenarios/level-1/rate-limiting-basics.yaml +135 -0
- package/courses/api-error-handling/scenarios/level-1/request-validation-errors.yaml +208 -0
- package/courses/api-error-handling/scenarios/level-2/circuit-breaker-pattern.yaml +189 -0
- package/courses/api-error-handling/scenarios/level-2/idempotency-retry-logic.yaml +159 -0
- package/courses/api-error-handling/scenarios/level-2/rfc-7807-problem-details.yaml +178 -0
- package/courses/api-error-handling/scenarios/level-2/webhook-error-handling.yaml +211 -0
- package/courses/api-error-handling/scenarios/level-3/distributed-tracing-errors.yaml +275 -0
- package/courses/aws-lambda-debugging/course.yaml +11 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/api-gateway-integration.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/cloudwatch-logs-basics.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/cold-start-basics.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/environment-variable-issues.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/first-debugging-shift.yaml +73 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/handler-import-errors.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/iam-permission-errors.yaml +68 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/invocation-errors.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/lambda-timeout-errors.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/memory-and-oom.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/async-invocation-failures.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/cold-start-optimization.yaml +76 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/dynamodb-streams-debugging.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/intermediate-debugging-shift.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/lambda-concurrency-management.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/lambda-layers-debugging.yaml +76 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/sam-local-debugging.yaml +74 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/sqs-event-source.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/vpc-networking-issues.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/xray-tracing.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/advanced-debugging-shift.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/container-image-lambda.yaml +79 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/cross-account-invocation.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/eventbridge-patterns.yaml +79 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/iac-deployment-debugging.yaml +68 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/kinesis-stream-processing.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/lambda-at-edge.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/lambda-extensions-debugging.yaml +67 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/powertools-observability.yaml +79 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/step-functions-debugging.yaml +80 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/cost-optimization-strategy.yaml +67 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/expert-debugging-shift.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/incident-management-serverless.yaml +61 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/multi-region-serverless.yaml +67 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/observability-platform-design.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-architecture-design.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-data-architecture.yaml +66 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-migration-strategy.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-security-design.yaml +60 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-testing-strategy.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/board-serverless-strategy.yaml +63 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/consulting-serverless-adoption.yaml +57 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/industry-serverless-patterns.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/ma-serverless-integration.yaml +75 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/master-debugging-shift.yaml +61 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/organizational-serverless-transformation.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/regulatory-serverless.yaml +61 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/serverless-economics.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/serverless-future-technology.yaml +66 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/serverless-platform-design.yaml +71 -0
- package/courses/docker-container-debugging/course.yaml +11 -0
- package/courses/docker-container-debugging/scenarios/level-1/container-exit-codes.yaml +59 -0
- package/courses/docker-container-debugging/scenarios/level-1/container-networking-basics.yaml +69 -0
- package/courses/docker-container-debugging/scenarios/level-1/docker-logs-debugging.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-1/dockerfile-build-failures.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-1/environment-variable-issues.yaml +74 -0
- package/courses/docker-container-debugging/scenarios/level-1/first-debugging-shift.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-1/image-pull-failures.yaml +68 -0
- package/courses/docker-container-debugging/scenarios/level-1/port-mapping-issues.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-1/resource-limits-oom.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-1/volume-mount-problems.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-2/container-health-checks.yaml +73 -0
- package/courses/docker-container-debugging/scenarios/level-2/docker-compose-debugging.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-2/docker-exec-debugging.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-2/image-layer-optimization.yaml +81 -0
- package/courses/docker-container-debugging/scenarios/level-2/intermediate-debugging-shift.yaml +73 -0
- package/courses/docker-container-debugging/scenarios/level-2/logging-and-log-rotation.yaml +76 -0
- package/courses/docker-container-debugging/scenarios/level-2/multi-stage-build-debugging.yaml +76 -0
- package/courses/docker-container-debugging/scenarios/level-2/network-debugging-tools.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-2/pid1-signal-handling.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-2/security-scanning-basics.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-3/advanced-debugging-shift.yaml +77 -0
- package/courses/docker-container-debugging/scenarios/level-3/buildkit-optimization.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-3/container-filesystem-debugging.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-3/container-security-hardening.yaml +74 -0
- package/courses/docker-container-debugging/scenarios/level-3/disk-space-management.yaml +74 -0
- package/courses/docker-container-debugging/scenarios/level-3/docker-api-automation.yaml +72 -0
- package/courses/docker-container-debugging/scenarios/level-3/docker-daemon-issues.yaml +73 -0
- package/courses/docker-container-debugging/scenarios/level-3/docker-in-docker-ci.yaml +69 -0
- package/courses/docker-container-debugging/scenarios/level-3/overlay-network-debugging.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-3/production-container-ops.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-4/cicd-pipeline-design.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-monitoring-observability.yaml +63 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-orchestration-strategy.yaml +62 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-performance-engineering.yaml +64 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-security-architecture.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-4/enterprise-image-management.yaml +58 -0
- package/courses/docker-container-debugging/scenarios/level-4/expert-debugging-shift.yaml +63 -0
- package/courses/docker-container-debugging/scenarios/level-4/incident-response-containers.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-4/multi-environment-management.yaml +65 -0
- package/courses/docker-container-debugging/scenarios/level-4/stateful-service-containers.yaml +65 -0
- package/courses/docker-container-debugging/scenarios/level-5/board-infrastructure-strategy.yaml +58 -0
- package/courses/docker-container-debugging/scenarios/level-5/consulting-container-strategy.yaml +61 -0
- package/courses/docker-container-debugging/scenarios/level-5/container-platform-architecture.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/container-platform-economics.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/container-technology-evolution.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/disaster-recovery-containers.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-5/industry-container-patterns.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-5/master-debugging-shift.yaml +62 -0
- package/courses/docker-container-debugging/scenarios/level-5/organizational-transformation.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/regulatory-compliance-containers.yaml +61 -0
- package/courses/github-actions-cicd/course.yaml +10 -0
- package/courses/github-actions-cicd/scenarios/level-1/actions-and-runners.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-1/basic-workflow-syntax.yaml +52 -0
- package/courses/github-actions-cicd/scenarios/level-1/branch-protection-checks.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-1/environment-variables-secrets.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-1/first-cicd-shift.yaml +62 -0
- package/courses/github-actions-cicd/scenarios/level-1/job-dependencies-outputs.yaml +62 -0
- package/courses/github-actions-cicd/scenarios/level-1/simple-ci-pipeline.yaml +57 -0
- package/courses/github-actions-cicd/scenarios/level-1/workflow-debugging.yaml +90 -0
- package/courses/github-actions-cicd/scenarios/level-1/workflow-status-notifications.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-1/workflow-triggers.yaml +56 -0
- package/courses/github-actions-cicd/scenarios/level-2/concurrency-control.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-2/conditional-execution.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-2/custom-actions-development.yaml +55 -0
- package/courses/github-actions-cicd/scenarios/level-2/dependency-caching.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-2/deployment-workflows.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-2/github-packages-publishing.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-2/intermediate-cicd-shift.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-2/matrix-builds.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-2/reusable-workflows.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-2/workflow-cost-optimization.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-3/advanced-cicd-shift.yaml +64 -0
- package/courses/github-actions-cicd/scenarios/level-3/compliance-automation.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-3/docker-action-development.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-3/github-environments.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-3/monorepo-ci.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-3/oidc-cloud-deployments.yaml +55 -0
- package/courses/github-actions-cicd/scenarios/level-3/release-automation.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-3/security-hardening.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-3/self-hosted-runners.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-3/workflow-optimization.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-data-architecture.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-economics-roi.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-executive-communication.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-incident-response.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-org-design.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-platform-architecture.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-training-program.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-vendor-evaluation.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-4/enterprise-cicd-governance.yaml +55 -0
- package/courses/github-actions-cicd/scenarios/level-4/expert-cicd-shift.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-ai-future.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-behavioral-science.yaml +70 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-board-strategy.yaml +56 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-consulting-engagement.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-industry-benchmarks.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-ma-integration.yaml +73 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-product-development.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-regulatory-landscape.yaml +72 -0
- package/courses/github-actions-cicd/scenarios/level-5/comprehensive-cicd-system.yaml +66 -0
- package/courses/github-actions-cicd/scenarios/level-5/master-cicd-shift.yaml +76 -0
- package/courses/github-pr-review/scenarios/level-2/api-change-review.yaml +82 -0
- package/courses/github-pr-review/scenarios/level-2/automated-review-tooling.yaml +53 -0
- package/courses/github-pr-review/scenarios/level-2/cross-team-review.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-2/intermediate-review-shift.yaml +66 -0
- package/courses/github-pr-review/scenarios/level-2/performance-review-patterns.yaml +99 -0
- package/courses/github-pr-review/scenarios/level-2/review-disagreement-resolution.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-2/review-metrics-analysis.yaml +63 -0
- package/courses/github-pr-review/scenarios/level-2/review-turnaround-sla.yaml +54 -0
- package/courses/github-pr-review/scenarios/level-2/stacked-pr-review.yaml +65 -0
- package/courses/github-pr-review/scenarios/level-3/advanced-review-shift.yaml +65 -0
- package/courses/github-pr-review/scenarios/level-3/ai-powered-review.yaml +58 -0
- package/courses/github-pr-review/scenarios/level-3/compliance-review-process.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-3/cross-functional-review.yaml +60 -0
- package/courses/github-pr-review/scenarios/level-3/incident-driven-review.yaml +63 -0
- package/courses/github-pr-review/scenarios/level-3/large-scale-review-operations.yaml +55 -0
- package/courses/github-pr-review/scenarios/level-3/monorepo-review-process.yaml +68 -0
- package/courses/github-pr-review/scenarios/level-3/review-automation-platform.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-3/review-culture-design.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-3/review-data-pipeline.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-4/enterprise-review-operations.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-4/expert-review-shift.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-4/review-data-architecture.yaml +69 -0
- package/courses/github-pr-review/scenarios/level-4/review-economics-roi.yaml +63 -0
- package/courses/github-pr-review/scenarios/level-4/review-executive-communication.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-4/review-incident-postmortem.yaml +69 -0
- package/courses/github-pr-review/scenarios/level-4/review-org-design.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-4/review-platform-architecture.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-4/review-training-program.yaml +66 -0
- package/courses/github-pr-review/scenarios/level-4/review-vendor-evaluation.yaml +76 -0
- package/courses/github-pr-review/scenarios/level-5/comprehensive-review-system.yaml +68 -0
- package/courses/github-pr-review/scenarios/level-5/master-review-shift.yaml +73 -0
- package/courses/github-pr-review/scenarios/level-5/review-ai-future.yaml +69 -0
- package/courses/github-pr-review/scenarios/level-5/review-behavioral-science.yaml +66 -0
- package/courses/github-pr-review/scenarios/level-5/review-board-strategy.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-5/review-consulting-engagement.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-5/review-devtools-product.yaml +71 -0
- package/courses/github-pr-review/scenarios/level-5/review-industry-benchmarks.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-5/review-ma-integration.yaml +76 -0
- package/courses/github-pr-review/scenarios/level-5/review-regulatory-landscape.yaml +78 -0
- package/courses/kubernetes-deployment-troubleshooting/course.yaml +12 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/configmap-secret-issues.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/crashloopbackoff.yaml +68 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/deployment-rollout.yaml +56 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/first-troubleshooting-shift.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/health-probe-failures.yaml +70 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/imagepullbackoff.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/kubectl-debugging-basics.yaml +56 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/oomkilled.yaml +70 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/pending-pods.yaml +68 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/service-not-reachable.yaml +66 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/dns-resolution-failures.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/helm-deployment-failures.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/hpa-scaling-issues.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/ingress-routing-issues.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/init-container-failures.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/intermediate-troubleshooting-shift.yaml +66 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/network-policy-blocking.yaml +67 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/persistent-volume-issues.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/rbac-permission-denied.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/resource-quota-limits.yaml +64 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/advanced-troubleshooting-shift.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/cluster-upgrade-failures.yaml +71 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/gitops-drift-detection.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/job-cronjob-failures.yaml +67 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/monitoring-alerting-gaps.yaml +64 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/multi-container-debugging.yaml +68 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/node-pressure-evictions.yaml +70 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/pod-disruption-budgets.yaml +59 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/service-mesh-debugging.yaml +64 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/statefulset-troubleshooting.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/capacity-planning.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/cost-optimization.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/disaster-recovery-design.yaml +56 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/executive-communication.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/expert-troubleshooting-shift.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/incident-management-process.yaml +59 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/multi-cluster-operations.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/multi-tenancy-design.yaml +55 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/platform-engineering.yaml +59 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/security-hardening.yaml +58 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/behavioral-science.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/board-strategy.yaml +61 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/cloud-native-future.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/comprehensive-platform.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/consulting-engagement.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/industry-benchmarks.yaml +58 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/ma-integration.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/master-troubleshooting-shift.yaml +73 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/product-development.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/regulatory-compliance.yaml +76 -0
- package/courses/mysql-query-optimization/course.yaml +11 -0
- package/courses/mysql-query-optimization/scenarios/level-1/buffer-pool-basics.yaml +65 -0
- package/courses/mysql-query-optimization/scenarios/level-1/explain-basics.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-1/first-optimization-shift.yaml +78 -0
- package/courses/mysql-query-optimization/scenarios/level-1/innodb-index-fundamentals.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-1/join-basics.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-1/n-plus-one-queries.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-1/query-rewriting-basics.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-1/select-star-problems.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-1/slow-query-diagnosis.yaml +65 -0
- package/courses/mysql-query-optimization/scenarios/level-1/where-clause-optimization.yaml +65 -0
- package/courses/mysql-query-optimization/scenarios/level-2/buffer-pool-tuning.yaml +64 -0
- package/courses/mysql-query-optimization/scenarios/level-2/composite-index-design.yaml +71 -0
- package/courses/mysql-query-optimization/scenarios/level-2/covering-and-invisible-indexes.yaml +69 -0
- package/courses/mysql-query-optimization/scenarios/level-2/cte-and-window-functions.yaml +78 -0
- package/courses/mysql-query-optimization/scenarios/level-2/intermediate-optimization-shift.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-2/join-optimization.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-2/performance-schema-analysis.yaml +69 -0
- package/courses/mysql-query-optimization/scenarios/level-2/query-optimizer-hints.yaml +74 -0
- package/courses/mysql-query-optimization/scenarios/level-2/subquery-optimization.yaml +70 -0
- package/courses/mysql-query-optimization/scenarios/level-2/write-optimization.yaml +63 -0
- package/courses/mysql-query-optimization/scenarios/level-3/advanced-optimization-shift.yaml +71 -0
- package/courses/mysql-query-optimization/scenarios/level-3/connection-management.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-3/full-text-search.yaml +77 -0
- package/courses/mysql-query-optimization/scenarios/level-3/json-optimization.yaml +87 -0
- package/courses/mysql-query-optimization/scenarios/level-3/lock-contention-analysis.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-3/monitoring-alerting.yaml +63 -0
- package/courses/mysql-query-optimization/scenarios/level-3/online-schema-changes.yaml +79 -0
- package/courses/mysql-query-optimization/scenarios/level-3/partitioning-strategies.yaml +83 -0
- package/courses/mysql-query-optimization/scenarios/level-3/query-profiling-deep-dive.yaml +84 -0
- package/courses/mysql-query-optimization/scenarios/level-3/replication-optimization.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-4/aurora-vs-rds-evaluation.yaml +61 -0
- package/courses/mysql-query-optimization/scenarios/level-4/data-architecture.yaml +62 -0
- package/courses/mysql-query-optimization/scenarios/level-4/database-migration-planning.yaml +59 -0
- package/courses/mysql-query-optimization/scenarios/level-4/enterprise-governance.yaml +50 -0
- package/courses/mysql-query-optimization/scenarios/level-4/executive-communication.yaml +54 -0
- package/courses/mysql-query-optimization/scenarios/level-4/expert-optimization-shift.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-4/high-availability-architecture.yaml +60 -0
- package/courses/mysql-query-optimization/scenarios/level-4/optimizer-internals.yaml +62 -0
- package/courses/mysql-query-optimization/scenarios/level-4/performance-sla-design.yaml +52 -0
- package/courses/mysql-query-optimization/scenarios/level-4/read-replica-scaling.yaml +51 -0
- package/courses/mysql-query-optimization/scenarios/level-5/ai-database-future.yaml +45 -0
- package/courses/mysql-query-optimization/scenarios/level-5/behavioral-science.yaml +44 -0
- package/courses/mysql-query-optimization/scenarios/level-5/benchmark-design.yaml +47 -0
- package/courses/mysql-query-optimization/scenarios/level-5/board-strategy.yaml +48 -0
- package/courses/mysql-query-optimization/scenarios/level-5/comprehensive-platform.yaml +49 -0
- package/courses/mysql-query-optimization/scenarios/level-5/consulting-engagement.yaml +52 -0
- package/courses/mysql-query-optimization/scenarios/level-5/ma-database-integration.yaml +47 -0
- package/courses/mysql-query-optimization/scenarios/level-5/master-optimization-shift.yaml +56 -0
- package/courses/mysql-query-optimization/scenarios/level-5/product-development.yaml +48 -0
- package/courses/mysql-query-optimization/scenarios/level-5/regulatory-compliance.yaml +48 -0
- package/courses/postgresql-query-optimization/course.yaml +11 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/explain-analyze-basics.yaml +80 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/first-optimization-shift.yaml +77 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/index-fundamentals.yaml +76 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/join-basics.yaml +73 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/n-plus-one-queries.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/query-rewriting-basics.yaml +69 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/select-star-problems.yaml +69 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/slow-query-diagnosis.yaml +63 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/vacuum-and-statistics.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/where-clause-optimization.yaml +74 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/autovacuum-tuning.yaml +76 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/composite-index-design.yaml +81 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/covering-indexes.yaml +74 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/cte-optimization.yaml +83 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/intermediate-optimization-shift.yaml +66 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/join-optimization.yaml +72 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/partial-and-expression-indexes.yaml +75 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/query-planner-settings.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/subquery-optimization.yaml +67 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/window-function-optimization.yaml +63 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/advanced-optimization-shift.yaml +71 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/connection-pooling.yaml +60 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/full-text-search-optimization.yaml +66 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/jsonb-optimization.yaml +88 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/lock-contention-analysis.yaml +80 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/materialized-view-optimization.yaml +73 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/parallel-query-execution.yaml +74 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/partitioning-strategies.yaml +71 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/specialized-index-types.yaml +67 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/write-optimization.yaml +65 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/data-architecture-analytics.yaml +64 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/database-executive-communication.yaml +64 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/database-migration-planning.yaml +57 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/enterprise-database-governance.yaml +52 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/expert-optimization-shift.yaml +73 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/high-availability-architecture.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/optimizer-internals.yaml +69 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/performance-sla-design.yaml +58 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/read-replica-optimization.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/vendor-evaluation.yaml +73 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/comprehensive-database-system.yaml +70 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-ai-future.yaml +81 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-behavioral-science.yaml +63 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-board-strategy.yaml +77 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-consulting-engagement.yaml +61 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-industry-benchmarks.yaml +64 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-ma-integration.yaml +71 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-product-development.yaml +72 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-regulatory-landscape.yaml +76 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/master-optimization-shift.yaml +66 -0
- package/courses/rest-api-error-handling/course.yaml +11 -0
- package/courses/rest-api-error-handling/scenarios/level-1/authentication-errors.yaml +71 -0
- package/courses/rest-api-error-handling/scenarios/level-1/content-negotiation-errors.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-1/error-logging-basics.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-1/error-response-format.yaml +58 -0
- package/courses/rest-api-error-handling/scenarios/level-1/first-error-handling-shift.yaml +67 -0
- package/courses/rest-api-error-handling/scenarios/level-1/http-status-codes.yaml +46 -0
- package/courses/rest-api-error-handling/scenarios/level-1/not-found-errors.yaml +52 -0
- package/courses/rest-api-error-handling/scenarios/level-1/rate-limiting-errors.yaml +56 -0
- package/courses/rest-api-error-handling/scenarios/level-1/request-validation-errors.yaml +59 -0
- package/courses/rest-api-error-handling/scenarios/level-1/server-error-handling.yaml +55 -0
- package/courses/rest-api-error-handling/scenarios/level-2/api-versioning-errors.yaml +66 -0
- package/courses/rest-api-error-handling/scenarios/level-2/batch-request-errors.yaml +61 -0
- package/courses/rest-api-error-handling/scenarios/level-2/circuit-breaker-pattern.yaml +52 -0
- package/courses/rest-api-error-handling/scenarios/level-2/error-code-taxonomy.yaml +62 -0
- package/courses/rest-api-error-handling/scenarios/level-2/error-monitoring-alerting.yaml +53 -0
- package/courses/rest-api-error-handling/scenarios/level-2/intermediate-error-shift.yaml +69 -0
- package/courses/rest-api-error-handling/scenarios/level-2/pagination-errors.yaml +66 -0
- package/courses/rest-api-error-handling/scenarios/level-2/retry-and-idempotency.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-2/rfc7807-problem-details.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-2/webhook-error-handling.yaml +55 -0
- package/courses/rest-api-error-handling/scenarios/level-3/advanced-error-shift.yaml +72 -0
- package/courses/rest-api-error-handling/scenarios/level-3/api-gateway-errors.yaml +71 -0
- package/courses/rest-api-error-handling/scenarios/level-3/async-api-errors.yaml +67 -0
- package/courses/rest-api-error-handling/scenarios/level-3/caching-error-scenarios.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-3/chaos-engineering-apis.yaml +62 -0
- package/courses/rest-api-error-handling/scenarios/level-3/database-error-handling.yaml +79 -0
- package/courses/rest-api-error-handling/scenarios/level-3/distributed-error-propagation.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-3/error-budgets-sre.yaml +61 -0
- package/courses/rest-api-error-handling/scenarios/level-3/error-correlation.yaml +58 -0
- package/courses/rest-api-error-handling/scenarios/level-3/graphql-vs-rest-errors.yaml +73 -0
- package/courses/rest-api-error-handling/scenarios/level-4/compliance-error-handling.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-4/enterprise-error-governance.yaml +62 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-analytics-platform.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-cost-optimization.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-executive-communication.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-handling-architecture.yaml +67 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-org-design.yaml +68 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-sla-design.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-training-program.yaml +61 -0
- package/courses/rest-api-error-handling/scenarios/level-4/expert-error-shift.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-5/comprehensive-error-system.yaml +68 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-ai-future.yaml +75 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-behavioral-science.yaml +73 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-board-strategy.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-consulting-engagement.yaml +58 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-industry-benchmarks.yaml +72 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-ma-integration.yaml +68 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-product-development.yaml +66 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-regulatory-landscape.yaml +80 -0
- package/courses/rest-api-error-handling/scenarios/level-5/master-error-shift.yaml +73 -0
- package/courses/terraform-infrastructure-setup/course.yaml +11 -0
- package/courses/terraform-infrastructure-setup/scenarios/level-1/terraform-init-errors.yaml +72 -0
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +6 -5
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +4 -0
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +6 -18
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/train.d.ts.map +1 -1
- package/dist/cli/commands/train.js +18 -18
- package/dist/cli/commands/train.js.map +1 -1
- package/dist/cli/index.js +93 -55
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/run-demo.js +2 -1
- package/dist/cli/run-demo.js.map +1 -1
- package/dist/cli/setup.d.ts +18 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +154 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/engine/agent-bridge.d.ts +5 -2
- package/dist/engine/agent-bridge.d.ts.map +1 -1
- package/dist/engine/agent-bridge.js +36 -9
- package/dist/engine/agent-bridge.js.map +1 -1
- package/dist/engine/loader.d.ts +21 -0
- package/dist/engine/loader.d.ts.map +1 -1
- package/dist/engine/loader.js +54 -1
- package/dist/engine/loader.js.map +1 -1
- package/dist/engine/training-loop.d.ts.map +1 -1
- package/dist/engine/training-loop.js +1 -0
- package/dist/engine/training-loop.js.map +1 -1
- package/dist/engine/training.d.ts.map +1 -1
- package/dist/engine/training.js +1 -0
- package/dist/engine/training.js.map +1 -1
- package/dist/generator/skill-generator.d.ts +1 -1
- package/dist/generator/skill-generator.d.ts.map +1 -1
- package/dist/generator/skill-generator.js +21 -2
- package/dist/generator/skill-generator.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -26
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session-manager.d.ts +9 -4
- package/dist/mcp/session-manager.d.ts.map +1 -1
- package/dist/mcp/session-manager.js +65 -28
- package/dist/mcp/session-manager.js.map +1 -1
- package/dist/types/schemas.d.ts +38 -13
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +9 -5
- package/dist/types/schemas.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
name: "RFC 7807 Problem Details Standard"
|
|
2
|
+
level: 2
|
|
3
|
+
difficulty: intermediate
|
|
4
|
+
description: "Implement standardized error responses using RFC 7807 Problem Details format"
|
|
5
|
+
|
|
6
|
+
context: |
|
|
7
|
+
Migrate your API error responses to the RFC 7807 standard. This standardized format
|
|
8
|
+
improves interoperability across tools and clients. Implement problem details with
|
|
9
|
+
type URI, title, status, detail, and instance fields.
|
|
10
|
+
|
|
11
|
+
scenario:
|
|
12
|
+
state:
|
|
13
|
+
bank_accounts:
|
|
14
|
+
"acc_001": { balance: 5000, account_holder: "John Doe" }
|
|
15
|
+
"acc_002": { balance: 100, account_holder: "Jane Smith" }
|
|
16
|
+
|
|
17
|
+
endpoint: "POST /api/v1/accounts/{accountId}/transfer"
|
|
18
|
+
|
|
19
|
+
test_cases:
|
|
20
|
+
- name: "successful_transfer"
|
|
21
|
+
request:
|
|
22
|
+
path: "/api/v1/accounts/acc_001/transfer"
|
|
23
|
+
body:
|
|
24
|
+
to_account: "acc_002"
|
|
25
|
+
amount: 100
|
|
26
|
+
expected_status: 200
|
|
27
|
+
expected_response:
|
|
28
|
+
transaction_id: "txn_123"
|
|
29
|
+
status: "completed"
|
|
30
|
+
|
|
31
|
+
- name: "insufficient_funds_rfc7807"
|
|
32
|
+
request:
|
|
33
|
+
path: "/api/v1/accounts/acc_002/transfer"
|
|
34
|
+
body:
|
|
35
|
+
to_account: "acc_001"
|
|
36
|
+
amount: 500
|
|
37
|
+
expected_status: 422
|
|
38
|
+
expected_response:
|
|
39
|
+
type: "https://api.example.com/errors/insufficient-funds"
|
|
40
|
+
title: "Insufficient Funds"
|
|
41
|
+
status: 422
|
|
42
|
+
detail: "Account acc_002 has balance of 100 but requires 500 for this transfer"
|
|
43
|
+
instance: "/api/v1/accounts/acc_002/transfer"
|
|
44
|
+
balance: 100
|
|
45
|
+
required_amount: 500
|
|
46
|
+
|
|
47
|
+
- name: "account_not_found_rfc7807"
|
|
48
|
+
request:
|
|
49
|
+
path: "/api/v1/accounts/acc_999/transfer"
|
|
50
|
+
body:
|
|
51
|
+
to_account: "acc_001"
|
|
52
|
+
amount: 100
|
|
53
|
+
expected_status: 404
|
|
54
|
+
expected_response:
|
|
55
|
+
type: "https://api.example.com/errors/account-not-found"
|
|
56
|
+
title: "Account Not Found"
|
|
57
|
+
status: 404
|
|
58
|
+
detail: "The account acc_999 does not exist in the system"
|
|
59
|
+
instance: "/api/v1/accounts/acc_999/transfer"
|
|
60
|
+
|
|
61
|
+
- name: "invalid_amount_validation"
|
|
62
|
+
request:
|
|
63
|
+
path: "/api/v1/accounts/acc_001/transfer"
|
|
64
|
+
body:
|
|
65
|
+
to_account: "acc_002"
|
|
66
|
+
amount: -50
|
|
67
|
+
expected_status: 400
|
|
68
|
+
expected_response:
|
|
69
|
+
type: "https://api.example.com/errors/validation-error"
|
|
70
|
+
title: "Validation Error"
|
|
71
|
+
status: 400
|
|
72
|
+
detail: "The request body contains invalid values"
|
|
73
|
+
instance: "/api/v1/accounts/acc_001/transfer"
|
|
74
|
+
validation_errors:
|
|
75
|
+
- field: "amount"
|
|
76
|
+
message: "Amount must be positive"
|
|
77
|
+
rejected_value: -50
|
|
78
|
+
|
|
79
|
+
- name: "self_transfer_error"
|
|
80
|
+
request:
|
|
81
|
+
path: "/api/v1/accounts/acc_001/transfer"
|
|
82
|
+
body:
|
|
83
|
+
to_account: "acc_001"
|
|
84
|
+
amount: 100
|
|
85
|
+
expected_status: 409
|
|
86
|
+
expected_response:
|
|
87
|
+
type: "https://api.example.com/errors/invalid-operation"
|
|
88
|
+
title: "Invalid Operation"
|
|
89
|
+
status: 409
|
|
90
|
+
detail: "Cannot transfer funds to the same account"
|
|
91
|
+
instance: "/api/v1/accounts/acc_001/transfer"
|
|
92
|
+
|
|
93
|
+
assertions:
|
|
94
|
+
- type: "api_called"
|
|
95
|
+
description: "type field contains URI identifying problem"
|
|
96
|
+
test: "error response includes type field with URI"
|
|
97
|
+
|
|
98
|
+
- type: "api_called"
|
|
99
|
+
description: "title field is human-readable problem type"
|
|
100
|
+
test: "title field is constant for same error type"
|
|
101
|
+
|
|
102
|
+
- type: "api_called"
|
|
103
|
+
description: "status field echoes HTTP status code"
|
|
104
|
+
test: "status field matches HTTP response status"
|
|
105
|
+
|
|
106
|
+
- type: "api_called"
|
|
107
|
+
description: "detail field explains specific instance"
|
|
108
|
+
test: "detail contains instance-specific information"
|
|
109
|
+
|
|
110
|
+
- type: "api_called"
|
|
111
|
+
description: "instance field identifies affected resource"
|
|
112
|
+
test: "instance field contains request path"
|
|
113
|
+
|
|
114
|
+
- type: "api_called"
|
|
115
|
+
description: "Extensions included for domain-specific details"
|
|
116
|
+
test: "error response includes custom fields as extensions"
|
|
117
|
+
|
|
118
|
+
- type: "outcome"
|
|
119
|
+
description: "RFC 7807 enables standard error tooling"
|
|
120
|
+
test: "error responses conform to standard specification"
|
|
121
|
+
|
|
122
|
+
learning_objectives:
|
|
123
|
+
- "Understand RFC 7807 Problem Details specification"
|
|
124
|
+
- "Map problem types to type URIs"
|
|
125
|
+
- "Distinguish between title (constant) and detail (instance-specific)"
|
|
126
|
+
- "Include appropriate HTTP status codes in problem details"
|
|
127
|
+
- "Extend RFC 7807 with domain-specific fields"
|
|
128
|
+
- "Communicate problem details to generic HTTP clients"
|
|
129
|
+
|
|
130
|
+
rfc7807_fields:
|
|
131
|
+
"type": "URI identifying problem type (required, should dereference to documentation)"
|
|
132
|
+
"title": "Short human-readable summary of problem type (required, same for same type)"
|
|
133
|
+
"status": "HTTP status code (optional, but recommended)"
|
|
134
|
+
"detail": "Human-readable explanation of specific problem instance (optional, instance-specific)"
|
|
135
|
+
"instance": "URI identifying specific problem occurrence (optional, usually request path)"
|
|
136
|
+
|
|
137
|
+
example_error_responses: |
|
|
138
|
+
Example 1: Insufficient Funds
|
|
139
|
+
{
|
|
140
|
+
"type": "https://api.example.com/errors/insufficient-funds",
|
|
141
|
+
"title": "Insufficient Funds",
|
|
142
|
+
"status": 422,
|
|
143
|
+
"detail": "Account acc_002 has balance of 100 but requires 500 for this transfer",
|
|
144
|
+
"instance": "/api/v1/accounts/acc_002/transfer",
|
|
145
|
+
"balance": 100,
|
|
146
|
+
"required_amount": 500
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
Example 2: Validation Error
|
|
150
|
+
{
|
|
151
|
+
"type": "https://api.example.com/errors/validation-error",
|
|
152
|
+
"title": "Validation Error",
|
|
153
|
+
"status": 400,
|
|
154
|
+
"detail": "The request body contains invalid values",
|
|
155
|
+
"instance": "/api/v1/accounts/acc_001/transfer",
|
|
156
|
+
"validation_errors": [
|
|
157
|
+
{
|
|
158
|
+
"field": "amount",
|
|
159
|
+
"message": "Amount must be positive",
|
|
160
|
+
"rejected_value": -50
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
advantages:
|
|
166
|
+
- "Standard format recognized by HTTP tools and libraries"
|
|
167
|
+
- "Generic clients can handle errors without API-specific code"
|
|
168
|
+
- "Clear semantics: type vs title vs detail"
|
|
169
|
+
- "Extensibility through custom fields"
|
|
170
|
+
- "Easier debugging and error tracking"
|
|
171
|
+
- "Better integration with API gateways and monitoring"
|
|
172
|
+
|
|
173
|
+
content_type:
|
|
174
|
+
"application/problem+json": "Standard MIME type for RFC 7807 responses"
|
|
175
|
+
|
|
176
|
+
references:
|
|
177
|
+
- "https://datatracker.ietf.org/doc/html/rfc7807"
|
|
178
|
+
- "https://datatracker.ietf.org/doc/html/rfc9457 (RFC 9457 - Problem Details for HTTP APIs)"
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
name: "Webhook Error Handling and Retry Logic"
|
|
2
|
+
level: 2
|
|
3
|
+
difficulty: intermediate
|
|
4
|
+
description: "Implement webhook delivery with exponential backoff retry strategy and dead letter queues"
|
|
5
|
+
|
|
6
|
+
context: |
|
|
7
|
+
Build a webhook delivery system for payment events. Handle failed deliveries with
|
|
8
|
+
exponential backoff, respect HTTP error codes (don't retry 4xx), and move permanently
|
|
9
|
+
failed webhooks to dead letter queue for inspection.
|
|
10
|
+
|
|
11
|
+
scenario:
|
|
12
|
+
state:
|
|
13
|
+
webhooks:
|
|
14
|
+
"wh_payment_complete":
|
|
15
|
+
url: "https://customer-1.example.com/webhooks/payments"
|
|
16
|
+
status: "active"
|
|
17
|
+
retry_count: 0
|
|
18
|
+
last_attempt: null
|
|
19
|
+
events:
|
|
20
|
+
"evt_001": { type: "payment.completed", customer_id: "cust_1", status: "pending" }
|
|
21
|
+
"evt_002": { type: "payment.completed", customer_id: "cust_2", status: "pending" }
|
|
22
|
+
webhook_endpoints:
|
|
23
|
+
"https://customer-1.example.com/webhooks/payments":
|
|
24
|
+
response_status: 500
|
|
25
|
+
consecutive_failures: 0
|
|
26
|
+
"https://customer-2.example.com/webhooks/payments":
|
|
27
|
+
response_status: 404
|
|
28
|
+
consecutive_failures: 0
|
|
29
|
+
|
|
30
|
+
endpoint: "Internal: Webhook Delivery System"
|
|
31
|
+
|
|
32
|
+
test_cases:
|
|
33
|
+
- name: "successful_webhook_delivery"
|
|
34
|
+
event: "evt_001"
|
|
35
|
+
webhook_url: "https://customer-1.example.com/webhooks/payments"
|
|
36
|
+
endpoint_status: 200
|
|
37
|
+
expected_result: "delivered"
|
|
38
|
+
expected_retry_count: 0
|
|
39
|
+
|
|
40
|
+
- name: "temporary_failure_retry"
|
|
41
|
+
event: "evt_001"
|
|
42
|
+
webhook_url: "https://customer-1.example.com/webhooks/payments"
|
|
43
|
+
endpoint_status: 503
|
|
44
|
+
retry_strategy: "exponential_backoff"
|
|
45
|
+
expected_retries:
|
|
46
|
+
- attempt: 1
|
|
47
|
+
delay: 1
|
|
48
|
+
endpoint_status: 503
|
|
49
|
+
- attempt: 2
|
|
50
|
+
delay: 5
|
|
51
|
+
endpoint_status: 503
|
|
52
|
+
- attempt: 3
|
|
53
|
+
delay: 30
|
|
54
|
+
endpoint_status: 200
|
|
55
|
+
result: "delivered"
|
|
56
|
+
|
|
57
|
+
- name: "timeout_is_retriable"
|
|
58
|
+
event: "evt_001"
|
|
59
|
+
webhook_url: "https://customer-1.example.com/webhooks/payments"
|
|
60
|
+
endpoint_behavior: "timeout"
|
|
61
|
+
endpoint_timeout_ms: 35000
|
|
62
|
+
expected_retries:
|
|
63
|
+
- attempt: 1
|
|
64
|
+
delay: 1
|
|
65
|
+
result: "timeout"
|
|
66
|
+
- attempt: 2
|
|
67
|
+
delay: 5
|
|
68
|
+
result: "timeout"
|
|
69
|
+
- attempt: 3
|
|
70
|
+
delay: 30
|
|
71
|
+
endpoint_status: 200
|
|
72
|
+
result: "delivered"
|
|
73
|
+
|
|
74
|
+
- name: "404_not_found_not_retried"
|
|
75
|
+
event: "evt_001"
|
|
76
|
+
webhook_url: "https://nonexistent.example.com/webhooks/payments"
|
|
77
|
+
endpoint_status: 404
|
|
78
|
+
expected_retries: 0
|
|
79
|
+
expected_result: "dead_letter_queue"
|
|
80
|
+
expected_reason: "endpoint_not_found"
|
|
81
|
+
|
|
82
|
+
- name: "401_unauthorized_not_retried"
|
|
83
|
+
event: "evt_001"
|
|
84
|
+
webhook_url: "https://customer-2.example.com/webhooks/payments"
|
|
85
|
+
endpoint_status: 401
|
|
86
|
+
expected_retries: 0
|
|
87
|
+
expected_result: "dead_letter_queue"
|
|
88
|
+
expected_reason: "authorization_failed"
|
|
89
|
+
|
|
90
|
+
- name: "400_bad_request_not_retried"
|
|
91
|
+
event: "evt_001"
|
|
92
|
+
webhook_url: "https://customer-3.example.com/webhooks/payments"
|
|
93
|
+
endpoint_status: 400
|
|
94
|
+
expected_retries: 0
|
|
95
|
+
expected_result: "dead_letter_queue"
|
|
96
|
+
expected_reason: "malformed_request"
|
|
97
|
+
|
|
98
|
+
- name: "max_retries_exceeded"
|
|
99
|
+
event: "evt_001"
|
|
100
|
+
webhook_url: "https://customer-1.example.com/webhooks/payments"
|
|
101
|
+
endpoint_status: 502
|
|
102
|
+
max_retries: 5
|
|
103
|
+
expected_retries:
|
|
104
|
+
- attempt: 1
|
|
105
|
+
delay: 1
|
|
106
|
+
endpoint_status: 502
|
|
107
|
+
- attempt: 2
|
|
108
|
+
delay: 5
|
|
109
|
+
endpoint_status: 502
|
|
110
|
+
- attempt: 3
|
|
111
|
+
delay: 30
|
|
112
|
+
endpoint_status: 502
|
|
113
|
+
- attempt: 4
|
|
114
|
+
delay: 120
|
|
115
|
+
endpoint_status: 502
|
|
116
|
+
- attempt: 5
|
|
117
|
+
delay: 300
|
|
118
|
+
endpoint_status: 502
|
|
119
|
+
expected_result: "dead_letter_queue"
|
|
120
|
+
expected_reason: "max_retries_exceeded"
|
|
121
|
+
|
|
122
|
+
- name: "jitter_prevents_thundering_herd"
|
|
123
|
+
events_count: 100
|
|
124
|
+
all_failing: true
|
|
125
|
+
retry_schedule: "exponential_with_jitter"
|
|
126
|
+
expected_behavior: "retry_attempts_spread_across_time"
|
|
127
|
+
|
|
128
|
+
- name: "idempotency_prevents_duplicates"
|
|
129
|
+
event: "evt_001"
|
|
130
|
+
webhook_url: "https://customer-1.example.com/webhooks/payments"
|
|
131
|
+
attempt_1_result: "timeout"
|
|
132
|
+
attempt_1_delivered: true
|
|
133
|
+
attempt_2_result: 200
|
|
134
|
+
expected_behavior: "idempotent_delivery (delivered once)"
|
|
135
|
+
|
|
136
|
+
assertions:
|
|
137
|
+
- type: "api_called"
|
|
138
|
+
description: "Webhook called with event payload"
|
|
139
|
+
test: "webhook POST includes event data"
|
|
140
|
+
|
|
141
|
+
- type: "api_called"
|
|
142
|
+
description: "5xx errors are retried"
|
|
143
|
+
test: "502/503 errors trigger retry"
|
|
144
|
+
|
|
145
|
+
- type: "api_called"
|
|
146
|
+
description: "4xx errors are not retried"
|
|
147
|
+
test: "404/401/400 moved to dead letter queue"
|
|
148
|
+
|
|
149
|
+
- type: "outcome"
|
|
150
|
+
description: "Exponential backoff used"
|
|
151
|
+
test: "retry delays follow: 1s, 5s, 30s, 120s, 300s"
|
|
152
|
+
|
|
153
|
+
- type: "api_called"
|
|
154
|
+
description: "Jitter added to prevent thundering herd"
|
|
155
|
+
test: "retry_schedule uses jitter"
|
|
156
|
+
|
|
157
|
+
- type: "api_called"
|
|
158
|
+
description: "Dead letter queue stores permanently failed"
|
|
159
|
+
test: "max_retries_exceeded moves to DLQ"
|
|
160
|
+
|
|
161
|
+
- type: "outcome"
|
|
162
|
+
description: "Idempotent delivery"
|
|
163
|
+
test: "webhook called once despite retries"
|
|
164
|
+
|
|
165
|
+
learning_objectives:
|
|
166
|
+
- "Understand transient vs permanent webhook failures"
|
|
167
|
+
- "Implement exponential backoff retry strategy"
|
|
168
|
+
- "Distinguish retriable (5xx) vs non-retriable (4xx) errors"
|
|
169
|
+
- "Add jitter to prevent synchronized retries"
|
|
170
|
+
- "Implement dead letter queue for manual inspection"
|
|
171
|
+
- "Track retry attempts and timing"
|
|
172
|
+
- "Handle webhook idempotency"
|
|
173
|
+
|
|
174
|
+
retry_strategy:
|
|
175
|
+
"retriable_status_codes": [408, 429, 500, 502, 503, 504]
|
|
176
|
+
"non_retriable_status_codes": [400, 401, 403, 404, 405, 410]
|
|
177
|
+
"transient_failures": ["timeout", "connection_reset", "dns_failure"]
|
|
178
|
+
"backoff_pattern": "exponential: 1s, 5s, 30s, 120s, 300s"
|
|
179
|
+
"max_attempts": 5
|
|
180
|
+
"jitter": "random 0-10% of delay"
|
|
181
|
+
|
|
182
|
+
headers:
|
|
183
|
+
"X-Webhook-ID": "Unique webhook endpoint identifier"
|
|
184
|
+
"X-Event-ID": "Unique event identifier for idempotency"
|
|
185
|
+
"X-Delivery-Attempt": "Attempt number (1, 2, 3, ...)"
|
|
186
|
+
"X-Webhook-Signature": "HMAC signature for verification"
|
|
187
|
+
|
|
188
|
+
dead_letter_queue:
|
|
189
|
+
"storage": "Separate database table or queue"
|
|
190
|
+
"retention": "30 days minimum for inspection"
|
|
191
|
+
"alerting": "Alert ops team after 10 DLQ entries"
|
|
192
|
+
"manual_retry": "Allow manual redelivery from UI"
|
|
193
|
+
|
|
194
|
+
monitoring:
|
|
195
|
+
"metrics":
|
|
196
|
+
- "delivery_success_rate"
|
|
197
|
+
- "delivery_latency_p50/p95/p99"
|
|
198
|
+
- "retry_count_distribution"
|
|
199
|
+
- "dlq_entries_rate"
|
|
200
|
+
"alerts":
|
|
201
|
+
- "delivery_success_rate < 95%"
|
|
202
|
+
- "dlq_entries > 100 in 1 hour"
|
|
203
|
+
|
|
204
|
+
common_mistakes:
|
|
205
|
+
- "Retrying 404 Not Found (never succeeds)"
|
|
206
|
+
- "No exponential backoff (overwhelming server)"
|
|
207
|
+
- "No jitter (thundering herd effect)"
|
|
208
|
+
- "Unbounded retries (never gives up)"
|
|
209
|
+
- "Not idempotent (duplicate deliveries)"
|
|
210
|
+
- "No dead letter queue (lost events)"
|
|
211
|
+
- "Not respecting Retry-After header"
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
name: "Distributed Tracing and Error Correlation"
|
|
2
|
+
level: 3
|
|
3
|
+
difficulty: advanced
|
|
4
|
+
description: "Track errors across multiple services using correlation IDs and distributed tracing"
|
|
5
|
+
|
|
6
|
+
context: |
|
|
7
|
+
Build a microservice system where a single user request flows through Order Service
|
|
8
|
+
→ Payment Service → Shipping Service. Implement distributed tracing with correlation
|
|
9
|
+
IDs to track errors across all services and perform root cause analysis.
|
|
10
|
+
|
|
11
|
+
scenario:
|
|
12
|
+
state:
|
|
13
|
+
services:
|
|
14
|
+
order_service:
|
|
15
|
+
url: "http://order-api:3000"
|
|
16
|
+
status: "healthy"
|
|
17
|
+
payment_service:
|
|
18
|
+
url: "http://payment-api:3001"
|
|
19
|
+
status: "healthy"
|
|
20
|
+
shipping_service:
|
|
21
|
+
url: "http://shipping-api:3002"
|
|
22
|
+
status: "healthy"
|
|
23
|
+
orders:
|
|
24
|
+
"ord_001": { customer_id: "cust_1", total: 100, status: "pending" }
|
|
25
|
+
|
|
26
|
+
endpoint: "POST /api/v1/orders"
|
|
27
|
+
|
|
28
|
+
test_cases:
|
|
29
|
+
- name: "successful_order_with_trace"
|
|
30
|
+
request:
|
|
31
|
+
path: "/api/v1/orders"
|
|
32
|
+
body: { customer_id: "cust_1", items: ["item_1"] }
|
|
33
|
+
headers:
|
|
34
|
+
X-Correlation-ID: "trace_123"
|
|
35
|
+
service_calls:
|
|
36
|
+
- service: "order_service"
|
|
37
|
+
action: "create_order"
|
|
38
|
+
status: 201
|
|
39
|
+
trace_id: "trace_123"
|
|
40
|
+
span_id: "span_order_1"
|
|
41
|
+
duration_ms: 50
|
|
42
|
+
- service: "payment_service"
|
|
43
|
+
action: "charge_card"
|
|
44
|
+
status: 200
|
|
45
|
+
trace_id: "trace_123"
|
|
46
|
+
parent_span: "span_order_1"
|
|
47
|
+
span_id: "span_payment_1"
|
|
48
|
+
duration_ms: 200
|
|
49
|
+
- service: "shipping_service"
|
|
50
|
+
action: "create_shipment"
|
|
51
|
+
status: 201
|
|
52
|
+
trace_id: "trace_123"
|
|
53
|
+
parent_span: "span_order_1"
|
|
54
|
+
span_id: "span_shipping_1"
|
|
55
|
+
duration_ms: 100
|
|
56
|
+
expected_response:
|
|
57
|
+
status: 201
|
|
58
|
+
order_id: "ord_002"
|
|
59
|
+
expected_trace:
|
|
60
|
+
spans:
|
|
61
|
+
- span_order_1: "50ms"
|
|
62
|
+
- span_payment_1: "200ms"
|
|
63
|
+
- span_shipping_1: "100ms"
|
|
64
|
+
total_time: "350ms"
|
|
65
|
+
|
|
66
|
+
- name: "payment_service_timeout_traced"
|
|
67
|
+
request:
|
|
68
|
+
path: "/api/v1/orders"
|
|
69
|
+
body: { customer_id: "cust_1", items: ["item_1"] }
|
|
70
|
+
headers:
|
|
71
|
+
X-Correlation-ID: "trace_456"
|
|
72
|
+
service_calls:
|
|
73
|
+
- service: "order_service"
|
|
74
|
+
action: "create_order"
|
|
75
|
+
status: 201
|
|
76
|
+
trace_id: "trace_456"
|
|
77
|
+
span_id: "span_order_2"
|
|
78
|
+
duration_ms: 50
|
|
79
|
+
- service: "payment_service"
|
|
80
|
+
action: "charge_card"
|
|
81
|
+
status: 504
|
|
82
|
+
error: "gateway_timeout"
|
|
83
|
+
trace_id: "trace_456"
|
|
84
|
+
parent_span: "span_order_2"
|
|
85
|
+
span_id: "span_payment_2"
|
|
86
|
+
duration_ms: 30000
|
|
87
|
+
error_details:
|
|
88
|
+
message: "Payment processing took too long"
|
|
89
|
+
timeout_ms: 30000
|
|
90
|
+
expected_response:
|
|
91
|
+
status: 502
|
|
92
|
+
error:
|
|
93
|
+
code: "PAYMENT_SERVICE_UNAVAILABLE"
|
|
94
|
+
correlation_id: "trace_456"
|
|
95
|
+
distributed_trace:
|
|
96
|
+
spans:
|
|
97
|
+
- name: "POST /orders"
|
|
98
|
+
service: "order_service"
|
|
99
|
+
span_id: "span_order_2"
|
|
100
|
+
status: "error"
|
|
101
|
+
- name: "POST /charges"
|
|
102
|
+
service: "payment_service"
|
|
103
|
+
parent_span: "span_order_2"
|
|
104
|
+
span_id: "span_payment_2"
|
|
105
|
+
status: "error"
|
|
106
|
+
error_type: "timeout"
|
|
107
|
+
|
|
108
|
+
- name: "cascading_failure_visible_in_trace"
|
|
109
|
+
request:
|
|
110
|
+
path: "/api/v1/orders"
|
|
111
|
+
body: { customer_id: "cust_1", items: ["item_1"] }
|
|
112
|
+
headers:
|
|
113
|
+
X-Correlation-ID: "trace_789"
|
|
114
|
+
service_calls:
|
|
115
|
+
- service: "order_service"
|
|
116
|
+
action: "create_order"
|
|
117
|
+
status: 201
|
|
118
|
+
trace_id: "trace_789"
|
|
119
|
+
span_id: "span_order_3"
|
|
120
|
+
- service: "payment_service"
|
|
121
|
+
action: "charge_card"
|
|
122
|
+
status: 500
|
|
123
|
+
trace_id: "trace_789"
|
|
124
|
+
parent_span: "span_order_3"
|
|
125
|
+
span_id: "span_payment_3"
|
|
126
|
+
error: "database_connection_failed"
|
|
127
|
+
- service: "shipping_service"
|
|
128
|
+
action: "create_shipment"
|
|
129
|
+
status: 500
|
|
130
|
+
trace_id: "trace_789"
|
|
131
|
+
parent_span: "span_order_3"
|
|
132
|
+
span_id: "span_shipping_3"
|
|
133
|
+
error: "order_not_confirmed"
|
|
134
|
+
expected_response:
|
|
135
|
+
status: 502
|
|
136
|
+
distributed_trace:
|
|
137
|
+
critical_path: "trace_789 → order_service fails payment → shipping can't proceed"
|
|
138
|
+
error_summary: "Payment service database unavailable, causing cascade"
|
|
139
|
+
|
|
140
|
+
- name: "error_context_preserved_across_services"
|
|
141
|
+
request:
|
|
142
|
+
path: "/api/v1/orders"
|
|
143
|
+
headers:
|
|
144
|
+
X-Correlation-ID: "trace_101"
|
|
145
|
+
X-Request-ID: "req_101"
|
|
146
|
+
X-User-ID: "user_123"
|
|
147
|
+
propagated_headers:
|
|
148
|
+
- service: "order_service"
|
|
149
|
+
headers: { X-Correlation-ID: "trace_101", X-Request-ID: "req_101", X-User-ID: "user_123" }
|
|
150
|
+
- service: "payment_service"
|
|
151
|
+
headers: { X-Correlation-ID: "trace_101", X-Request-ID: "req_101", X-User-ID: "user_123" }
|
|
152
|
+
- service: "shipping_service"
|
|
153
|
+
headers: { X-Correlation-ID: "trace_101", X-Request-ID: "req_101", X-User-ID: "user_123" }
|
|
154
|
+
expected_behavior: "all services log with same correlation ID"
|
|
155
|
+
|
|
156
|
+
- name: "root_cause_analysis_via_trace"
|
|
157
|
+
incident:
|
|
158
|
+
symptom: "Orders taking 30+ seconds"
|
|
159
|
+
correlation_ids: ["trace_111", "trace_112", "trace_113"]
|
|
160
|
+
analysis:
|
|
161
|
+
- step: "1. Review distributed trace"
|
|
162
|
+
finding: "All traces show: order_service 50ms, payment_service 25000ms, shipping_service 5000ms"
|
|
163
|
+
- step: "2. Identify critical path"
|
|
164
|
+
finding: "Payment service is bottleneck"
|
|
165
|
+
- step: "3. Check payment service logs"
|
|
166
|
+
finding: "SELECT * FROM charges WHERE status='processing' returns 10000 rows"
|
|
167
|
+
- step: "4. Check metrics"
|
|
168
|
+
finding: "Database CPU at 95%, pending queries at 10000"
|
|
169
|
+
- step: "5. Root cause"
|
|
170
|
+
finding: "Payment processing queries missing index, causing full table scans"
|
|
171
|
+
- step: "6. Solution"
|
|
172
|
+
action: "Add index on charges(status, created_at)"
|
|
173
|
+
|
|
174
|
+
- name: "trace_context_loss_error"
|
|
175
|
+
request:
|
|
176
|
+
path: "/api/v1/orders"
|
|
177
|
+
headers:
|
|
178
|
+
X-Correlation-ID: "trace_202"
|
|
179
|
+
service_calls:
|
|
180
|
+
- service: "order_service"
|
|
181
|
+
trace_id: "trace_202"
|
|
182
|
+
passes_header: true
|
|
183
|
+
- service: "payment_service"
|
|
184
|
+
trace_id: "trace_202"
|
|
185
|
+
passes_header: false # Bug: forgot to propagate
|
|
186
|
+
implicit_trace: "span_payment_lost"
|
|
187
|
+
expected_problem: "Payment service error not correlated with order trace"
|
|
188
|
+
solution: "Add middleware to always propagate X-Correlation-ID"
|
|
189
|
+
|
|
190
|
+
assertions:
|
|
191
|
+
- type: "api_called"
|
|
192
|
+
description: "Correlation ID propagated to all services"
|
|
193
|
+
test: "X-Correlation-ID passed through service chain"
|
|
194
|
+
|
|
195
|
+
- type: "api_called"
|
|
196
|
+
description: "Trace IDs captured in logs"
|
|
197
|
+
test: "all log entries include trace_id"
|
|
198
|
+
|
|
199
|
+
- type: "outcome"
|
|
200
|
+
description: "Error path visible in distributed trace"
|
|
201
|
+
test: "trace shows which service failed and why"
|
|
202
|
+
|
|
203
|
+
- type: "api_called"
|
|
204
|
+
description: "Timing data collected per service"
|
|
205
|
+
test: "trace includes duration for each span"
|
|
206
|
+
|
|
207
|
+
- type: "outcome"
|
|
208
|
+
description: "Root cause identifiable from trace"
|
|
209
|
+
test: "cascading_failure_visible_in_trace shows error progression"
|
|
210
|
+
|
|
211
|
+
learning_objectives:
|
|
212
|
+
- "Understand importance of correlation IDs in microservices"
|
|
213
|
+
- "Implement trace ID propagation across service calls"
|
|
214
|
+
- "Collect span timing for performance analysis"
|
|
215
|
+
- "Correlate logs across multiple services"
|
|
216
|
+
- "Identify root cause from distributed traces"
|
|
217
|
+
- "Detect cascading failures in real-time"
|
|
218
|
+
- "Perform effective post-mortem analysis"
|
|
219
|
+
|
|
220
|
+
correlation_headers:
|
|
221
|
+
"X-Correlation-ID": "Unique ID for entire request"
|
|
222
|
+
"X-Request-ID": "Specific request identifier"
|
|
223
|
+
"X-Trace-ID": "OpenTelemetry trace ID"
|
|
224
|
+
"X-Span-ID": "OpenTelemetry span ID"
|
|
225
|
+
"X-Parent-Span-ID": "Parent span for nesting"
|
|
226
|
+
|
|
227
|
+
trace_structure:
|
|
228
|
+
"trace_id": "abc123def456"
|
|
229
|
+
"spans":
|
|
230
|
+
- "span_id": "span_order_1"
|
|
231
|
+
"operation": "create_order"
|
|
232
|
+
"service": "order_service"
|
|
233
|
+
"start_time": "2024-01-01T10:00:00.000Z"
|
|
234
|
+
"duration_ms": 50
|
|
235
|
+
"status": "OK"
|
|
236
|
+
"child_spans": ["span_payment_1", "span_shipping_1"]
|
|
237
|
+
- "span_id": "span_payment_1"
|
|
238
|
+
"operation": "charge_card"
|
|
239
|
+
"service": "payment_service"
|
|
240
|
+
"start_time": "2024-01-01T10:00:00.050Z"
|
|
241
|
+
"duration_ms": 200
|
|
242
|
+
"status": "OK"
|
|
243
|
+
"parent_span": "span_order_1"
|
|
244
|
+
|
|
245
|
+
tools:
|
|
246
|
+
"OpenTelemetry": "Standard instrumentation library"
|
|
247
|
+
"Jaeger": "Distributed tracing backend"
|
|
248
|
+
"Zipkin": "Alternative tracing system"
|
|
249
|
+
"Datadog APM": "Commercial observability"
|
|
250
|
+
"AWS X-Ray": "AWS distributed tracing"
|
|
251
|
+
"Google Cloud Trace": "GCP tracing"
|
|
252
|
+
|
|
253
|
+
common_mistakes:
|
|
254
|
+
- "Not propagating correlation ID to called services"
|
|
255
|
+
- "No trace ID in error messages"
|
|
256
|
+
- "Losing context in async operations"
|
|
257
|
+
- "Not collecting timing data"
|
|
258
|
+
- "Insufficient log detail for debugging"
|
|
259
|
+
- "No central trace storage"
|
|
260
|
+
- "Can't query traces by error type"
|
|
261
|
+
|
|
262
|
+
post_mortem_example: |
|
|
263
|
+
Timeline:
|
|
264
|
+
10:00:00 - Order received (trace_abc)
|
|
265
|
+
10:00:00 - Order created in order_service (50ms)
|
|
266
|
+
10:00:00 - Payment service called
|
|
267
|
+
10:00:25 - Payment timeout after 25 seconds
|
|
268
|
+
10:00:25 - Shipping service never called
|
|
269
|
+
10:00:25 - 502 Bad Gateway returned
|
|
270
|
+
|
|
271
|
+
Trace shows: Payment service database locked
|
|
272
|
+
Root cause: Concurrent deployment and query
|
|
273
|
+
Fix: Add connection pooling, query timeout
|
|
274
|
+
|
|
275
|
+
Prevention: Monitor query latency in traces
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: aws-lambda-debugging
|
|
2
|
+
name: "AWS Lambda Function Debugging"
|
|
3
|
+
description: >
|
|
4
|
+
Master AWS Lambda function debugging from basic invocation errors to
|
|
5
|
+
enterprise serverless platform operations. Learn to diagnose cold starts,
|
|
6
|
+
timeout issues, permission failures, memory problems, event source mapping
|
|
7
|
+
errors, layer conflicts, VPC connectivity, Step Functions orchestration,
|
|
8
|
+
and production serverless operations at scale.
|
|
9
|
+
levels: 5
|
|
10
|
+
scenarios_per_level: 10
|
|
11
|
+
tags: [development, AWS, Lambda, serverless, debugging, cloud, FaaS, event-driven]
|