Skip to content

Commit f349f3d

Browse files
committed
Refresh Datadog example output
1 parent d6e2772 commit f349f3d

49 files changed

Lines changed: 2167 additions & 28 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
- Added best-effort live GitHub App installation metadata collection for the GitHub Enterprise to Forgejo path.
2626
- Added referenced metric and tag metadata capture to the live Datadog collector.
2727
- Added best-effort live Datadog integration installation metadata collection.
28+
- Added a reproducible Datadog example refresh target and checked-in full example output.
29+
- Added fixture integration evidence refs and validation coverage for integration evidence.
2830
- Updated CI and release workflows to Node.js 24-native GitHub Actions.
2931

3032
## 0.1.0 - 2026-05-24

Makefile

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ GOFILES := $(shell find . -name '*.go' -not -path './bin/*' -not -path './dist/*
88
PLATFORMS ?= linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64
99
GOLANGCI_LINT_VERSION ?= v2.12.2
1010
GOLANGCI_LINT ?= bin/golangci-lint
11+
EXAMPLE_INPUT ?= examples/datadog-to-grafana/input/datadog-fixture.json
12+
EXAMPLE_DIR ?= examples/datadog-to-grafana/output
13+
EXAMPLE_BUNDLE ?= examples/datadog-to-grafana/openexit-example.zip
1114

12-
.PHONY: build test fmt fmt-check lint golangci-lint smoke verify release-dist clean
15+
.PHONY: build test fmt fmt-check lint golangci-lint smoke example example-smoke verify release-dist clean
1316

1417
build:
1518
mkdir -p $(dir $(BINARY))
@@ -70,7 +73,37 @@ smoke:
7073
$(BINARY) validate --project "$$tmp/ai-demo"; \
7174
$(BINARY) export --project "$$tmp/ai-demo" --format zip --out "$$tmp/ai-demo.zip"
7275

73-
verify: lint test build smoke
76+
example: build
77+
rm -rf $(EXAMPLE_DIR)/openexit.yaml \
78+
$(EXAMPLE_DIR)/inventory \
79+
$(EXAMPLE_DIR)/assessment \
80+
$(EXAMPLE_DIR)/mapping \
81+
$(EXAMPLE_DIR)/generated-config \
82+
$(EXAMPLE_DIR)/evidence \
83+
$(EXAMPLE_DIR)/validation \
84+
$(EXAMPLE_BUNDLE)
85+
mkdir -p $(EXAMPLE_DIR)
86+
$(BINARY) init $(EXAMPLE_DIR) --source datadog --target grafana-lgtm
87+
$(BINARY) collect fixture --project $(EXAMPLE_DIR) --input $(EXAMPLE_INPUT)
88+
$(BINARY) assess --project $(EXAMPLE_DIR) --target grafana-lgtm
89+
$(BINARY) map --project $(EXAMPLE_DIR)
90+
$(BINARY) generate --project $(EXAMPLE_DIR) --all
91+
$(BINARY) validate --project $(EXAMPLE_DIR)
92+
$(BINARY) export --project $(EXAMPLE_DIR) --format zip --out $(EXAMPLE_BUNDLE)
93+
94+
example-smoke: build
95+
tmp=$$(mktemp -d); \
96+
trap 'rm -rf "$$tmp"' EXIT; \
97+
$(BINARY) init "$$tmp/example" --source datadog --target grafana-lgtm; \
98+
$(BINARY) collect fixture --project "$$tmp/example" --input ./$(EXAMPLE_INPUT); \
99+
$(BINARY) assess --project "$$tmp/example" --target grafana-lgtm; \
100+
$(BINARY) map --project "$$tmp/example"; \
101+
$(BINARY) generate --project "$$tmp/example" --all; \
102+
$(BINARY) validate --project "$$tmp/example"; \
103+
$(BINARY) export --project "$$tmp/example" --format zip --out "$$tmp/openexit-example.zip"; \
104+
test -s "$$tmp/openexit-example.zip"
105+
106+
verify: lint test build smoke example-smoke
74107

75108
release-dist:
76109
rm -rf dist

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ make release-dist VERSION=0.1.0
4747

4848
This writes OS/architecture binaries and `dist/SHA256SUMS`.
4949

50+
Refresh the checked-in Datadog example project with:
51+
52+
```bash
53+
make example VERSION=0.1.0-dev
54+
```
55+
5056
## Commands
5157

5258
- `openexit version`
@@ -148,7 +154,7 @@ The assessment engine includes dashboard, monitor, SLO, cost, scale, identity, e
148154

149155
## Release Process
150156

151-
The release checklist lives in `docs/release.md`. A release build should pass `make verify`, `make release-dist VERSION=0.1.0`, the Datadog definition-of-done pipeline, and validation/export for every supported assessment path.
157+
The release checklist lives in `docs/release.md`. A release build should pass `make verify`, `make release-dist VERSION=0.1.0`, `make example VERSION=0.1.0-dev`, the Datadog definition-of-done pipeline, and validation/export for every supported assessment path.
152158

153159
## Assessment Paths
154160

docs/cli.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ openexit export --project ./demo --format zip --out ./openexit-demo.zip
2525

2626
The CI test suite also runs this definition-of-done pipeline against the fixture inventory and checks that the generated project layout and export bundle contain the expected artifacts. Bundle checksums are verified against the archived file bytes.
2727

28+
The checked-in Datadog example can be refreshed with `make example VERSION=0.1.0-dev`. CI also runs `make example-smoke` as part of `make verify` to ensure the example fixture still completes the full pipeline.
29+
2830
`openexit validate` performs typed consistency checks, embedded JSON Schema validation, Grafana dashboard candidate validation, Prometheus alert-rule candidate validation, OpenTelemetry collector candidate validation, ArgoCD candidate validation, YAML/JSON parse checks, evidence reference checks, secret scanning, and optional external tool checks when `promtool` or `kubeconform` are installed.
2931

3032
`openexit export` refuses to package symlinks from exported project sections, even with `--force`, so evidence bundles cannot accidentally include files from outside the project tree.

docs/release.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ The AI provider path is complete for local fixture assessment workflows and incl
3636
- [ ] `make verify VERSION=0.1.0` passes, including CLI smoke pipelines.
3737
- [ ] `make lint` runs `gofmt`, `golangci-lint`, and `go vet`.
3838
- [ ] `make release-dist VERSION=0.1.0` produces binaries and `dist/SHA256SUMS`.
39+
- [ ] `make example VERSION=0.1.0-dev` refreshes `examples/datadog-to-grafana/output/` and exports `examples/datadog-to-grafana/openexit-example.zip`.
3940
- [ ] Datadog definition-of-done pipeline passes:
4041
`init`, `collect fixture`, `assess`, `map`, `generate --all`, `validate`, `export`.
4142
- [ ] GitHub, Okta, Auth0, Cloudflare, Akamai, OpenAI, and Anthropic fixture/live-collector test coverage pass, and supported fixture provider pipelines validate.

examples/datadog-to-grafana/README.md

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,9 @@ This example uses a small redacted Datadog-like fixture and writes all generated
55
Run from the repository root:
66

77
```bash
8-
make build VERSION=0.1.0-dev
9-
./bin/openexit init ./demo
10-
./bin/openexit collect fixture --project ./demo --input ./examples/datadog-to-grafana/input/datadog-fixture.json
11-
./bin/openexit assess --project ./demo --target grafana-lgtm
12-
./bin/openexit map --project ./demo
13-
./bin/openexit generate --project ./demo --all
14-
./bin/openexit validate --project ./demo
15-
./bin/openexit export --project ./demo --format zip --out ./openexit-demo.zip
8+
make example VERSION=0.1.0-dev
169
```
1710

11+
This refreshes `examples/datadog-to-grafana/output/` and writes an ignored bundle to `examples/datadog-to-grafana/openexit-example.zip`.
12+
1813
The generated files are candidates only. Review every dashboard, alert rule, collector sketch, migration-plan phase gate, and runbook before operational use.

examples/datadog-to-grafana/input/datadog-fixture.json

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,70 @@
22
"site": "datadoghq.eu",
33
"dashboards": [
44
{
5-
"id": "example-dashboard",
6-
"title": "Example API Overview",
7-
"tags": ["team:example"],
5+
"id": "abc-123",
6+
"title": "Production API Overview",
7+
"url": "https://app.datadoghq.eu/dashboard/abc-123",
8+
"tags": ["env:prod", "team:platform"],
89
"widgets": [
9-
{ "id": "w1", "type": "timeseries", "title": "Requests", "query": "sum:example.requests{env:prod}.as_count()" }
10-
]
10+
{
11+
"id": "w1",
12+
"type": "timeseries",
13+
"title": "CPU by service",
14+
"query": "avg:system.cpu.user{env:prod} by {service}"
15+
},
16+
{
17+
"id": "w2",
18+
"type": "note",
19+
"title": "Migration notes"
20+
}
21+
],
22+
"queries": ["sum:trace.http.request.errors{env:prod}.as_count()"]
1123
}
1224
],
1325
"monitors": [
1426
{
15-
"id": "example-monitor",
16-
"name": "Example request errors",
27+
"id": "123456",
28+
"name": "High error rate",
1729
"type": "query alert",
18-
"query": "sum(last_5m):sum:example.errors{env:prod}.as_count() > 1",
19-
"notificationTargets": ["slack-example"],
20-
"tags": ["team:example"]
30+
"query": "sum(last_5m):avg:trace.http.request.errors{env:prod} > 10",
31+
"message": "Investigate API errors @slack-platform",
32+
"notificationTargets": ["slack-platform"],
33+
"tags": ["env:prod", "team:platform"],
34+
"runbookUrl": "https://runbooks.example.invalid/high-error-rate"
35+
},
36+
{
37+
"id": "789012",
38+
"name": "Latency anomaly",
39+
"type": "query alert",
40+
"query": "avg(last_15m):anomalies(avg:trace.http.request.duration{env:prod}, 'basic', 2) >= 1",
41+
"message": "Latency anomaly @webhook-custom",
42+
"notificationTargets": ["webhook-custom"],
43+
"tags": ["env:prod"]
44+
}
45+
],
46+
"slos": [
47+
{
48+
"id": "slo-123",
49+
"name": "API availability",
50+
"target": 99.9,
51+
"timeframe": "30d"
2152
}
2253
],
23-
"slos": [],
24-
"integrations": [],
25-
"metrics": []
54+
"integrations": [
55+
{
56+
"name": "kubernetes",
57+
"enabled": true,
58+
"tags": ["env:prod"]
59+
}
60+
],
61+
"metrics": [
62+
{
63+
"name": "system.cpu.user",
64+
"tags": ["env", "service"]
65+
},
66+
{
67+
"name": "trace.http.request.errors",
68+
"tags": ["env", "service"]
69+
}
70+
]
2671
}
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
# Example Output
22

