@c2l2c/backstage-plugin-dora-metrics 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/package.json +30 -6
- package/dist/alpha.d.ts +0 -60
- package/dist/alpha.esm.js +0 -2
- package/dist/alpha.esm.js.map +0 -1
- package/dist/api/DoraMetricsClient.esm.js +0 -253
- package/dist/api/DoraMetricsClient.esm.js.map +0 -1
- package/dist/api/MockDoraMetricsClient.esm.js +0 -72
- package/dist/api/MockDoraMetricsClient.esm.js.map +0 -1
- package/dist/api/types.esm.js +0 -8
- package/dist/api/types.esm.js.map +0 -1
- package/dist/components/DoraMetricsContent.esm.js +0 -1116
- package/dist/components/DoraMetricsContent.esm.js.map +0 -1
- package/dist/components/ui/badge.esm.js +0 -33
- package/dist/components/ui/badge.esm.js.map +0 -1
- package/dist/components/ui/card.esm.js +0 -79
- package/dist/components/ui/card.esm.js.map +0 -1
- package/dist/components/ui/select.esm.js +0 -106
- package/dist/components/ui/select.esm.js.map +0 -1
- package/dist/extensions/api.esm.js +0 -25
- package/dist/extensions/api.esm.js.map +0 -1
- package/dist/extensions/entityContent.esm.js +0 -14
- package/dist/extensions/entityContent.esm.js.map +0 -1
- package/dist/index.d.ts +0 -100
- package/dist/index.esm.js +0 -6
- package/dist/index.esm.js.map +0 -1
- package/dist/plugin.esm.js +0 -11
- package/dist/plugin.esm.js.map +0 -1
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
const MOCK_ENVIRONMENTS = [
|
|
2
|
-
{ name: "Production", branch: "main", isProduction: true, label: "hotfix" },
|
|
3
|
-
{ name: "Staging", branch: "staging", isProduction: false, label: "" }
|
|
4
|
-
];
|
|
5
|
-
const MOCK_TARGETS = {
|
|
6
|
-
deploymentFrequency: 7,
|
|
7
|
-
leadTime: 24,
|
|
8
|
-
changeFailureRate: 15,
|
|
9
|
-
mttr: 1
|
|
10
|
-
};
|
|
11
|
-
const MOCK_PRS = [
|
|
12
|
-
{ number: 142, title: "feat: redesign dashboard layout", url: "https://github.com/example/repo/pull/142", durationHours: 31.2, mergedAt: "2026-03-15T14:22:00Z", author: "alice", authorAvatar: "https://avatars.githubusercontent.com/u/1?v=4" },
|
|
13
|
-
{ number: 138, title: "fix: resolve memory leak in worker thread", url: "https://github.com/example/repo/pull/138", durationHours: 22.5, mergedAt: "2026-03-12T09:10:00Z", author: "bob", authorAvatar: "https://avatars.githubusercontent.com/u/2?v=4" },
|
|
14
|
-
{ number: 135, title: "feat: add export to CSV functionality", url: "https://github.com/example/repo/pull/135", durationHours: 18.8, mergedAt: "2026-03-10T16:45:00Z", author: "carol", authorAvatar: "https://avatars.githubusercontent.com/u/3?v=4" },
|
|
15
|
-
{ number: 131, title: "chore: upgrade dependencies to latest", url: "https://github.com/example/repo/pull/131", durationHours: 14.1, mergedAt: "2026-03-08T11:30:00Z", author: "dave", authorAvatar: "https://avatars.githubusercontent.com/u/4?v=4" },
|
|
16
|
-
{ number: 128, title: "feat: implement rate limiting middleware", url: "https://github.com/example/repo/pull/128", durationHours: 9.6, mergedAt: "2026-03-05T13:20:00Z", author: "alice", authorAvatar: "https://avatars.githubusercontent.com/u/1?v=4" }
|
|
17
|
-
];
|
|
18
|
-
const MOCK_HOTFIX_PRS = [
|
|
19
|
-
{ number: 140, title: "hotfix: fix broken auth token refresh", url: "https://github.com/example/repo/pull/140", durationHours: 1.2, mergedAt: "2026-03-14T03:45:00Z", author: "bob", authorAvatar: "https://avatars.githubusercontent.com/u/2?v=4" },
|
|
20
|
-
{ number: 133, title: "hotfix: patch SQL injection in search query", url: "https://github.com/example/repo/pull/133", durationHours: 0.8, mergedAt: "2026-03-09T22:10:00Z", author: "carol", authorAvatar: "https://avatars.githubusercontent.com/u/3?v=4" }
|
|
21
|
-
];
|
|
22
|
-
const MOCK_HISTORY = [
|
|
23
|
-
{ weekLabel: "Feb 17", bucketMidMs: (/* @__PURE__ */ new Date("2026-02-20")).getTime(), deploymentCount: 3, leadTimeHours: 24.1, changeFailureRate: 0, mttrHours: 0 },
|
|
24
|
-
{ weekLabel: "Feb 24", bucketMidMs: (/* @__PURE__ */ new Date("2026-02-27")).getTime(), deploymentCount: 5, leadTimeHours: 19.8, changeFailureRate: 20, mttrHours: 1.2 },
|
|
25
|
-
{ weekLabel: "Mar 3", bucketMidMs: (/* @__PURE__ */ new Date("2026-03-06")).getTime(), deploymentCount: 4, leadTimeHours: 22.3, changeFailureRate: 0, mttrHours: 0 },
|
|
26
|
-
{ weekLabel: "Mar 10", bucketMidMs: (/* @__PURE__ */ new Date("2026-03-13")).getTime(), deploymentCount: 6, leadTimeHours: 16.5, changeFailureRate: 16.7, mttrHours: 0.9 },
|
|
27
|
-
{ weekLabel: "Mar 17", bucketMidMs: (/* @__PURE__ */ new Date("2026-03-20")).getTime(), deploymentCount: 5, leadTimeHours: 18.4, changeFailureRate: 0, mttrHours: 0 }
|
|
28
|
-
];
|
|
29
|
-
class MockDoraMetricsClient {
|
|
30
|
-
getEnvironments() {
|
|
31
|
-
return MOCK_ENVIRONMENTS;
|
|
32
|
-
}
|
|
33
|
-
getDefaultDays() {
|
|
34
|
-
return 30;
|
|
35
|
-
}
|
|
36
|
-
getTargets() {
|
|
37
|
-
return MOCK_TARGETS;
|
|
38
|
-
}
|
|
39
|
-
async getMetrics(_projectSlug, env, _days, _targetsOverride) {
|
|
40
|
-
await new Promise((r) => setTimeout(r, 600));
|
|
41
|
-
return {
|
|
42
|
-
deploymentFrequency: {
|
|
43
|
-
value: 4.2,
|
|
44
|
-
unit: "per week",
|
|
45
|
-
rating: "high",
|
|
46
|
-
target: 7,
|
|
47
|
-
slowestPRs: MOCK_PRS
|
|
48
|
-
},
|
|
49
|
-
leadTime: {
|
|
50
|
-
value: 18.4,
|
|
51
|
-
unit: "hours",
|
|
52
|
-
rating: "elite",
|
|
53
|
-
target: 24,
|
|
54
|
-
slowestPRs: MOCK_PRS
|
|
55
|
-
},
|
|
56
|
-
changeFailureRate: env.isProduction ? { value: 8.3, unit: "%", rating: "high", target: 15 } : null,
|
|
57
|
-
mttr: env.isProduction ? { value: 0.8, unit: "hours", rating: "elite", target: 1, slowestPRs: MOCK_HOTFIX_PRS } : null,
|
|
58
|
-
numberOfHotfixes: env.isProduction ? { value: 2, unit: "PRs", rating: "high", target: 0, slowestPRs: MOCK_HOTFIX_PRS } : null
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
async getHistory(_projectSlug, env, _days) {
|
|
62
|
-
await new Promise((r) => setTimeout(r, 400));
|
|
63
|
-
return MOCK_HISTORY.map((point) => ({
|
|
64
|
-
...point,
|
|
65
|
-
changeFailureRate: env.isProduction ? point.changeFailureRate : void 0,
|
|
66
|
-
mttrHours: env.isProduction ? point.mttrHours : void 0
|
|
67
|
-
}));
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export { MockDoraMetricsClient };
|
|
72
|
-
//# sourceMappingURL=MockDoraMetricsClient.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MockDoraMetricsClient.esm.js","sources":["../../src/api/MockDoraMetricsClient.ts"],"sourcesContent":["import { DoraEnvironment, DoraHistoryPoint, DoraMetrics, DoraMetricsApi, DoraTargets } from './types';\n\nconst MOCK_ENVIRONMENTS: DoraEnvironment[] = [\n { name: 'Production', branch: 'main', isProduction: true, label: 'hotfix' },\n { name: 'Staging', branch: 'staging', isProduction: false, label: '' },\n];\n\nconst MOCK_TARGETS: DoraTargets = {\n deploymentFrequency: 7,\n leadTime: 24,\n changeFailureRate: 15,\n mttr: 1,\n};\n\nconst MOCK_PRS = [\n { number: 142, title: 'feat: redesign dashboard layout', url: 'https://github.com/example/repo/pull/142', durationHours: 31.2, mergedAt: '2026-03-15T14:22:00Z', author: 'alice', authorAvatar: 'https://avatars.githubusercontent.com/u/1?v=4' },\n { number: 138, title: 'fix: resolve memory leak in worker thread', url: 'https://github.com/example/repo/pull/138', durationHours: 22.5, mergedAt: '2026-03-12T09:10:00Z', author: 'bob', authorAvatar: 'https://avatars.githubusercontent.com/u/2?v=4' },\n { number: 135, title: 'feat: add export to CSV functionality', url: 'https://github.com/example/repo/pull/135', durationHours: 18.8, mergedAt: '2026-03-10T16:45:00Z', author: 'carol', authorAvatar: 'https://avatars.githubusercontent.com/u/3?v=4' },\n { number: 131, title: 'chore: upgrade dependencies to latest', url: 'https://github.com/example/repo/pull/131', durationHours: 14.1, mergedAt: '2026-03-08T11:30:00Z', author: 'dave', authorAvatar: 'https://avatars.githubusercontent.com/u/4?v=4' },\n { number: 128, title: 'feat: implement rate limiting middleware', url: 'https://github.com/example/repo/pull/128', durationHours: 9.6, mergedAt: '2026-03-05T13:20:00Z', author: 'alice', authorAvatar: 'https://avatars.githubusercontent.com/u/1?v=4' },\n];\n\nconst MOCK_HOTFIX_PRS = [\n { number: 140, title: 'hotfix: fix broken auth token refresh', url: 'https://github.com/example/repo/pull/140', durationHours: 1.2, mergedAt: '2026-03-14T03:45:00Z', author: 'bob', authorAvatar: 'https://avatars.githubusercontent.com/u/2?v=4' },\n { number: 133, title: 'hotfix: patch SQL injection in search query', url: 'https://github.com/example/repo/pull/133', durationHours: 0.8, mergedAt: '2026-03-09T22:10:00Z', author: 'carol', authorAvatar: 'https://avatars.githubusercontent.com/u/3?v=4' },\n];\n\nconst MOCK_HISTORY: DoraHistoryPoint[] = [\n { weekLabel: 'Feb 17', bucketMidMs: new Date('2026-02-20').getTime(), deploymentCount: 3, leadTimeHours: 24.1, changeFailureRate: 0, mttrHours: 0 },\n { weekLabel: 'Feb 24', bucketMidMs: new Date('2026-02-27').getTime(), deploymentCount: 5, leadTimeHours: 19.8, changeFailureRate: 20, mttrHours: 1.2 },\n { weekLabel: 'Mar 3', bucketMidMs: new Date('2026-03-06').getTime(), deploymentCount: 4, leadTimeHours: 22.3, changeFailureRate: 0, mttrHours: 0 },\n { weekLabel: 'Mar 10', bucketMidMs: new Date('2026-03-13').getTime(), deploymentCount: 6, leadTimeHours: 16.5, changeFailureRate: 16.7, mttrHours: 0.9 },\n { weekLabel: 'Mar 17', bucketMidMs: new Date('2026-03-20').getTime(), deploymentCount: 5, leadTimeHours: 18.4, changeFailureRate: 0, mttrHours: 0 },\n];\n\nexport class MockDoraMetricsClient implements DoraMetricsApi {\n getEnvironments(): DoraEnvironment[] {\n return MOCK_ENVIRONMENTS;\n }\n\n getDefaultDays(): number {\n return 30;\n }\n\n getTargets(): DoraTargets {\n return MOCK_TARGETS;\n }\n\n async getMetrics(\n _projectSlug: string,\n env: DoraEnvironment,\n _days: number,\n _targetsOverride?: Partial<DoraTargets>,\n ): Promise<DoraMetrics> {\n await new Promise(r => setTimeout(r, 600)); // simulate network delay\n\n return {\n deploymentFrequency: {\n value: 4.2,\n unit: 'per week',\n rating: 'high',\n target: 7,\n slowestPRs: MOCK_PRS,\n },\n leadTime: {\n value: 18.4,\n unit: 'hours',\n rating: 'elite',\n target: 24,\n slowestPRs: MOCK_PRS,\n },\n changeFailureRate: env.isProduction\n ? { value: 8.3, unit: '%', rating: 'high', target: 15 }\n : null,\n mttr: env.isProduction\n ? { value: 0.8, unit: 'hours', rating: 'elite', target: 1, slowestPRs: MOCK_HOTFIX_PRS }\n : null,\n numberOfHotfixes: env.isProduction\n ? { value: 2, unit: 'PRs', rating: 'high', target: 0, slowestPRs: MOCK_HOTFIX_PRS }\n : null,\n };\n }\n\n async getHistory(\n _projectSlug: string,\n env: DoraEnvironment,\n _days: number,\n ): Promise<DoraHistoryPoint[]> {\n await new Promise(r => setTimeout(r, 400));\n\n return MOCK_HISTORY.map(point => ({\n ...point,\n changeFailureRate: env.isProduction ? point.changeFailureRate : undefined,\n mttrHours: env.isProduction ? point.mttrHours : undefined,\n }));\n }\n}\n"],"names":[],"mappings":"AAEA,MAAM,iBAAA,GAAuC;AAAA,EAC3C,EAAE,MAAM,YAAA,EAAc,MAAA,EAAQ,QAAQ,YAAA,EAAc,IAAA,EAAM,OAAO,QAAA,EAAS;AAAA,EAC1E,EAAE,MAAM,SAAA,EAAW,MAAA,EAAQ,WAAW,YAAA,EAAc,KAAA,EAAO,OAAO,EAAA;AACpE,CAAA;AAEA,MAAM,YAAA,GAA4B;AAAA,EAChC,mBAAA,EAAqB,CAAA;AAAA,EACrB,QAAA,EAAU,EAAA;AAAA,EACV,iBAAA,EAAmB,EAAA;AAAA,EACnB,IAAA,EAAM;AACR,CAAA;AAEA,MAAM,QAAA,GAAW;AAAA,EACf,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,mCAAmC,GAAA,EAAK,0CAAA,EAA4C,aAAA,EAAe,IAAA,EAAM,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,OAAA,EAAS,cAAc,+CAAA,EAAgD;AAAA,EAChP,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,6CAA6C,GAAA,EAAK,0CAAA,EAA4C,aAAA,EAAe,IAAA,EAAM,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,cAAc,+CAAA,EAAgD;AAAA,EACxP,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,yCAAyC,GAAA,EAAK,0CAAA,EAA4C,aAAA,EAAe,IAAA,EAAM,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,OAAA,EAAS,cAAc,+CAAA,EAAgD;AAAA,EACtP,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,yCAAyC,GAAA,EAAK,0CAAA,EAA4C,aAAA,EAAe,IAAA,EAAM,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,MAAA,EAAQ,cAAc,+CAAA,EAAgD;AAAA,EACrP,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,4CAA4C,GAAA,EAAK,0CAAA,EAA4C,aAAA,EAAe,GAAA,EAAK,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,OAAA,EAAS,cAAc,+CAAA;AAC1M,CAAA;AAEA,MAAM,eAAA,GAAkB;AAAA,EACtB,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,yCAAyC,GAAA,EAAK,0CAAA,EAA4C,aAAA,EAAe,GAAA,EAAK,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,cAAc,+CAAA,EAAgD;AAAA,EACnP,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,+CAA+C,GAAA,EAAK,0CAAA,EAA4C,aAAA,EAAe,GAAA,EAAK,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,OAAA,EAAS,cAAc,+CAAA;AAC7M,CAAA;AAEA,MAAM,YAAA,GAAmC;AAAA,EACvC,EAAE,SAAA,EAAW,QAAA,EAAU,WAAA,EAAA,iBAAa,IAAI,KAAK,YAAY,CAAA,EAAE,OAAA,EAAQ,EAAG,iBAAiB,CAAA,EAAG,aAAA,EAAe,MAAM,iBAAA,EAAmB,CAAA,EAAG,WAAW,CAAA,EAAE;AAAA,EAClJ,EAAE,SAAA,EAAW,QAAA,EAAU,WAAA,EAAA,iBAAa,IAAI,KAAK,YAAY,CAAA,EAAE,OAAA,EAAQ,EAAG,iBAAiB,CAAA,EAAG,aAAA,EAAe,MAAM,iBAAA,EAAmB,EAAA,EAAI,WAAW,GAAA,EAAI;AAAA,EACrJ,EAAE,SAAA,EAAW,OAAA,EAAU,WAAA,EAAA,iBAAa,IAAI,KAAK,YAAY,CAAA,EAAE,OAAA,EAAQ,EAAG,iBAAiB,CAAA,EAAG,aAAA,EAAe,MAAM,iBAAA,EAAmB,CAAA,EAAG,WAAW,CAAA,EAAE;AAAA,EAClJ,EAAE,SAAA,EAAW,QAAA,EAAU,WAAA,EAAA,iBAAa,IAAI,KAAK,YAAY,CAAA,EAAE,OAAA,EAAQ,EAAG,iBAAiB,CAAA,EAAG,aAAA,EAAe,MAAM,iBAAA,EAAmB,IAAA,EAAM,WAAW,GAAA,EAAI;AAAA,EACvJ,EAAE,SAAA,EAAW,QAAA,EAAU,WAAA,EAAA,iBAAa,IAAI,KAAK,YAAY,CAAA,EAAE,OAAA,EAAQ,EAAG,iBAAiB,CAAA,EAAG,aAAA,EAAe,MAAM,iBAAA,EAAmB,CAAA,EAAG,WAAW,CAAA;AAClJ,CAAA;AAEO,MAAM,qBAAA,CAAgD;AAAA,EAC3D,eAAA,GAAqC;AACnC,IAAA,OAAO,iBAAA;AAAA,EACT;AAAA,EAEA,cAAA,GAAyB;AACvB,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAA0B;AACxB,IAAA,OAAO,YAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,YAAA,EACA,GAAA,EACA,OACA,gBAAA,EACsB;AACtB,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,EAAG,GAAG,CAAC,CAAA;AAEzC,IAAA,OAAO;AAAA,MACL,mBAAA,EAAqB;AAAA,QACnB,KAAA,EAAO,GAAA;AAAA,QACP,IAAA,EAAM,UAAA;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACd;AAAA,MACA,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,IAAA;AAAA,QACP,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,OAAA;AAAA,QACR,MAAA,EAAQ,EAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACd;AAAA,MACA,iBAAA,EAAmB,GAAA,CAAI,YAAA,GACnB,EAAE,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAG,GACpD,IAAA;AAAA,MACJ,IAAA,EAAM,GAAA,CAAI,YAAA,GACN,EAAE,OAAO,GAAA,EAAK,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,CAAA,EAAG,UAAA,EAAY,iBAAgB,GACrF,IAAA;AAAA,MACJ,gBAAA,EAAkB,GAAA,CAAI,YAAA,GAClB,EAAE,OAAO,CAAA,EAAG,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,UAAA,EAAY,iBAAgB,GAChF;AAAA,KACN;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CACJ,YAAA,EACA,GAAA,EACA,KAAA,EAC6B;AAC7B,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,EAAG,GAAG,CAAC,CAAA;AAEzC,IAAA,OAAO,YAAA,CAAa,IAAI,CAAA,KAAA,MAAU;AAAA,MAChC,GAAG,KAAA;AAAA,MACH,iBAAA,EAAmB,GAAA,CAAI,YAAA,GAAe,KAAA,CAAM,iBAAA,GAAoB,MAAA;AAAA,MAChE,SAAA,EAAW,GAAA,CAAI,YAAA,GAAe,KAAA,CAAM,SAAA,GAAY;AAAA,KAClD,CAAE,CAAA;AAAA,EACJ;AACF;;;;"}
|
package/dist/api/types.esm.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.esm.js","sources":["../../src/api/types.ts"],"sourcesContent":["import { createApiRef } from '@backstage/core-plugin-api';\n\nexport type DoraRating = 'elite' | 'high' | 'medium' | 'low';\n\nexport interface PrDetail {\n number: number;\n title: string;\n url: string;\n durationHours: number;\n mergedAt: string;\n author?: string;\n authorAvatar?: string;\n}\n\nexport interface DoraMetricValue {\n value: number;\n unit: string;\n rating: DoraRating;\n target: number;\n slowestPRs?: PrDetail[];\n}\n\nexport interface DoraEnvironment {\n name: string;\n /**\n * Raw branch pattern as configured — a single branch name, a comma-separated\n * list (\"main,master\"), or a JavaScript regex string (\"^(main|master)$\").\n * The client resolves this to a concrete list of branches at query time.\n */\n branch: string;\n isProduction: boolean;\n label: string;\n}\n\nexport interface DoraTargets {\n deploymentFrequency: number;\n leadTime: number;\n changeFailureRate: number;\n mttr: number;\n}\n\nexport interface DoraMetrics {\n deploymentFrequency: DoraMetricValue;\n leadTime: DoraMetricValue;\n /** null for non-production environments */\n changeFailureRate: DoraMetricValue | null;\n /** null for non-production environments */\n mttr: DoraMetricValue | null;\n /** null for non-production environments */\n numberOfHotfixes: DoraMetricValue | null;\n}\n\nexport interface DoraHistoryPoint {\n weekLabel: string; // e.g. \"Mar 10\"\n bucketMidMs: number; // timestamp (ms) of bucket midpoint — for chart x-axis alignment\n deploymentCount: number; // total PRs merged that week\n leadTimeHours: number; // avg lead time that week (0 if no PRs)\n changeFailureRate?: number; // % (prod only)\n mttrHours?: number; // avg (prod only)\n}\n\nexport interface DoraMetricsApi {\n getEnvironments(): DoraEnvironment[];\n getDefaultDays(): number;\n getTargets(): DoraTargets;\n getMetrics(\n projectSlug: string,\n env: DoraEnvironment,\n days: number,\n targetsOverride?: Partial<DoraTargets>,\n ): Promise<DoraMetrics>;\n getHistory(\n projectSlug: string,\n env: DoraEnvironment,\n days: number,\n ): Promise<DoraHistoryPoint[]>;\n}\n\nexport const doraMetricsApiRef = createApiRef<DoraMetricsApi>({\n id: 'plugin.dora-metrics.service',\n});\n"],"names":[],"mappings":";;AA8EO,MAAM,oBAAoB,YAAA,CAA6B;AAAA,EAC5D,EAAA,EAAI;AACN,CAAC;;;;"}
|