tech-hub-skills 1.2.0 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE → .claude/LICENSE} +21 -21
- package/.claude/README.md +291 -0
- package/.claude/bin/cli.js +266 -0
- package/{bin → .claude/bin}/copilot.js +182 -182
- package/{bin → .claude/bin}/postinstall.js +42 -42
- package/{tech_hub_skills/skills → .claude/commands}/README.md +336 -336
- package/{tech_hub_skills/skills → .claude/commands}/ai-engineer.md +104 -104
- package/{tech_hub_skills/skills → .claude/commands}/aws.md +143 -143
- package/{tech_hub_skills/skills → .claude/commands}/azure.md +149 -149
- package/{tech_hub_skills/skills → .claude/commands}/backend-developer.md +108 -108
- package/{tech_hub_skills/skills → .claude/commands}/code-review.md +399 -399
- package/{tech_hub_skills/skills → .claude/commands}/compliance-automation.md +747 -747
- package/{tech_hub_skills/skills → .claude/commands}/compliance-officer.md +108 -108
- package/{tech_hub_skills/skills → .claude/commands}/data-engineer.md +113 -113
- package/{tech_hub_skills/skills → .claude/commands}/data-governance.md +102 -102
- package/{tech_hub_skills/skills → .claude/commands}/data-scientist.md +123 -123
- package/{tech_hub_skills/skills → .claude/commands}/database-admin.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/devops.md +160 -160
- package/{tech_hub_skills/skills → .claude/commands}/docker.md +160 -160
- package/{tech_hub_skills/skills → .claude/commands}/enterprise-dashboard.md +613 -613
- package/{tech_hub_skills/skills → .claude/commands}/finops.md +184 -184
- package/{tech_hub_skills/skills → .claude/commands}/frontend-developer.md +108 -108
- package/{tech_hub_skills/skills → .claude/commands}/gcp.md +143 -143
- package/{tech_hub_skills/skills → .claude/commands}/ml-engineer.md +115 -115
- package/{tech_hub_skills/skills → .claude/commands}/mlops.md +187 -187
- package/{tech_hub_skills/skills → .claude/commands}/network-engineer.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/optimization-advisor.md +329 -329
- package/{tech_hub_skills/skills → .claude/commands}/orchestrator.md +623 -623
- package/{tech_hub_skills/skills → .claude/commands}/platform-engineer.md +102 -102
- package/{tech_hub_skills/skills → .claude/commands}/process-automation.md +226 -226
- package/{tech_hub_skills/skills → .claude/commands}/process-changelog.md +184 -184
- package/{tech_hub_skills/skills → .claude/commands}/process-documentation.md +484 -484
- package/{tech_hub_skills/skills → .claude/commands}/process-kanban.md +324 -324
- package/{tech_hub_skills/skills → .claude/commands}/process-versioning.md +214 -214
- package/{tech_hub_skills/skills → .claude/commands}/product-designer.md +104 -104
- package/{tech_hub_skills/skills → .claude/commands}/project-starter.md +443 -443
- package/{tech_hub_skills/skills → .claude/commands}/qa-engineer.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/security-architect.md +135 -135
- package/{tech_hub_skills/skills → .claude/commands}/sre.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/system-design.md +126 -126
- package/{tech_hub_skills/skills → .claude/commands}/technical-writer.md +101 -101
- package/.claude/package.json +46 -0
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/01-prompt-engineering/README.md +252 -252
- package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_ab_tester.py +356 -0
- package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_template_manager.py +274 -0
- package/.claude/roles/ai-engineer/skills/01-prompt-engineering/token_cost_estimator.py +324 -0
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/02-rag-pipeline/README.md +448 -448
- package/.claude/roles/ai-engineer/skills/02-rag-pipeline/document_chunker.py +336 -0
- package/.claude/roles/ai-engineer/skills/02-rag-pipeline/rag_pipeline.sql +213 -0
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/03-agent-orchestration/README.md +599 -599
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/04-llm-guardrails/README.md +735 -735
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/05-vector-embeddings/README.md +711 -711
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/06-llm-evaluation/README.md +777 -777
- package/{tech_hub_skills → .claude}/roles/azure/skills/01-infrastructure-fundamentals/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/02-data-factory/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/03-synapse-analytics/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/04-databricks/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/05-functions/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/06-kubernetes-service/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/07-openai-service/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/08-machine-learning/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/09-storage-adls/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/10-networking/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/11-sql-cosmos/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/12-event-hubs/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/code-review/skills/01-automated-code-review/README.md +394 -394
- package/{tech_hub_skills → .claude}/roles/code-review/skills/02-pr-review-workflow/README.md +427 -427
- package/{tech_hub_skills → .claude}/roles/code-review/skills/03-code-quality-gates/README.md +518 -518
- package/{tech_hub_skills → .claude}/roles/code-review/skills/04-reviewer-assignment/README.md +504 -504
- package/{tech_hub_skills → .claude}/roles/code-review/skills/05-review-analytics/README.md +540 -540
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/01-lakehouse-architecture/README.md +550 -550
- package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/bronze_ingestion.py +337 -0
- package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/medallion_queries.sql +300 -0
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/02-etl-pipeline/README.md +580 -580
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/03-data-quality/README.md +579 -579
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/04-streaming-pipelines/README.md +608 -608
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/05-performance-optimization/README.md +547 -547
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/01-data-catalog/README.md +112 -112
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/02-data-lineage/README.md +129 -129
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/03-data-quality-framework/README.md +182 -182
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/04-access-control/README.md +39 -39
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/05-master-data-management/README.md +40 -40
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/06-compliance-privacy/README.md +46 -46
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/01-eda-automation/README.md +230 -230
- package/.claude/roles/data-scientist/skills/01-eda-automation/eda_generator.py +446 -0
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/02-statistical-modeling/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/03-feature-engineering/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/04-predictive-modeling/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/05-customer-analytics/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/06-campaign-analysis/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/07-experimentation/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/08-data-visualization/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/01-cicd-pipeline/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/02-container-orchestration/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/03-infrastructure-as-code/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/04-gitops/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/05-environment-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/06-automated-testing/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/07-release-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/08-monitoring-alerting/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/09-devsecops/README.md +265 -265
- package/{tech_hub_skills → .claude}/roles/finops/skills/01-cost-visibility/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/02-resource-tagging/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/03-budget-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/04-reserved-instances/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/05-spot-optimization/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/06-storage-tiering/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/07-compute-rightsizing/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/08-chargeback/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/01-mlops-pipeline/README.md +566 -566
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/02-feature-engineering/README.md +655 -655
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/03-model-training/README.md +704 -704
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/04-model-serving/README.md +845 -845
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/05-model-monitoring/README.md +874 -874
- package/{tech_hub_skills → .claude}/roles/mlops/skills/01-ml-pipeline-orchestration/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/02-experiment-tracking/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/03-model-registry/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/04-feature-store/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/05-model-deployment/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/06-model-observability/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/07-data-versioning/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/08-ab-testing/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/09-automated-retraining/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/01-internal-developer-platform/README.md +153 -153
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/02-self-service-infrastructure/README.md +57 -57
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/03-slo-sli-management/README.md +59 -59
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/04-developer-experience/README.md +57 -57
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/05-incident-management/README.md +73 -73
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/06-capacity-management/README.md +59 -59
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/01-requirements-discovery/README.md +407 -407
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/02-user-research/README.md +382 -382
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/03-brainstorming-ideation/README.md +437 -437
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/04-ux-design/README.md +496 -496
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/05-product-market-fit/README.md +376 -376
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/06-stakeholder-management/README.md +412 -412
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/01-pii-detection/README.md +319 -319
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/02-threat-modeling/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/03-infrastructure-security/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/04-iam/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/05-application-security/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/06-secrets-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/07-security-monitoring/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/01-architecture-patterns/README.md +337 -337
- package/{tech_hub_skills → .claude}/roles/system-design/skills/02-requirements-engineering/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/03-scalability/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/04-high-availability/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/05-cost-optimization-design/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/06-api-design/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/07-observability-architecture/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/PROCESS_TEMPLATE.md +336 -336
- package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/README.md +521 -521
- package/.claude/roles/system-design/skills/08-process-automation/ai_prompt_generator.py +744 -0
- package/.claude/roles/system-design/skills/08-process-automation/automation_recommender.py +688 -0
- package/.claude/roles/system-design/skills/08-process-automation/plan_generator.py +679 -0
- package/.claude/roles/system-design/skills/08-process-automation/process_analyzer.py +528 -0
- package/.claude/roles/system-design/skills/08-process-automation/process_parser.py +684 -0
- package/.claude/roles/system-design/skills/08-process-automation/role_matcher.py +615 -0
- package/.claude/skills/README.md +336 -0
- package/.claude/skills/ai-engineer.md +104 -0
- package/.claude/skills/aws.md +143 -0
- package/.claude/skills/azure.md +149 -0
- package/.claude/skills/backend-developer.md +108 -0
- package/.claude/skills/code-review.md +399 -0
- package/.claude/skills/compliance-automation.md +747 -0
- package/.claude/skills/compliance-officer.md +108 -0
- package/.claude/skills/data-engineer.md +113 -0
- package/.claude/skills/data-governance.md +102 -0
- package/.claude/skills/data-scientist.md +123 -0
- package/.claude/skills/database-admin.md +109 -0
- package/.claude/skills/devops.md +160 -0
- package/.claude/skills/docker.md +160 -0
- package/.claude/skills/enterprise-dashboard.md +613 -0
- package/.claude/skills/finops.md +184 -0
- package/.claude/skills/frontend-developer.md +108 -0
- package/.claude/skills/gcp.md +143 -0
- package/.claude/skills/ml-engineer.md +115 -0
- package/.claude/skills/mlops.md +187 -0
- package/.claude/skills/network-engineer.md +109 -0
- package/.claude/skills/optimization-advisor.md +329 -0
- package/.claude/skills/orchestrator.md +623 -0
- package/.claude/skills/platform-engineer.md +102 -0
- package/.claude/skills/process-automation.md +226 -0
- package/.claude/skills/process-changelog.md +184 -0
- package/.claude/skills/process-documentation.md +484 -0
- package/.claude/skills/process-kanban.md +324 -0
- package/.claude/skills/process-versioning.md +214 -0
- package/.claude/skills/product-designer.md +104 -0
- package/.claude/skills/project-starter.md +443 -0
- package/.claude/skills/qa-engineer.md +109 -0
- package/.claude/skills/security-architect.md +135 -0
- package/.claude/skills/sre.md +109 -0
- package/.claude/skills/system-design.md +126 -0
- package/.claude/skills/technical-writer.md +101 -0
- package/.gitattributes +2 -0
- package/GITHUB_COPILOT.md +106 -0
- package/README.md +192 -291
- package/package.json +16 -46
- package/bin/cli.js +0 -241
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
# pe-01: Internal Developer Platform (IDP)
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Build developer portals using Backstage for service catalog, golden path templates, self-service provisioning, and platform documentation.
|
|
6
|
-
|
|
7
|
-
## Key Capabilities
|
|
8
|
-
|
|
9
|
-
- **Developer Portal**: Centralized platform UI (Backstage)
|
|
10
|
-
- **Service Catalog**: All services, APIs, documentation
|
|
11
|
-
- **Golden Path Templates**: Scaffolding for new services
|
|
12
|
-
- **Self-Service Provisioning**: One-click infrastructure
|
|
13
|
-
- **Platform Documentation**: Unified docs portal
|
|
14
|
-
|
|
15
|
-
## Tools & Technologies
|
|
16
|
-
|
|
17
|
-
- **Backstage**: Open-source developer portal
|
|
18
|
-
- **Port**: Developer portal platform
|
|
19
|
-
- **Humanitec**: Platform orchestrator
|
|
20
|
-
- **Kratix**: Platform-as-a-product framework
|
|
21
|
-
|
|
22
|
-
## Implementation
|
|
23
|
-
|
|
24
|
-
### 1. Backstage Setup
|
|
25
|
-
|
|
26
|
-
```yaml
|
|
27
|
-
# app-config.yaml
|
|
28
|
-
app:
|
|
29
|
-
title: Tech Hub Platform
|
|
30
|
-
baseUrl: http://localhost:3000
|
|
31
|
-
|
|
32
|
-
organization:
|
|
33
|
-
name: Tech Innovation Hub
|
|
34
|
-
|
|
35
|
-
backend:
|
|
36
|
-
baseUrl: http://localhost:7007
|
|
37
|
-
listen:
|
|
38
|
-
port: 7007
|
|
39
|
-
database:
|
|
40
|
-
client: pg
|
|
41
|
-
connection:
|
|
42
|
-
host: ${POSTGRES_HOST}
|
|
43
|
-
port: ${POSTGRES_PORT}
|
|
44
|
-
|
|
45
|
-
catalog:
|
|
46
|
-
providers:
|
|
47
|
-
github:
|
|
48
|
-
organization: 'your-org'
|
|
49
|
-
catalogPath: '/catalog-info.yaml'
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 2. Service Catalog
|
|
53
|
-
|
|
54
|
-
```yaml
|
|
55
|
-
# catalog-info.yaml
|
|
56
|
-
apiVersion: backstage.io/v1alpha1
|
|
57
|
-
kind: Component
|
|
58
|
-
metadata:
|
|
59
|
-
name: customer-api
|
|
60
|
-
description: Customer management API
|
|
61
|
-
annotations:
|
|
62
|
-
github.com/project-slug: your-org/customer-api
|
|
63
|
-
sonarqube.org/project-key: customer-api
|
|
64
|
-
spec:
|
|
65
|
-
type: service
|
|
66
|
-
lifecycle: production
|
|
67
|
-
owner: team-platform
|
|
68
|
-
system: customer-domain
|
|
69
|
-
providesApis:
|
|
70
|
-
- customer-api
|
|
71
|
-
consumesApis:
|
|
72
|
-
- auth-api
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### 3. Golden Path Template
|
|
76
|
-
|
|
77
|
-
```yaml
|
|
78
|
-
# template.yaml
|
|
79
|
-
apiVersion: scaffolder.backstage.io/v1beta3
|
|
80
|
-
kind: Template
|
|
81
|
-
metadata:
|
|
82
|
-
name: python-fastapi-service
|
|
83
|
-
title: Python FastAPI Service
|
|
84
|
-
description: Create a new Python FastAPI microservice
|
|
85
|
-
spec:
|
|
86
|
-
owner: platform-team
|
|
87
|
-
type: service
|
|
88
|
-
|
|
89
|
-
parameters:
|
|
90
|
-
- title: Service Information
|
|
91
|
-
required:
|
|
92
|
-
- name
|
|
93
|
-
- owner
|
|
94
|
-
properties:
|
|
95
|
-
name:
|
|
96
|
-
title: Service Name
|
|
97
|
-
type: string
|
|
98
|
-
description: Unique name for the service
|
|
99
|
-
owner:
|
|
100
|
-
title: Owner
|
|
101
|
-
type: string
|
|
102
|
-
description: Team that owns this service
|
|
103
|
-
|
|
104
|
-
steps:
|
|
105
|
-
- id: fetch-template
|
|
106
|
-
name: Fetch Template
|
|
107
|
-
action: fetch:template
|
|
108
|
-
input:
|
|
109
|
-
url: ./skeleton
|
|
110
|
-
values:
|
|
111
|
-
name: ${{ parameters.name }}
|
|
112
|
-
owner: ${{ parameters.owner }}
|
|
113
|
-
|
|
114
|
-
- id: publish
|
|
115
|
-
name: Publish to GitHub
|
|
116
|
-
action: publish:github
|
|
117
|
-
input:
|
|
118
|
-
repoUrl: github.com?owner=your-org&repo=${{ parameters.name }}
|
|
119
|
-
|
|
120
|
-
- id: register
|
|
121
|
-
name: Register Component
|
|
122
|
-
action: catalog:register
|
|
123
|
-
input:
|
|
124
|
-
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
|
|
125
|
-
catalogInfoPath: '/catalog-info.yaml'
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## Best Practices
|
|
129
|
-
|
|
130
|
-
1. **Start Small**: Begin with service catalog, add features iteratively
|
|
131
|
-
2. **Golden Paths**: Create templates for 80% of use cases
|
|
132
|
-
3. **Self-Service**: Minimize manual ticket workflows
|
|
133
|
-
4. **Measure Adoption**: Track active users and template usage
|
|
134
|
-
5. **Documentation**: Keep docs updated and searchable
|
|
135
|
-
|
|
136
|
-
## Cost Optimization
|
|
137
|
-
|
|
138
|
-
- Host Backstage on Kubernetes spot instances
|
|
139
|
-
- Use PostgreSQL managed service (cheaper than self-hosted)
|
|
140
|
-
- Cache plugin data to reduce API calls
|
|
141
|
-
- Right-size backend resources
|
|
142
|
-
|
|
143
|
-
## Integration
|
|
144
|
-
|
|
145
|
-
**Connects with:**
|
|
146
|
-
- do-01 (CI/CD): Link to deployment pipelines
|
|
147
|
-
- do-02 (Kubernetes): Service deployment info
|
|
148
|
-
- pe-03 (SLO): Display SLO status
|
|
149
|
-
- dg-01 (Catalog): Link to data catalog
|
|
150
|
-
|
|
151
|
-
## Quick Win
|
|
152
|
-
|
|
153
|
-
Deploy Backstage with GitHub integration, import 5 services to catalog, show team the unified view of their services.
|
|
1
|
+
# pe-01: Internal Developer Platform (IDP)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Build developer portals using Backstage for service catalog, golden path templates, self-service provisioning, and platform documentation.
|
|
6
|
+
|
|
7
|
+
## Key Capabilities
|
|
8
|
+
|
|
9
|
+
- **Developer Portal**: Centralized platform UI (Backstage)
|
|
10
|
+
- **Service Catalog**: All services, APIs, documentation
|
|
11
|
+
- **Golden Path Templates**: Scaffolding for new services
|
|
12
|
+
- **Self-Service Provisioning**: One-click infrastructure
|
|
13
|
+
- **Platform Documentation**: Unified docs portal
|
|
14
|
+
|
|
15
|
+
## Tools & Technologies
|
|
16
|
+
|
|
17
|
+
- **Backstage**: Open-source developer portal
|
|
18
|
+
- **Port**: Developer portal platform
|
|
19
|
+
- **Humanitec**: Platform orchestrator
|
|
20
|
+
- **Kratix**: Platform-as-a-product framework
|
|
21
|
+
|
|
22
|
+
## Implementation
|
|
23
|
+
|
|
24
|
+
### 1. Backstage Setup
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
# app-config.yaml
|
|
28
|
+
app:
|
|
29
|
+
title: Tech Hub Platform
|
|
30
|
+
baseUrl: http://localhost:3000
|
|
31
|
+
|
|
32
|
+
organization:
|
|
33
|
+
name: Tech Innovation Hub
|
|
34
|
+
|
|
35
|
+
backend:
|
|
36
|
+
baseUrl: http://localhost:7007
|
|
37
|
+
listen:
|
|
38
|
+
port: 7007
|
|
39
|
+
database:
|
|
40
|
+
client: pg
|
|
41
|
+
connection:
|
|
42
|
+
host: ${POSTGRES_HOST}
|
|
43
|
+
port: ${POSTGRES_PORT}
|
|
44
|
+
|
|
45
|
+
catalog:
|
|
46
|
+
providers:
|
|
47
|
+
github:
|
|
48
|
+
organization: 'your-org'
|
|
49
|
+
catalogPath: '/catalog-info.yaml'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. Service Catalog
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
# catalog-info.yaml
|
|
56
|
+
apiVersion: backstage.io/v1alpha1
|
|
57
|
+
kind: Component
|
|
58
|
+
metadata:
|
|
59
|
+
name: customer-api
|
|
60
|
+
description: Customer management API
|
|
61
|
+
annotations:
|
|
62
|
+
github.com/project-slug: your-org/customer-api
|
|
63
|
+
sonarqube.org/project-key: customer-api
|
|
64
|
+
spec:
|
|
65
|
+
type: service
|
|
66
|
+
lifecycle: production
|
|
67
|
+
owner: team-platform
|
|
68
|
+
system: customer-domain
|
|
69
|
+
providesApis:
|
|
70
|
+
- customer-api
|
|
71
|
+
consumesApis:
|
|
72
|
+
- auth-api
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 3. Golden Path Template
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
# template.yaml
|
|
79
|
+
apiVersion: scaffolder.backstage.io/v1beta3
|
|
80
|
+
kind: Template
|
|
81
|
+
metadata:
|
|
82
|
+
name: python-fastapi-service
|
|
83
|
+
title: Python FastAPI Service
|
|
84
|
+
description: Create a new Python FastAPI microservice
|
|
85
|
+
spec:
|
|
86
|
+
owner: platform-team
|
|
87
|
+
type: service
|
|
88
|
+
|
|
89
|
+
parameters:
|
|
90
|
+
- title: Service Information
|
|
91
|
+
required:
|
|
92
|
+
- name
|
|
93
|
+
- owner
|
|
94
|
+
properties:
|
|
95
|
+
name:
|
|
96
|
+
title: Service Name
|
|
97
|
+
type: string
|
|
98
|
+
description: Unique name for the service
|
|
99
|
+
owner:
|
|
100
|
+
title: Owner
|
|
101
|
+
type: string
|
|
102
|
+
description: Team that owns this service
|
|
103
|
+
|
|
104
|
+
steps:
|
|
105
|
+
- id: fetch-template
|
|
106
|
+
name: Fetch Template
|
|
107
|
+
action: fetch:template
|
|
108
|
+
input:
|
|
109
|
+
url: ./skeleton
|
|
110
|
+
values:
|
|
111
|
+
name: ${{ parameters.name }}
|
|
112
|
+
owner: ${{ parameters.owner }}
|
|
113
|
+
|
|
114
|
+
- id: publish
|
|
115
|
+
name: Publish to GitHub
|
|
116
|
+
action: publish:github
|
|
117
|
+
input:
|
|
118
|
+
repoUrl: github.com?owner=your-org&repo=${{ parameters.name }}
|
|
119
|
+
|
|
120
|
+
- id: register
|
|
121
|
+
name: Register Component
|
|
122
|
+
action: catalog:register
|
|
123
|
+
input:
|
|
124
|
+
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
|
|
125
|
+
catalogInfoPath: '/catalog-info.yaml'
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Best Practices
|
|
129
|
+
|
|
130
|
+
1. **Start Small**: Begin with service catalog, add features iteratively
|
|
131
|
+
2. **Golden Paths**: Create templates for 80% of use cases
|
|
132
|
+
3. **Self-Service**: Minimize manual ticket workflows
|
|
133
|
+
4. **Measure Adoption**: Track active users and template usage
|
|
134
|
+
5. **Documentation**: Keep docs updated and searchable
|
|
135
|
+
|
|
136
|
+
## Cost Optimization
|
|
137
|
+
|
|
138
|
+
- Host Backstage on Kubernetes spot instances
|
|
139
|
+
- Use PostgreSQL managed service (cheaper than self-hosted)
|
|
140
|
+
- Cache plugin data to reduce API calls
|
|
141
|
+
- Right-size backend resources
|
|
142
|
+
|
|
143
|
+
## Integration
|
|
144
|
+
|
|
145
|
+
**Connects with:**
|
|
146
|
+
- do-01 (CI/CD): Link to deployment pipelines
|
|
147
|
+
- do-02 (Kubernetes): Service deployment info
|
|
148
|
+
- pe-03 (SLO): Display SLO status
|
|
149
|
+
- dg-01 (Catalog): Link to data catalog
|
|
150
|
+
|
|
151
|
+
## Quick Win
|
|
152
|
+
|
|
153
|
+
Deploy Backstage with GitHub integration, import 5 services to catalog, show team the unified view of their services.
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
# pe-02: Self-Service Infrastructure
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Enable developers to provision namespaces, databases, secrets, and environments through self-service automation.
|
|
6
|
-
|
|
7
|
-
## Key Capabilities
|
|
8
|
-
|
|
9
|
-
- **Namespace Provisioning**: Auto-create K8s namespaces
|
|
10
|
-
- **Database Provisioning**: Self-service DB creation
|
|
11
|
-
- **Secret Management**: Automated secret injection
|
|
12
|
-
- **Resource Quotas**: Automatic quota management
|
|
13
|
-
- **Environment Management**: Dev/staging/prod provisioning
|
|
14
|
-
|
|
15
|
-
## Implementation
|
|
16
|
-
|
|
17
|
-
```python
|
|
18
|
-
# Self-service namespace provisioning
|
|
19
|
-
from kubernetes import client, config
|
|
20
|
-
|
|
21
|
-
def provision_namespace(team_name, environment):
|
|
22
|
-
"""Create namespace with quotas and RBAC"""
|
|
23
|
-
config.load_kube_config()
|
|
24
|
-
v1 = client.CoreV1Api()
|
|
25
|
-
|
|
26
|
-
# Create namespace
|
|
27
|
-
namespace = client.V1Namespace(
|
|
28
|
-
metadata=client.V1ObjectMeta(
|
|
29
|
-
name=f"{team_name}-{environment}",
|
|
30
|
-
labels={
|
|
31
|
-
"team": team_name,
|
|
32
|
-
"environment": environment
|
|
33
|
-
}
|
|
34
|
-
)
|
|
35
|
-
)
|
|
36
|
-
v1.create_namespace(namespace)
|
|
37
|
-
|
|
38
|
-
# Apply resource quota
|
|
39
|
-
quota = client.V1ResourceQuota(
|
|
40
|
-
metadata=client.V1ObjectMeta(name="default-quota"),
|
|
41
|
-
spec=client.V1ResourceQuotaSpec(
|
|
42
|
-
hard={
|
|
43
|
-
"requests.cpu": "10",
|
|
44
|
-
"requests.memory": "20Gi",
|
|
45
|
-
"pods": "50"
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
)
|
|
49
|
-
v1.create_namespaced_resource_quota(
|
|
50
|
-
namespace=namespace.metadata.name,
|
|
51
|
-
body=quota
|
|
52
|
-
)
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Integration
|
|
56
|
-
|
|
57
|
-
**Connects with:** do-02 (Kubernetes), sa-06 (Secrets), pe-01 (IDP)
|
|
1
|
+
# pe-02: Self-Service Infrastructure
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Enable developers to provision namespaces, databases, secrets, and environments through self-service automation.
|
|
6
|
+
|
|
7
|
+
## Key Capabilities
|
|
8
|
+
|
|
9
|
+
- **Namespace Provisioning**: Auto-create K8s namespaces
|
|
10
|
+
- **Database Provisioning**: Self-service DB creation
|
|
11
|
+
- **Secret Management**: Automated secret injection
|
|
12
|
+
- **Resource Quotas**: Automatic quota management
|
|
13
|
+
- **Environment Management**: Dev/staging/prod provisioning
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
# Self-service namespace provisioning
|
|
19
|
+
from kubernetes import client, config
|
|
20
|
+
|
|
21
|
+
def provision_namespace(team_name, environment):
|
|
22
|
+
"""Create namespace with quotas and RBAC"""
|
|
23
|
+
config.load_kube_config()
|
|
24
|
+
v1 = client.CoreV1Api()
|
|
25
|
+
|
|
26
|
+
# Create namespace
|
|
27
|
+
namespace = client.V1Namespace(
|
|
28
|
+
metadata=client.V1ObjectMeta(
|
|
29
|
+
name=f"{team_name}-{environment}",
|
|
30
|
+
labels={
|
|
31
|
+
"team": team_name,
|
|
32
|
+
"environment": environment
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
v1.create_namespace(namespace)
|
|
37
|
+
|
|
38
|
+
# Apply resource quota
|
|
39
|
+
quota = client.V1ResourceQuota(
|
|
40
|
+
metadata=client.V1ObjectMeta(name="default-quota"),
|
|
41
|
+
spec=client.V1ResourceQuotaSpec(
|
|
42
|
+
hard={
|
|
43
|
+
"requests.cpu": "10",
|
|
44
|
+
"requests.memory": "20Gi",
|
|
45
|
+
"pods": "50"
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
v1.create_namespaced_resource_quota(
|
|
50
|
+
namespace=namespace.metadata.name,
|
|
51
|
+
body=quota
|
|
52
|
+
)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Integration
|
|
56
|
+
|
|
57
|
+
**Connects with:** do-02 (Kubernetes), sa-06 (Secrets), pe-01 (IDP)
|
package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/03-slo-sli-management/README.md
RENAMED
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
# pe-03: SLO/SLI Management
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Define and track Service Level Objectives (SLOs), manage error budgets, instrument SLIs, and create SLO-based alerting.
|
|
6
|
-
|
|
7
|
-
## Key Capabilities
|
|
8
|
-
|
|
9
|
-
- **SLO Definition**: Availability, latency, error rate targets
|
|
10
|
-
- **Error Budget Management**: Track remaining error budget
|
|
11
|
-
- **SLI Instrumentation**: Collect service-level indicators
|
|
12
|
-
- **SLO-Based Alerting**: Alert on error budget burn
|
|
13
|
-
- **SLO Dashboards**: Visualize SLO compliance
|
|
14
|
-
|
|
15
|
-
## Implementation
|
|
16
|
-
|
|
17
|
-
```yaml
|
|
18
|
-
# SLO definition (Sloth)
|
|
19
|
-
version: prometheus/v1
|
|
20
|
-
service: customer-api
|
|
21
|
-
slos:
|
|
22
|
-
- name: requests-availability
|
|
23
|
-
objective: 99.9
|
|
24
|
-
description: 99.9% of requests successful
|
|
25
|
-
sli:
|
|
26
|
-
events:
|
|
27
|
-
error_query: |
|
|
28
|
-
sum(rate(http_requests_total{job="customer-api",code=~"5.."}[5m]))
|
|
29
|
-
total_query: |
|
|
30
|
-
sum(rate(http_requests_total{job="customer-api"}[5m]))
|
|
31
|
-
alerting:
|
|
32
|
-
name: CustomerAPIHighErrorRate
|
|
33
|
-
labels:
|
|
34
|
-
severity: page
|
|
35
|
-
annotations:
|
|
36
|
-
summary: High error rate on customer API
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
```python
|
|
40
|
-
# Error budget calculation
|
|
41
|
-
def calculate_error_budget(slo_target, time_window_days=30):
|
|
42
|
-
"""Calculate remaining error budget"""
|
|
43
|
-
total_minutes = time_window_days * 24 * 60
|
|
44
|
-
allowed_downtime = total_minutes * (1 - slo_target/100)
|
|
45
|
-
|
|
46
|
-
actual_downtime = get_actual_downtime(time_window_days)
|
|
47
|
-
remaining_budget = allowed_downtime - actual_downtime
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
'allowed_downtime_minutes': allowed_downtime,
|
|
51
|
-
'actual_downtime_minutes': actual_downtime,
|
|
52
|
-
'remaining_budget_minutes': remaining_budget,
|
|
53
|
-
'budget_consumed_percent': (actual_downtime / allowed_downtime) * 100
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Integration
|
|
58
|
-
|
|
59
|
-
**Connects with:** do-08 (Monitoring), pe-01 (IDP), pe-05 (Incident Management)
|
|
1
|
+
# pe-03: SLO/SLI Management
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Define and track Service Level Objectives (SLOs), manage error budgets, instrument SLIs, and create SLO-based alerting.
|
|
6
|
+
|
|
7
|
+
## Key Capabilities
|
|
8
|
+
|
|
9
|
+
- **SLO Definition**: Availability, latency, error rate targets
|
|
10
|
+
- **Error Budget Management**: Track remaining error budget
|
|
11
|
+
- **SLI Instrumentation**: Collect service-level indicators
|
|
12
|
+
- **SLO-Based Alerting**: Alert on error budget burn
|
|
13
|
+
- **SLO Dashboards**: Visualize SLO compliance
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
# SLO definition (Sloth)
|
|
19
|
+
version: prometheus/v1
|
|
20
|
+
service: customer-api
|
|
21
|
+
slos:
|
|
22
|
+
- name: requests-availability
|
|
23
|
+
objective: 99.9
|
|
24
|
+
description: 99.9% of requests successful
|
|
25
|
+
sli:
|
|
26
|
+
events:
|
|
27
|
+
error_query: |
|
|
28
|
+
sum(rate(http_requests_total{job="customer-api",code=~"5.."}[5m]))
|
|
29
|
+
total_query: |
|
|
30
|
+
sum(rate(http_requests_total{job="customer-api"}[5m]))
|
|
31
|
+
alerting:
|
|
32
|
+
name: CustomerAPIHighErrorRate
|
|
33
|
+
labels:
|
|
34
|
+
severity: page
|
|
35
|
+
annotations:
|
|
36
|
+
summary: High error rate on customer API
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
# Error budget calculation
|
|
41
|
+
def calculate_error_budget(slo_target, time_window_days=30):
|
|
42
|
+
"""Calculate remaining error budget"""
|
|
43
|
+
total_minutes = time_window_days * 24 * 60
|
|
44
|
+
allowed_downtime = total_minutes * (1 - slo_target/100)
|
|
45
|
+
|
|
46
|
+
actual_downtime = get_actual_downtime(time_window_days)
|
|
47
|
+
remaining_budget = allowed_downtime - actual_downtime
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
'allowed_downtime_minutes': allowed_downtime,
|
|
51
|
+
'actual_downtime_minutes': actual_downtime,
|
|
52
|
+
'remaining_budget_minutes': remaining_budget,
|
|
53
|
+
'budget_consumed_percent': (actual_downtime / allowed_downtime) * 100
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Integration
|
|
58
|
+
|
|
59
|
+
**Connects with:** do-08 (Monitoring), pe-01 (IDP), pe-05 (Incident Management)
|
package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/04-developer-experience/README.md
RENAMED
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
# pe-04: Developer Experience
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Improve developer velocity through automated onboarding, documentation-as-code, CLI tools, and DORA metrics tracking.
|
|
6
|
-
|
|
7
|
-
## Key Capabilities
|
|
8
|
-
|
|
9
|
-
- **Automated Onboarding**: Zero-to-commit in < 1 hour
|
|
10
|
-
- **Documentation-as-Code**: Docs in git, versioned
|
|
11
|
-
- **Developer CLI**: Unified command-line tools
|
|
12
|
-
- **DORA Metrics**: Deployment frequency, lead time, MTTR, change fail rate
|
|
13
|
-
- **Feedback Collection**: Regular developer surveys
|
|
14
|
-
|
|
15
|
-
## Implementation
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# Developer CLI
|
|
19
|
-
#!/bin/bash
|
|
20
|
-
# platform-cli
|
|
21
|
-
|
|
22
|
-
case $1 in
|
|
23
|
-
create-service)
|
|
24
|
-
backstage scaffold $2 --template python-fastapi
|
|
25
|
-
;;
|
|
26
|
-
deploy)
|
|
27
|
-
kubectl apply -f k8s/ --namespace=$2
|
|
28
|
-
;;
|
|
29
|
-
logs)
|
|
30
|
-
kubectl logs -f deployment/$2 -n $3
|
|
31
|
-
;;
|
|
32
|
-
metrics)
|
|
33
|
-
open "https://grafana.company.com/d/dora-metrics"
|
|
34
|
-
;;
|
|
35
|
-
esac
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
```python
|
|
39
|
-
# DORA metrics collection
|
|
40
|
-
def calculate_dora_metrics(team_name, days=30):
|
|
41
|
-
"""Calculate DORA metrics"""
|
|
42
|
-
deployments = get_deployments(team_name, days)
|
|
43
|
-
incidents = get_incidents(team_name, days)
|
|
44
|
-
|
|
45
|
-
metrics = {
|
|
46
|
-
'deployment_frequency': len(deployments) / days,
|
|
47
|
-
'lead_time_hours': sum(d.lead_time for d in deployments) / len(deployments),
|
|
48
|
-
'mttr_hours': sum(i.resolution_time for i in incidents) / len(incidents) if incidents else 0,
|
|
49
|
-
'change_fail_rate': len([d for d in deployments if d.failed]) / len(deployments)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return metrics
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Integration
|
|
56
|
-
|
|
57
|
-
**Connects with:** pe-01 (IDP), do-01 (CI/CD), pe-05 (Incident Management)
|
|
1
|
+
# pe-04: Developer Experience
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Improve developer velocity through automated onboarding, documentation-as-code, CLI tools, and DORA metrics tracking.
|
|
6
|
+
|
|
7
|
+
## Key Capabilities
|
|
8
|
+
|
|
9
|
+
- **Automated Onboarding**: Zero-to-commit in < 1 hour
|
|
10
|
+
- **Documentation-as-Code**: Docs in git, versioned
|
|
11
|
+
- **Developer CLI**: Unified command-line tools
|
|
12
|
+
- **DORA Metrics**: Deployment frequency, lead time, MTTR, change fail rate
|
|
13
|
+
- **Feedback Collection**: Regular developer surveys
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Developer CLI
|
|
19
|
+
#!/bin/bash
|
|
20
|
+
# platform-cli
|
|
21
|
+
|
|
22
|
+
case $1 in
|
|
23
|
+
create-service)
|
|
24
|
+
backstage scaffold $2 --template python-fastapi
|
|
25
|
+
;;
|
|
26
|
+
deploy)
|
|
27
|
+
kubectl apply -f k8s/ --namespace=$2
|
|
28
|
+
;;
|
|
29
|
+
logs)
|
|
30
|
+
kubectl logs -f deployment/$2 -n $3
|
|
31
|
+
;;
|
|
32
|
+
metrics)
|
|
33
|
+
open "https://grafana.company.com/d/dora-metrics"
|
|
34
|
+
;;
|
|
35
|
+
esac
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
# DORA metrics collection
|
|
40
|
+
def calculate_dora_metrics(team_name, days=30):
|
|
41
|
+
"""Calculate DORA metrics"""
|
|
42
|
+
deployments = get_deployments(team_name, days)
|
|
43
|
+
incidents = get_incidents(team_name, days)
|
|
44
|
+
|
|
45
|
+
metrics = {
|
|
46
|
+
'deployment_frequency': len(deployments) / days,
|
|
47
|
+
'lead_time_hours': sum(d.lead_time for d in deployments) / len(deployments),
|
|
48
|
+
'mttr_hours': sum(i.resolution_time for i in incidents) / len(incidents) if incidents else 0,
|
|
49
|
+
'change_fail_rate': len([d for d in deployments if d.failed]) / len(deployments)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return metrics
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Integration
|
|
56
|
+
|
|
57
|
+
**Connects with:** pe-01 (IDP), do-01 (CI/CD), pe-05 (Incident Management)
|