@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.
@@ -27,14 +27,12 @@ function resolveSignalEntity(entities, signal) {
27
27
  }
28
28
  function globalDatadogViewFrom(signals, entities) {
29
29
  const uniqueActive = /* @__PURE__ */ new Map();
30
- for (const row of signals.active.firing ?? []) {
31
- const key = [
32
- row.monitor,
33
- row.state,
34
- row.service,
35
- row.workload,
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: signals.active.total,
61
- byState: signals.active.byState ?? [],
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 Datadog signals",
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: "Datadog \xB7 live graph signal" }),
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
- formatNumber(view.activeTotal ?? 0),
196
- " active monitors"
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: [row.monitor, row.state, row.workload].join("|"),
213
- title: row.monitor,
214
- detail: [row.state, row.workload || row.service].filter(Boolean).join(" \xB7 "),
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 Datadog monitors.",
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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"}
@@ -1,5 +1,5 @@
1
1
  var name = "@anyshift/backstage-plugin-anyshift";
2
- var version = "0.1.0-beta.17";
2
+ var version = "0.1.0-beta.18";
3
3
  var description = "Read-only Anyshift infrastructure context for Backstage";
4
4
  var main = "src/index.ts";
5
5
  var types = "src/index.ts";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anyshift/backstage-plugin-anyshift",
3
- "version": "0.1.0-beta.17",
3
+ "version": "0.1.0-beta.18",
4
4
  "description": "Read-only Anyshift infrastructure context for Backstage",
5
5
  "main": "dist/index.esm.js",
6
6
  "types": "dist/index.d.ts",