@anyshift/backstage-plugin-anyshift 0.1.0-beta.17 → 0.1.0-beta.18
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/dist/components/ask/askPresenters.esm.js +38 -9
- package/dist/components/ask/askPresenters.esm.js.map +1 -1
- package/dist/components/entity/DatadogLiveSignal.esm.js +85 -23
- package/dist/components/entity/DatadogLiveSignal.esm.js.map +1 -1
- package/dist/components/entity/SectionPresenters.esm.js +1 -1
- package/dist/components/entity/SectionPresenters.esm.js.map +1 -1
- package/dist/components/explorer/DatadogOperationsRadar.esm.js +92 -31
- package/dist/components/explorer/DatadogOperationsRadar.esm.js.map +1 -1
- package/dist/package.json.esm.js +1 -1
- package/package.json +1 -1
|
@@ -27,14 +27,12 @@ function resolveSignalEntity(entities, signal) {
|
|
|
27
27
|
}
|
|
28
28
|
function globalDatadogViewFrom(signals, entities) {
|
|
29
29
|
const uniqueActive = /* @__PURE__ */ new Map();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
row.namespace
|
|
37
|
-
].filter(Boolean).join("|").toLocaleLowerCase();
|
|
30
|
+
const activeItems = signals.active.items ?? [];
|
|
31
|
+
const activeProviders = signals.active.providers ?? [];
|
|
32
|
+
const activeWarnings = signals.active.warnings ?? [];
|
|
33
|
+
for (const item of activeItems) {
|
|
34
|
+
const row = activeSignalRow(item);
|
|
35
|
+
const key = row.id;
|
|
38
36
|
if (!uniqueActive.has(key)) {
|
|
39
37
|
uniqueActive.set(key, {
|
|
40
38
|
...row,
|
|
@@ -57,15 +55,38 @@ function globalDatadogViewFrom(signals, entities) {
|
|
|
57
55
|
};
|
|
58
56
|
});
|
|
59
57
|
return {
|
|
60
|
-
activeTotal:
|
|
61
|
-
|
|
58
|
+
activeTotal: activeItems.length,
|
|
59
|
+
activeHasMore: signals.active.page?.hasMore === true,
|
|
60
|
+
byState: activeStateCounts(activeItems),
|
|
62
61
|
activeRows,
|
|
63
62
|
noiseCounts: signals.noise.counts,
|
|
64
63
|
noiseRows,
|
|
65
64
|
activeError: signals.active.state === "error" ? signals.active.message : void 0,
|
|
66
|
-
noiseError: signals.noise.state === "error" ? signals.noise.message : void 0
|
|
65
|
+
noiseError: signals.noise.state === "error" ? signals.noise.message : void 0,
|
|
66
|
+
activePartial: signals.active.partial === true || activeProviders.some((provider) => provider.status !== "available") || activeWarnings.length > 0,
|
|
67
|
+
activeProviders,
|
|
68
|
+
activeWarnings
|
|
67
69
|
};
|
|
68
70
|
}
|
|
71
|
+
function activeSignalRow(item) {
|
|
72
|
+
return {
|
|
73
|
+
id: item.id,
|
|
74
|
+
title: item.title,
|
|
75
|
+
provider: item.provider,
|
|
76
|
+
severity: item.severity,
|
|
77
|
+
providerStatus: item.providerStatus,
|
|
78
|
+
service: item.service?.name ?? null,
|
|
79
|
+
workload: item.service?.name ?? null,
|
|
80
|
+
namespace: item.service?.namespace ?? null
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function activeStateCounts(items) {
|
|
84
|
+
const counts = /* @__PURE__ */ new Map();
|
|
85
|
+
for (const item of items) {
|
|
86
|
+
counts.set(item.providerStatus, (counts.get(item.providerStatus) ?? 0) + 1);
|
|
87
|
+
}
|
|
88
|
+
return [...counts].map(([state, count]) => ({ state, count }));
|
|
89
|
+
}
|
|
69
90
|
const useStyles = makeStyles((theme) => ({
|
|
70
91
|
eyebrow: {
|
|
71
92
|
color: COLORS.datadog,
|
|
@@ -128,7 +149,7 @@ const DatadogOperationsRadar = ({
|
|
|
128
149
|
action: /* @__PURE__ */ jsx(
|
|
129
150
|
Button,
|
|
130
151
|
{
|
|
131
|
-
"aria-label": "Refresh
|
|
152
|
+
"aria-label": "Refresh operational signals",
|
|
132
153
|
onClick: onRefresh,
|
|
133
154
|
disabled: refreshing,
|
|
134
155
|
size: "small",
|
|
@@ -136,7 +157,7 @@ const DatadogOperationsRadar = ({
|
|
|
136
157
|
}
|
|
137
158
|
),
|
|
138
159
|
children: [
|
|
139
|
-
/* @__PURE__ */ jsx(Typography, { variant: "overline", className: classes.eyebrow, children: "
|
|
160
|
+
/* @__PURE__ */ jsx(Typography, { variant: "overline", className: classes.eyebrow, children: "Operational alerts \xB7 live graph signal" }),
|
|
140
161
|
/* @__PURE__ */ jsx(Box, { mt: 1, children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
|
|
141
162
|
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 6, children: /* @__PURE__ */ jsx(
|
|
142
163
|
SignalLane,
|
|
@@ -158,16 +179,7 @@ const DatadogOperationsRadar = ({
|
|
|
158
179
|
) })
|
|
159
180
|
] }) }),
|
|
160
181
|
error && /* @__PURE__ */ jsx(Typography, { color: "error", component: "p", children: error }),
|
|
161
|
-
signals.state === "partial" && /* @__PURE__ */ jsx(
|
|
162
|
-
Typography,
|
|
163
|
-
{
|
|
164
|
-
variant: "caption",
|
|
165
|
-
color: "textSecondary",
|
|
166
|
-
component: "p",
|
|
167
|
-
className: classes.partial,
|
|
168
|
-
children: "Some Datadog evidence is temporarily unavailable."
|
|
169
|
-
}
|
|
170
|
-
),
|
|
182
|
+
(signals.state === "partial" || view.activePartial) && /* @__PURE__ */ jsx(AlertCoverage, { view, classes }),
|
|
171
183
|
/* @__PURE__ */ jsx(EvidenceDisclosure, { data: signals })
|
|
172
184
|
]
|
|
173
185
|
}
|
|
@@ -189,37 +201,86 @@ const ActiveLane = ({
|
|
|
189
201
|
if (view.activeError) {
|
|
190
202
|
return /* @__PURE__ */ jsx(Typography, { color: "error", children: view.activeError });
|
|
191
203
|
}
|
|
204
|
+
const activeTotal = view.activeTotal ?? 0;
|
|
192
205
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
193
206
|
/* @__PURE__ */ jsxs(Box, { mt: 1, children: [
|
|
194
207
|
/* @__PURE__ */ jsxs(Typography, { variant: "h4", className: classes.headline, children: [
|
|
195
|
-
|
|
196
|
-
|
|
208
|
+
view.activeHasMore ? "At least " : "",
|
|
209
|
+
formatNumber(activeTotal),
|
|
210
|
+
" active",
|
|
211
|
+
" ",
|
|
212
|
+
activeTotal === 1 ? "alert" : "alerts"
|
|
197
213
|
] }),
|
|
198
214
|
/* @__PURE__ */ jsx(Box, { className: classes.metrics, children: view.byState.map((item) => /* @__PURE__ */ jsx(
|
|
199
215
|
Chip,
|
|
200
216
|
{
|
|
201
217
|
size: "small",
|
|
202
218
|
variant: "outlined",
|
|
203
|
-
label: `${formatNumber(item.count)} ${item.state}`
|
|
219
|
+
label: `${formatNumber(item.count)} ${item.state}${view.activeHasMore ? " (loaded page)" : ""}`
|
|
204
220
|
},
|
|
205
221
|
item.state
|
|
206
|
-
)) })
|
|
222
|
+
)) }),
|
|
223
|
+
view.activeHasMore && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: "Provider state counts reflect the loaded page only." })
|
|
207
224
|
] }),
|
|
208
225
|
/* @__PURE__ */ jsx(
|
|
209
226
|
SignalRows,
|
|
210
227
|
{
|
|
211
228
|
rows: view.activeRows.map((row) => ({
|
|
212
|
-
key:
|
|
213
|
-
title: row.
|
|
214
|
-
detail: [
|
|
229
|
+
key: row.id,
|
|
230
|
+
title: row.title,
|
|
231
|
+
detail: [
|
|
232
|
+
row.provider,
|
|
233
|
+
row.severity,
|
|
234
|
+
row.providerStatus,
|
|
235
|
+
row.workload || row.service
|
|
236
|
+
].filter(Boolean).join(" \xB7 "),
|
|
215
237
|
entity: row.entity
|
|
216
238
|
})),
|
|
217
|
-
empty: "No active
|
|
239
|
+
empty: "No active alerts.",
|
|
218
240
|
classes
|
|
219
241
|
}
|
|
220
242
|
)
|
|
221
243
|
] });
|
|
222
244
|
};
|
|
245
|
+
const AlertCoverage = ({
|
|
246
|
+
view,
|
|
247
|
+
classes
|
|
248
|
+
}) => /* @__PURE__ */ jsxs(Box, { className: classes.partial, children: [
|
|
249
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", component: "p", children: "Some operational alert evidence is temporarily unavailable." }),
|
|
250
|
+
view.activeProviders.filter((provider) => provider.status !== "available").map((provider) => /* @__PURE__ */ jsxs(
|
|
251
|
+
Typography,
|
|
252
|
+
{
|
|
253
|
+
variant: "caption",
|
|
254
|
+
color: "textSecondary",
|
|
255
|
+
component: "p",
|
|
256
|
+
children: [
|
|
257
|
+
"Alert coverage: ",
|
|
258
|
+
readableProvider(provider.provider),
|
|
259
|
+
" ",
|
|
260
|
+
provider.status,
|
|
261
|
+
"."
|
|
262
|
+
]
|
|
263
|
+
},
|
|
264
|
+
provider.provider
|
|
265
|
+
)),
|
|
266
|
+
view.activeWarnings.map((warning) => /* @__PURE__ */ jsxs(
|
|
267
|
+
Typography,
|
|
268
|
+
{
|
|
269
|
+
variant: "caption",
|
|
270
|
+
color: "textSecondary",
|
|
271
|
+
component: "p",
|
|
272
|
+
children: [
|
|
273
|
+
"Alert warning: ",
|
|
274
|
+
warning.message,
|
|
275
|
+
warning.message.endsWith(".") ? "" : "."
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
`${warning.provider ?? "alert"}:${warning.code}`
|
|
279
|
+
))
|
|
280
|
+
] });
|
|
281
|
+
function readableProvider(provider) {
|
|
282
|
+
return provider.charAt(0).toUpperCase() + provider.slice(1);
|
|
283
|
+
}
|
|
223
284
|
const NoiseLane = ({
|
|
224
285
|
view,
|
|
225
286
|
classes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatadogOperationsRadar.esm.js","sources":["../../../src/components/explorer/DatadogOperationsRadar.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Chip,\n Divider,\n Grid,\n Typography,\n makeStyles,\n} from '@material-ui/core';\nimport { InfoCard } from '@backstage/core-components';\nimport type { Entity } from '@backstage/catalog-model';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport type { DatadogSignals, DatadogSignalWorkload } from '../../api/types';\nimport { EvidenceDisclosure } from '../entity/EvidenceDisclosure';\n\nconst COLORS = {\n datadog: '#632ca6',\n firing: '#d63230',\n noisy: '#d97706',\n quiet: '#238636',\n unavailable: '#6b7280',\n};\n\ninterface ActiveSignalRow {\n monitor: string;\n state: string;\n service: string | null;\n workload: string | null;\n namespace: string | null;\n entity?: Entity;\n}\n\ninterface NoiseSignalRow {\n name: string;\n fires: number;\n recovers: number;\n pctSelfResolved: number;\n noiseKind: 'flapping' | 'stuck';\n services: string[];\n workloads: DatadogSignalWorkload[];\n entity?: Entity;\n}\n\nexport interface GlobalDatadogView {\n activeTotal?: number;\n byState: Array<{ state: string; count: number }>;\n activeRows: ActiveSignalRow[];\n noiseCounts?: { flapping: number; stuck: number; totalFires: number };\n noiseRows: NoiseSignalRow[];\n activeError?: string;\n noiseError?: string;\n}\n\nexport function resolveSignalEntity(\n entities: Entity[],\n signal: {\n workload?: string | null;\n namespace?: string | null;\n service?: string | null;\n },\n): Entity | undefined {\n for (const target of [signal.workload, signal.service]) {\n if (!target) continue;\n const matches = entities.filter(entity => {\n const annotated = entity.metadata.annotations?.['anyshift.io/target'];\n const nameMatches =\n annotated === target || entity.metadata.name === target;\n const namespace = entity.metadata.namespace ?? 'default';\n return (\n nameMatches && (!signal.namespace || namespace === signal.namespace)\n );\n });\n if (matches.length === 1) return matches[0];\n const components = matches.filter(entity => entity.kind === 'Component');\n if (components.length === 1) return components[0];\n }\n return undefined;\n}\n\nexport function globalDatadogViewFrom(\n signals: DatadogSignals,\n entities: Entity[],\n): GlobalDatadogView {\n const uniqueActive = new Map<string, ActiveSignalRow>();\n for (const row of signals.active.firing ?? []) {\n const key = [\n row.monitor,\n row.state,\n row.service,\n row.workload,\n row.namespace,\n ]\n .filter(Boolean)\n .join('|')\n .toLocaleLowerCase();\n if (!uniqueActive.has(key)) {\n uniqueActive.set(key, {\n ...row,\n entity: resolveSignalEntity(entities, row),\n });\n }\n }\n\n const activeRows = [...uniqueActive.values()]\n .sort(\n (left, right) =>\n Number(Boolean(right.entity)) - Number(Boolean(left.entity)),\n )\n .slice(0, 5);\n const noiseRows = (signals.noise.monitors ?? []).slice(0, 5).map(row => {\n const workload = row.workloads[0];\n return {\n ...row,\n entity: resolveSignalEntity(entities, {\n workload: workload?.name,\n namespace: workload?.namespace,\n service: row.services[0],\n }),\n };\n });\n\n return {\n activeTotal: signals.active.total,\n byState: signals.active.byState ?? [],\n activeRows,\n noiseCounts: signals.noise.counts,\n noiseRows,\n activeError:\n signals.active.state === 'error' ? signals.active.message : undefined,\n noiseError:\n signals.noise.state === 'error' ? signals.noise.message : undefined,\n };\n}\n\nconst useStyles = makeStyles(theme => ({\n eyebrow: {\n color: COLORS.datadog,\n fontWeight: 700,\n letterSpacing: '0.12em',\n },\n lane: {\n height: '100%',\n borderLeft: '4px solid',\n padding: theme.spacing(0.5, 0, 0.5, 2),\n },\n laneTitle: {\n fontWeight: 700,\n letterSpacing: '-0.02em',\n },\n headline: {\n fontWeight: 700,\n fontVariantNumeric: 'tabular-nums',\n },\n metrics: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n metric: {\n padding: theme.spacing(0.75, 1),\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n fontVariantNumeric: 'tabular-nums',\n },\n row: {\n padding: theme.spacing(1.25, 0),\n },\n rowTitle: {\n fontWeight: 600,\n overflowWrap: 'anywhere',\n },\n partial: {\n marginTop: theme.spacing(2),\n padding: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.action.hover,\n },\n}));\n\nexport const DatadogOperationsRadar = ({\n signals,\n catalogEntities,\n onRefresh,\n refreshing = false,\n error,\n}: {\n signals: DatadogSignals;\n catalogEntities: Entity[];\n onRefresh: () => void;\n refreshing?: boolean;\n error?: string;\n}) => {\n const classes = useStyles();\n const view = globalDatadogViewFrom(signals, catalogEntities);\n\n return (\n <InfoCard\n title=\"Operational pulse\"\n subheader=\"What is burning now and what keeps paging teams\"\n action={\n <Button\n aria-label=\"Refresh Datadog signals\"\n onClick={onRefresh}\n disabled={refreshing}\n size=\"small\"\n >\n {refreshing ? 'Refreshing…' : 'Refresh'}\n </Button>\n }\n >\n <Typography variant=\"overline\" className={classes.eyebrow}>\n Datadog · live graph signal\n </Typography>\n <Box mt={1}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <SignalLane\n title=\"On fire now\"\n color={view.activeError ? COLORS.unavailable : COLORS.firing}\n classes={classes}\n >\n <ActiveLane view={view} classes={classes} />\n </SignalLane>\n </Grid>\n <Grid item xs={12} md={6}>\n <SignalLane\n title=\"Paging noise · 7 days\"\n color={view.noiseError ? COLORS.unavailable : COLORS.noisy}\n classes={classes}\n >\n <NoiseLane view={view} classes={classes} />\n </SignalLane>\n </Grid>\n </Grid>\n </Box>\n {error && (\n <Typography color=\"error\" component=\"p\">\n {error}\n </Typography>\n )}\n {signals.state === 'partial' && (\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n component=\"p\"\n className={classes.partial}\n >\n Some Datadog evidence is temporarily unavailable.\n </Typography>\n )}\n <EvidenceDisclosure data={signals} />\n </InfoCard>\n );\n};\n\nconst SignalLane = ({\n title,\n color,\n classes,\n children,\n}: {\n title: string;\n color: string;\n classes: ReturnType<typeof useStyles>;\n children: React.ReactNode;\n}) => (\n <Box className={classes.lane} style={{ borderLeftColor: color }}>\n <Typography variant=\"h5\" className={classes.laneTitle}>\n {title}\n </Typography>\n {children}\n </Box>\n);\n\nconst ActiveLane = ({\n view,\n classes,\n}: {\n view: GlobalDatadogView;\n classes: ReturnType<typeof useStyles>;\n}) => {\n if (view.activeError) {\n return <Typography color=\"error\">{view.activeError}</Typography>;\n }\n return (\n <>\n <Box mt={1}>\n <Typography variant=\"h4\" className={classes.headline}>\n {formatNumber(view.activeTotal ?? 0)} active monitors\n </Typography>\n <Box className={classes.metrics}>\n {view.byState.map(item => (\n <Chip\n key={item.state}\n size=\"small\"\n variant=\"outlined\"\n label={`${formatNumber(item.count)} ${item.state}`}\n />\n ))}\n </Box>\n </Box>\n <SignalRows\n rows={view.activeRows.map(row => ({\n key: [row.monitor, row.state, row.workload].join('|'),\n title: row.monitor,\n detail: [row.state, row.workload || row.service]\n .filter(Boolean)\n .join(' · '),\n entity: row.entity,\n }))}\n empty=\"No active Datadog monitors.\"\n classes={classes}\n />\n </>\n );\n};\n\nconst NoiseLane = ({\n view,\n classes,\n}: {\n view: GlobalDatadogView;\n classes: ReturnType<typeof useStyles>;\n}) => {\n if (view.noiseError) {\n return <Typography color=\"error\">{view.noiseError}</Typography>;\n }\n const counts = view.noiseCounts ?? {\n totalFires: 0,\n flapping: 0,\n stuck: 0,\n };\n return (\n <>\n <Box mt={1}>\n <Typography variant=\"h4\" className={classes.headline}>\n {formatNumber(counts.totalFires)} fires\n </Typography>\n <Box className={classes.metrics}>\n <Box className={classes.metric}>{counts.flapping} flapping</Box>\n <Box className={classes.metric}>{counts.stuck} stuck</Box>\n </Box>\n </Box>\n <SignalRows\n rows={view.noiseRows.map((row, index) => ({\n key: `${index}:${row.name}`,\n title: row.name,\n detail: `${formatNumber(row.fires)} fires · ${formatNumber(\n row.recovers,\n )} recovers · ${row.noiseKind}`,\n entity: row.entity,\n }))}\n empty=\"No paging noise in this window.\"\n classes={classes}\n />\n </>\n );\n};\n\nconst SignalRows = ({\n rows,\n empty,\n classes,\n}: {\n rows: Array<{ key: string; title: string; detail: string; entity?: Entity }>;\n empty: string;\n classes: ReturnType<typeof useStyles>;\n}) => {\n if (rows.length === 0) {\n return (\n <Box mt={2}>\n <Typography color=\"textSecondary\">{empty}</Typography>\n </Box>\n );\n }\n return (\n <Box mt={2}>\n <Divider />\n {rows.map(row => (\n <Box key={row.key}>\n <Box className={classes.row}>\n <Typography variant=\"subtitle2\" className={classes.rowTitle}>\n {row.title}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" component=\"p\">\n {row.detail}\n </Typography>\n <Typography variant=\"caption\" component=\"p\">\n {row.entity ? (\n <EntityRefLink entityRef={row.entity} />\n ) : (\n 'Not mapped to a catalog service'\n )}\n </Typography>\n </Box>\n <Divider />\n </Box>\n ))}\n </Box>\n );\n};\n\nfunction formatNumber(value: number): string {\n return new Intl.NumberFormat('en-US').format(value);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatadogOperationsRadar.esm.js","sources":["../../../src/components/explorer/DatadogOperationsRadar.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Chip,\n Divider,\n Grid,\n Typography,\n makeStyles,\n} from '@material-ui/core';\nimport { InfoCard } from '@backstage/core-components';\nimport type { Entity } from '@backstage/catalog-model';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport type {\n DatadogSignalAlert,\n DatadogSignals,\n DatadogSignalWorkload,\n} from '../../api/types';\nimport { EvidenceDisclosure } from '../entity/EvidenceDisclosure';\n\nconst COLORS = {\n datadog: '#632ca6',\n firing: '#d63230',\n noisy: '#d97706',\n quiet: '#238636',\n unavailable: '#6b7280',\n};\n\ninterface ActiveSignalRow {\n id: string;\n title: string;\n provider: string;\n severity: string;\n providerStatus: string;\n service: string | null;\n workload: string | null;\n namespace: string | null;\n entity?: Entity;\n}\n\ninterface NoiseSignalRow {\n name: string;\n fires: number;\n recovers: number;\n pctSelfResolved: number;\n noiseKind: 'flapping' | 'stuck';\n services: string[];\n workloads: DatadogSignalWorkload[];\n entity?: Entity;\n}\n\nexport interface GlobalDatadogView {\n activeTotal?: number;\n activeHasMore: boolean;\n byState: Array<{ state: string; count: number }>;\n activeRows: ActiveSignalRow[];\n noiseCounts?: { flapping: number; stuck: number; totalFires: number };\n noiseRows: NoiseSignalRow[];\n activeError?: string;\n noiseError?: string;\n activePartial: boolean;\n activeProviders: NonNullable<DatadogSignals['active']['providers']>;\n activeWarnings: NonNullable<DatadogSignals['active']['warnings']>;\n}\n\nexport function resolveSignalEntity(\n entities: Entity[],\n signal: {\n workload?: string | null;\n namespace?: string | null;\n service?: string | null;\n },\n): Entity | undefined {\n for (const target of [signal.workload, signal.service]) {\n if (!target) continue;\n const matches = entities.filter(entity => {\n const annotated = entity.metadata.annotations?.['anyshift.io/target'];\n const nameMatches =\n annotated === target || entity.metadata.name === target;\n const namespace = entity.metadata.namespace ?? 'default';\n return (\n nameMatches && (!signal.namespace || namespace === signal.namespace)\n );\n });\n if (matches.length === 1) return matches[0];\n const components = matches.filter(entity => entity.kind === 'Component');\n if (components.length === 1) return components[0];\n }\n return undefined;\n}\n\nexport function globalDatadogViewFrom(\n signals: DatadogSignals,\n entities: Entity[],\n): GlobalDatadogView {\n const uniqueActive = new Map<string, ActiveSignalRow>();\n const activeItems = signals.active.items ?? [];\n const activeProviders = signals.active.providers ?? [];\n const activeWarnings = signals.active.warnings ?? [];\n for (const item of activeItems) {\n const row = activeSignalRow(item);\n const key = row.id;\n if (!uniqueActive.has(key)) {\n uniqueActive.set(key, {\n ...row,\n entity: resolveSignalEntity(entities, row),\n });\n }\n }\n\n const activeRows = [...uniqueActive.values()]\n .sort(\n (left, right) =>\n Number(Boolean(right.entity)) - Number(Boolean(left.entity)),\n )\n .slice(0, 5);\n const noiseRows = (signals.noise.monitors ?? []).slice(0, 5).map(row => {\n const workload = row.workloads[0];\n return {\n ...row,\n entity: resolveSignalEntity(entities, {\n workload: workload?.name,\n namespace: workload?.namespace,\n service: row.services[0],\n }),\n };\n });\n\n return {\n activeTotal: activeItems.length,\n activeHasMore: signals.active.page?.hasMore === true,\n byState: activeStateCounts(activeItems),\n activeRows,\n noiseCounts: signals.noise.counts,\n noiseRows,\n activeError:\n signals.active.state === 'error' ? signals.active.message : undefined,\n noiseError:\n signals.noise.state === 'error' ? signals.noise.message : undefined,\n activePartial:\n signals.active.partial === true ||\n activeProviders.some(provider => provider.status !== 'available') ||\n activeWarnings.length > 0,\n activeProviders,\n activeWarnings,\n };\n}\n\nfunction activeSignalRow(item: DatadogSignalAlert): ActiveSignalRow {\n return {\n id: item.id,\n title: item.title,\n provider: item.provider,\n severity: item.severity,\n providerStatus: item.providerStatus,\n service: item.service?.name ?? null,\n workload: item.service?.name ?? null,\n namespace: item.service?.namespace ?? null,\n };\n}\n\nfunction activeStateCounts(\n items: DatadogSignalAlert[],\n): Array<{ state: string; count: number }> {\n const counts = new Map<string, number>();\n for (const item of items) {\n counts.set(item.providerStatus, (counts.get(item.providerStatus) ?? 0) + 1);\n }\n return [...counts].map(([state, count]) => ({ state, count }));\n}\n\nconst useStyles = makeStyles(theme => ({\n eyebrow: {\n color: COLORS.datadog,\n fontWeight: 700,\n letterSpacing: '0.12em',\n },\n lane: {\n height: '100%',\n borderLeft: '4px solid',\n padding: theme.spacing(0.5, 0, 0.5, 2),\n },\n laneTitle: {\n fontWeight: 700,\n letterSpacing: '-0.02em',\n },\n headline: {\n fontWeight: 700,\n fontVariantNumeric: 'tabular-nums',\n },\n metrics: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n metric: {\n padding: theme.spacing(0.75, 1),\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n fontVariantNumeric: 'tabular-nums',\n },\n row: {\n padding: theme.spacing(1.25, 0),\n },\n rowTitle: {\n fontWeight: 600,\n overflowWrap: 'anywhere',\n },\n partial: {\n marginTop: theme.spacing(2),\n padding: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.action.hover,\n },\n}));\n\nexport const DatadogOperationsRadar = ({\n signals,\n catalogEntities,\n onRefresh,\n refreshing = false,\n error,\n}: {\n signals: DatadogSignals;\n catalogEntities: Entity[];\n onRefresh: () => void;\n refreshing?: boolean;\n error?: string;\n}) => {\n const classes = useStyles();\n const view = globalDatadogViewFrom(signals, catalogEntities);\n\n return (\n <InfoCard\n title=\"Operational pulse\"\n subheader=\"What is burning now and what keeps paging teams\"\n action={\n <Button\n aria-label=\"Refresh operational signals\"\n onClick={onRefresh}\n disabled={refreshing}\n size=\"small\"\n >\n {refreshing ? 'Refreshing…' : 'Refresh'}\n </Button>\n }\n >\n <Typography variant=\"overline\" className={classes.eyebrow}>\n Operational alerts · live graph signal\n </Typography>\n <Box mt={1}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <SignalLane\n title=\"On fire now\"\n color={view.activeError ? COLORS.unavailable : COLORS.firing}\n classes={classes}\n >\n <ActiveLane view={view} classes={classes} />\n </SignalLane>\n </Grid>\n <Grid item xs={12} md={6}>\n <SignalLane\n title=\"Paging noise · 7 days\"\n color={view.noiseError ? COLORS.unavailable : COLORS.noisy}\n classes={classes}\n >\n <NoiseLane view={view} classes={classes} />\n </SignalLane>\n </Grid>\n </Grid>\n </Box>\n {error && (\n <Typography color=\"error\" component=\"p\">\n {error}\n </Typography>\n )}\n {(signals.state === 'partial' || view.activePartial) && (\n <AlertCoverage view={view} classes={classes} />\n )}\n <EvidenceDisclosure data={signals} />\n </InfoCard>\n );\n};\n\nconst SignalLane = ({\n title,\n color,\n classes,\n children,\n}: {\n title: string;\n color: string;\n classes: ReturnType<typeof useStyles>;\n children: React.ReactNode;\n}) => (\n <Box className={classes.lane} style={{ borderLeftColor: color }}>\n <Typography variant=\"h5\" className={classes.laneTitle}>\n {title}\n </Typography>\n {children}\n </Box>\n);\n\nconst ActiveLane = ({\n view,\n classes,\n}: {\n view: GlobalDatadogView;\n classes: ReturnType<typeof useStyles>;\n}) => {\n if (view.activeError) {\n return <Typography color=\"error\">{view.activeError}</Typography>;\n }\n const activeTotal = view.activeTotal ?? 0;\n return (\n <>\n <Box mt={1}>\n <Typography variant=\"h4\" className={classes.headline}>\n {view.activeHasMore ? 'At least ' : ''}\n {formatNumber(activeTotal)} active{' '}\n {activeTotal === 1 ? 'alert' : 'alerts'}\n </Typography>\n <Box className={classes.metrics}>\n {view.byState.map(item => (\n <Chip\n key={item.state}\n size=\"small\"\n variant=\"outlined\"\n label={`${formatNumber(item.count)} ${item.state}${\n view.activeHasMore ? ' (loaded page)' : ''\n }`}\n />\n ))}\n </Box>\n {view.activeHasMore && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n Provider state counts reflect the loaded page only.\n </Typography>\n )}\n </Box>\n <SignalRows\n rows={view.activeRows.map(row => ({\n key: row.id,\n title: row.title,\n detail: [\n row.provider,\n row.severity,\n row.providerStatus,\n row.workload || row.service,\n ]\n .filter(Boolean)\n .join(' · '),\n entity: row.entity,\n }))}\n empty=\"No active alerts.\"\n classes={classes}\n />\n </>\n );\n};\n\nconst AlertCoverage = ({\n view,\n classes,\n}: {\n view: GlobalDatadogView;\n classes: ReturnType<typeof useStyles>;\n}) => (\n <Box className={classes.partial}>\n <Typography variant=\"caption\" color=\"textSecondary\" component=\"p\">\n Some operational alert evidence is temporarily unavailable.\n </Typography>\n {view.activeProviders\n .filter(provider => provider.status !== 'available')\n .map(provider => (\n <Typography\n key={provider.provider}\n variant=\"caption\"\n color=\"textSecondary\"\n component=\"p\"\n >\n Alert coverage: {readableProvider(provider.provider)}{' '}\n {provider.status}.\n </Typography>\n ))}\n {view.activeWarnings.map(warning => (\n <Typography\n key={`${warning.provider ?? 'alert'}:${warning.code}`}\n variant=\"caption\"\n color=\"textSecondary\"\n component=\"p\"\n >\n Alert warning: {warning.message}\n {warning.message.endsWith('.') ? '' : '.'}\n </Typography>\n ))}\n </Box>\n);\n\nfunction readableProvider(provider: string): string {\n return provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n\nconst NoiseLane = ({\n view,\n classes,\n}: {\n view: GlobalDatadogView;\n classes: ReturnType<typeof useStyles>;\n}) => {\n if (view.noiseError) {\n return <Typography color=\"error\">{view.noiseError}</Typography>;\n }\n const counts = view.noiseCounts ?? {\n totalFires: 0,\n flapping: 0,\n stuck: 0,\n };\n return (\n <>\n <Box mt={1}>\n <Typography variant=\"h4\" className={classes.headline}>\n {formatNumber(counts.totalFires)} fires\n </Typography>\n <Box className={classes.metrics}>\n <Box className={classes.metric}>{counts.flapping} flapping</Box>\n <Box className={classes.metric}>{counts.stuck} stuck</Box>\n </Box>\n </Box>\n <SignalRows\n rows={view.noiseRows.map((row, index) => ({\n key: `${index}:${row.name}`,\n title: row.name,\n detail: `${formatNumber(row.fires)} fires · ${formatNumber(\n row.recovers,\n )} recovers · ${row.noiseKind}`,\n entity: row.entity,\n }))}\n empty=\"No paging noise in this window.\"\n classes={classes}\n />\n </>\n );\n};\n\nconst SignalRows = ({\n rows,\n empty,\n classes,\n}: {\n rows: Array<{ key: string; title: string; detail: string; entity?: Entity }>;\n empty: string;\n classes: ReturnType<typeof useStyles>;\n}) => {\n if (rows.length === 0) {\n return (\n <Box mt={2}>\n <Typography color=\"textSecondary\">{empty}</Typography>\n </Box>\n );\n }\n return (\n <Box mt={2}>\n <Divider />\n {rows.map(row => (\n <Box key={row.key}>\n <Box className={classes.row}>\n <Typography variant=\"subtitle2\" className={classes.rowTitle}>\n {row.title}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" component=\"p\">\n {row.detail}\n </Typography>\n <Typography variant=\"caption\" component=\"p\">\n {row.entity ? (\n <EntityRefLink entityRef={row.entity} />\n ) : (\n 'Not mapped to a catalog service'\n )}\n </Typography>\n </Box>\n <Divider />\n </Box>\n ))}\n </Box>\n );\n};\n\nfunction formatNumber(value: number): string {\n return new Intl.NumberFormat('en-US').format(value);\n}\n"],"names":[],"mappings":"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"}
|
package/dist/package.json.esm.js
CHANGED
package/package.json
CHANGED