3-
Run the commands in `examples/datadog-to-grafana/README.md` from the repository root to generate a complete example project under `./demo`.
3+
This directory is a checked-in OpenExit project snapshot generated from `../input/datadog-fixture.json`.
4+
5+
Refresh it from the repository root:
6+
7+
```bash
8+
make example VERSION=0.1.0-dev
9+
```
10+
11+
The generated candidates are review artifacts only. Do not import dashboards, alert rules, collector config, or GitOps manifests into production without owner review, shadowing, and rollback approval.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Acceptance Criteria
2+
3+
- Project: output
4+
- Source: datadog
5+
- Target: grafana-lgtm
6+
- Generated: 2026-05-27T04:39:07Z
7+
- Complexity: high (80)
8+
9+
## Assumptions
10+
- OpenExit is local-first and performs no production writes.
11+
- Generated target files are candidates and require human review.
12+
- Evidence references point to redacted local source snapshots.
13+
14+
## Acceptance Criteria
15+
- All candidate dashboards are reviewed by an owner.
16+
- All alert candidates shadow production Datadog alerts before cutover.
17+
- SLO semantics, burn-rate behavior, and notification routes are signed off.
18+
- Validation passes with no critical findings.
19+
20+
## Generated by OpenExit
21+
This artifact was generated deterministically from local OpenExit inventory and assessment manifests. It is not production-ready until reviewed.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Alert Shadowing Plan
2+
3+
- Project: output
4+
- Source: datadog
5+
- Target: grafana-lgtm
6+
- Generated: 2026-05-27T04:39:07Z
7+
- Complexity: high (80)
8+
9+
## Assumptions
10+
- OpenExit is local-first and performs no production writes.
11+
- Generated target files are candidates and require human review.
12+
- Evidence references point to redacted local source snapshots.
13+
14+
## Alert Shadowing Plan
15+
- Run target alert candidates without production paging.
16+
- Compare Datadog and target alert state over at least one representative period.
17+
- Investigate every high-severity finding before enabling notifications.
18+
- Document acceptable differences and owner sign-off.
19+
20+
## Generated by OpenExit
21+
This artifact was generated deterministically from local OpenExit inventory and assessment manifests. It is not production-ready until reviewed.

0 commit comments

Comments
 (0)