@anyshift/backstage-plugin-anyshift 0.1.0-beta.20 → 0.1.0-beta.21

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.
Files changed (49) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +3 -11
  3. package/dist/api/AnyshiftApi.esm.js +5 -56
  4. package/dist/api/AnyshiftApi.esm.js.map +1 -1
  5. package/dist/components/cloud/CloudResourceContent.esm.js +45 -444
  6. package/dist/components/cloud/CloudResourceContent.esm.js.map +1 -1
  7. package/dist/components/entity/AnyshiftEntityContent.esm.js +23 -128
  8. package/dist/components/entity/AnyshiftEntityContent.esm.js.map +1 -1
  9. package/dist/components/entity/BriefSections.esm.js +4 -24
  10. package/dist/components/entity/BriefSections.esm.js.map +1 -1
  11. package/dist/components/entity/DatadogLiveSignal.esm.js +23 -85
  12. package/dist/components/entity/DatadogLiveSignal.esm.js.map +1 -1
  13. package/dist/components/entity/MermaidArchitecture.esm.js +43 -202
  14. package/dist/components/entity/MermaidArchitecture.esm.js.map +1 -1
  15. package/dist/components/entity/SectionPresenters.esm.js +82 -145
  16. package/dist/components/entity/SectionPresenters.esm.js.map +1 -1
  17. package/dist/components/entity/architectureDiagram.esm.js +15 -48
  18. package/dist/components/entity/architectureDiagram.esm.js.map +1 -1
  19. package/dist/components/explorer/AnyshiftExplorerPage.esm.js +19 -154
  20. package/dist/components/explorer/AnyshiftExplorerPage.esm.js.map +1 -1
  21. package/dist/components/explorer/DatadogOperationsRadar.esm.js +31 -92
  22. package/dist/components/explorer/DatadogOperationsRadar.esm.js.map +1 -1
  23. package/dist/index.d.ts +4 -18
  24. package/dist/index.esm.js +1 -1
  25. package/dist/package.json.esm.js +13 -13
  26. package/dist/plugin.esm.js +2 -6
  27. package/dist/plugin.esm.js.map +1 -1
  28. package/package.json +15 -15
  29. package/CHANGELOG.md +0 -87
  30. package/dist/components/ask/AskAnyshiftCard.esm.js +0 -348
  31. package/dist/components/ask/AskAnyshiftCard.esm.js.map +0 -1
  32. package/dist/components/ask/askPresenters.esm.js +0 -1203
  33. package/dist/components/ask/askPresenters.esm.js.map +0 -1
  34. package/dist/components/ask/askScope.esm.js +0 -27
  35. package/dist/components/ask/askScope.esm.js.map +0 -1
  36. package/dist/components/ask/askSuggestions.esm.js +0 -41
  37. package/dist/components/ask/askSuggestions.esm.js.map +0 -1
  38. package/dist/components/cloud/CloudImpactSection.esm.js +0 -54
  39. package/dist/components/cloud/CloudImpactSection.esm.js.map +0 -1
  40. package/dist/components/cloud/CloudRelationshipSections.esm.js +0 -43
  41. package/dist/components/cloud/CloudRelationshipSections.esm.js.map +0 -1
  42. package/dist/components/entity/ArchitectureOperationDetails.esm.js +0 -107
  43. package/dist/components/entity/ArchitectureOperationDetails.esm.js.map +0 -1
  44. package/dist/components/entity/architectureGraph.esm.js +0 -145
  45. package/dist/components/entity/architectureGraph.esm.js.map +0 -1
  46. package/dist/components/entity/entityIdentity.esm.js +0 -40
  47. package/dist/components/entity/entityIdentity.esm.js.map +0 -1
  48. package/dist/components/entity/relatedCatalogEntities.esm.js +0 -60
  49. package/dist/components/entity/relatedCatalogEntities.esm.js.map +0 -1
@@ -27,12 +27,14 @@ function resolveSignalEntity(entities, signal) {
27
27
  }
28
28
  function globalDatadogViewFrom(signals, entities) {
29
29
  const uniqueActive = /* @__PURE__ */ new Map();
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;
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();
36
38
  if (!uniqueActive.has(key)) {
37
39
  uniqueActive.set(key, {
38
40
  ...row,
@@ -55,38 +57,15 @@ function globalDatadogViewFrom(signals, entities) {
55
57
  };
56
58
  });
57
59
  return {
58
- activeTotal: activeItems.length,
59
- activeHasMore: signals.active.page?.hasMore === true,
60
- byState: activeStateCounts(activeItems),
60
+ activeTotal: signals.active.total,
61
+ byState: signals.active.byState ?? [],
61
62
  activeRows,
62
63
  noiseCounts: signals.noise.counts,
63
64
  noiseRows,
64
65
  activeError: signals.active.state === "error" ? signals.active.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
66
+ noiseError: signals.noise.state === "error" ? signals.noise.message : void 0
69
67
  };
70
68
  }
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
- }
90
69
  const useStyles = makeStyles((theme) => ({
91
70
  eyebrow: {
92
71
  color: COLORS.datadog,
@@ -149,7 +128,7 @@ const DatadogOperationsRadar = ({
149
128
  action: /* @__PURE__ */ jsx(
150
129
  Button,
151
130
  {
152
- "aria-label": "Refresh operational signals",
131
+ "aria-label": "Refresh Datadog signals",
153
132
  onClick: onRefresh,
154
133
  disabled: refreshing,
155
134
  size: "small",
@@ -157,7 +136,7 @@ const DatadogOperationsRadar = ({
157
136
  }
158
137
  ),
159
138
  children: [
160
- /* @__PURE__ */ jsx(Typography, { variant: "overline", className: classes.eyebrow, children: "Operational alerts \xB7 live graph signal" }),
139
+ /* @__PURE__ */ jsx(Typography, { variant: "overline", className: classes.eyebrow, children: "Datadog \xB7 live graph signal" }),
161
140
  /* @__PURE__ */ jsx(Box, { mt: 1, children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
162
141
  /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 6, children: /* @__PURE__ */ jsx(
163
142
  SignalLane,
@@ -179,7 +158,16 @@ const DatadogOperationsRadar = ({
179
158
  ) })
180
159
  ] }) }),
181
160
  error && /* @__PURE__ */ jsx(Typography, { color: "error", component: "p", children: error }),
182
- (signals.state === "partial" || view.activePartial) && /* @__PURE__ */ jsx(AlertCoverage, { view, classes }),
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
+ ),
183
171
  /* @__PURE__ */ jsx(EvidenceDisclosure, { data: signals })
184
172
  ]
185
173
  }
@@ -201,86 +189,37 @@ const ActiveLane = ({
201
189
  if (view.activeError) {
202
190
  return /* @__PURE__ */ jsx(Typography, { color: "error", children: view.activeError });
203
191
  }
204
- const activeTotal = view.activeTotal ?? 0;
205
192
  return /* @__PURE__ */ jsxs(Fragment, { children: [
206
193
  /* @__PURE__ */ jsxs(Box, { mt: 1, children: [
207
194
  /* @__PURE__ */ jsxs(Typography, { variant: "h4", className: classes.headline, children: [
208
- view.activeHasMore ? "At least " : "",
209
- formatNumber(activeTotal),
210
- " active",
211
- " ",
212
- activeTotal === 1 ? "alert" : "alerts"
195
+ formatNumber(view.activeTotal ?? 0),
196
+ " active monitors"
213
197
  ] }),
214
198
  /* @__PURE__ */ jsx(Box, { className: classes.metrics, children: view.byState.map((item) => /* @__PURE__ */ jsx(
215
199
  Chip,
216
200
  {
217
201
  size: "small",
218
202
  variant: "outlined",
219
- label: `${formatNumber(item.count)} ${item.state}${view.activeHasMore ? " (loaded page)" : ""}`
203
+ label: `${formatNumber(item.count)} ${item.state}`
220
204
  },
221
205
  item.state
222
- )) }),
223
- view.activeHasMore && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: "Provider state counts reflect the loaded page only." })
206
+ )) })
224
207
  ] }),
225
208
  /* @__PURE__ */ jsx(
226
209
  SignalRows,
227
210
  {
228
211
  rows: view.activeRows.map((row) => ({
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 "),
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 "),
237
215
  entity: row.entity
238
216
  })),
239
- empty: "No active alerts.",
217
+ empty: "No active Datadog monitors.",
240
218
  classes
241
219
  }
242
220
  )
243
221
  ] });
244
222
  };
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
- }
284
223
  const NoiseLane = ({
285
224
  view,
286
225
  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 {\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
+ {"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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"}
package/dist/index.d.ts CHANGED
@@ -1,22 +1,18 @@
1
1
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
2
2
  import { FrontendPlugin } from '@backstage/frontend-plugin-api';
3
- import { AskAnyshiftRequest, AskAnyshiftResponse, AnyshiftCapabilities, ServiceBrief, BriefSectionName, BriefSectionResponse, EstateInsights, DatadogSignals, CloudResourceBrief, CatalogSummary, QueryResult, CatalogSyncReport } from '@anyshift/backstage-plugin-anyshift-common';
4
- export { ANYSHIFT_CLOUD_ACCOUNT_ANNOTATION, ANYSHIFT_CLOUD_PROVIDER_ANNOTATION, ANYSHIFT_CLOUD_REGION_ANNOTATION, ANYSHIFT_CLOUD_RESOURCE_ARN_ANNOTATION, ANYSHIFT_CONFIGURATION_DEPENDENCIES_ANNOTATION, ANYSHIFT_CONFIGURATION_ENDPOINTS_ANNOTATION, ANYSHIFT_KIND_ANNOTATION, ANYSHIFT_OBSERVED_SERVICE_ANNOTATION, ANYSHIFT_RESOURCE_ID_ANNOTATION, ANYSHIFT_RESOURCE_TYPE_ANNOTATION, ANYSHIFT_RUNTIME_RESOURCE_ID_ANNOTATION, ANYSHIFT_TARGET_ANNOTATION, BriefSection, CatalogSummary, CloudEventEvidenceItem, CloudEventsEvidence, CloudResourceBrief, EntityImpact, EstateInsights, EvidenceCoverage, GITHUB_PROJECT_SLUG_ANNOTATION, IacDriftEvidence, IacEvidence, ImpactResult, QueryResult, ServiceBrief, WhyNowAssessment, anyshiftQueryPermission, anyshiftViewPermission } from '@anyshift/backstage-plugin-anyshift-common';
3
+ import { AnyshiftCapabilities, ServiceBrief, BriefSectionName, BriefSectionResponse, EstateInsights, DatadogSignals, CatalogSummary, QueryResult, CatalogSyncReport } from '@anyshift/backstage-plugin-anyshift-common';
4
+ export { ANYSHIFT_CLOUD_ACCOUNT_ANNOTATION, ANYSHIFT_CLOUD_PROVIDER_ANNOTATION, ANYSHIFT_CLOUD_REGION_ANNOTATION, ANYSHIFT_CLOUD_RESOURCE_ARN_ANNOTATION, ANYSHIFT_KIND_ANNOTATION, ANYSHIFT_OBSERVED_SERVICE_ANNOTATION, ANYSHIFT_RESOURCE_ID_ANNOTATION, ANYSHIFT_RESOURCE_TYPE_ANNOTATION, ANYSHIFT_TARGET_ANNOTATION, BriefSection, CatalogSummary, EstateInsights, GITHUB_PROJECT_SLUG_ANNOTATION, QueryResult, ServiceBrief, anyshiftQueryPermission, anyshiftViewPermission } from '@anyshift/backstage-plugin-anyshift-common';
5
5
 
6
6
  declare const anyshiftPlugin: FrontendPlugin;
7
7
 
8
8
  interface AnyshiftApi {
9
- ask(request: AskAnyshiftRequest): Promise<AskAnyshiftResponse>;
10
9
  capabilities(): Promise<AnyshiftCapabilities>;
11
10
  brief(kind: string, target: string, options?: BriefRequestOptions): Promise<ServiceBrief>;
12
11
  briefSection(kind: string, target: string, section: BriefSectionName, options?: BriefRequestOptions): Promise<BriefSectionResponse>;
13
- insights(options?: {
14
- refresh?: boolean;
15
- }): Promise<EstateInsights>;
12
+ insights(): Promise<EstateInsights>;
16
13
  datadogSignals(options?: {
17
14
  refresh?: boolean;
18
15
  }): Promise<DatadogSignals>;
19
- cloudResourceBrief(resource: string, options?: CloudResourceBriefRequestOptions): Promise<CloudResourceBrief>;
20
16
  inventory(type: string, options?: {
21
17
  limit?: number;
22
18
  offset?: number;
@@ -27,16 +23,6 @@ interface AnyshiftApi {
27
23
  interface BriefRequestOptions {
28
24
  namespace?: string;
29
25
  refresh?: boolean;
30
- configurationEndpoints?: string;
31
- configurationDependencies?: string;
32
- configurationTarget?: string;
33
- }
34
- interface CloudResourceBriefRequestOptions {
35
- fallbackResource?: string;
36
- since?: string;
37
- cursor?: string;
38
- diff?: boolean;
39
- refresh?: boolean;
40
26
  }
41
27
  interface CatalogSyncAccepted {
42
28
  accepted: true;
@@ -48,4 +34,4 @@ declare const anyshiftApiRef: _backstage_frontend_plugin_api.ApiRef<AnyshiftApi>
48
34
  };
49
35
 
50
36
  export { anyshiftApiRef, anyshiftPlugin, anyshiftPlugin as default };
51
- export type { AnyshiftApi, CloudResourceBriefRequestOptions };
37
+ export type { AnyshiftApi };
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { anyshiftPlugin, anyshiftPlugin as default } from './plugin.esm.js';
2
2
  export { anyshiftApiRef } from './api/AnyshiftApi.esm.js';
3
- export { ANYSHIFT_CLOUD_ACCOUNT_ANNOTATION, ANYSHIFT_CLOUD_PROVIDER_ANNOTATION, ANYSHIFT_CLOUD_REGION_ANNOTATION, ANYSHIFT_CLOUD_RESOURCE_ARN_ANNOTATION, ANYSHIFT_CONFIGURATION_DEPENDENCIES_ANNOTATION, ANYSHIFT_CONFIGURATION_ENDPOINTS_ANNOTATION, ANYSHIFT_KIND_ANNOTATION, ANYSHIFT_OBSERVED_SERVICE_ANNOTATION, ANYSHIFT_RESOURCE_ID_ANNOTATION, ANYSHIFT_RESOURCE_TYPE_ANNOTATION, ANYSHIFT_RUNTIME_RESOURCE_ID_ANNOTATION, ANYSHIFT_TARGET_ANNOTATION, GITHUB_PROJECT_SLUG_ANNOTATION, anyshiftQueryPermission, anyshiftViewPermission } from '@anyshift/backstage-plugin-anyshift-common';
3
+ export { ANYSHIFT_CLOUD_ACCOUNT_ANNOTATION, ANYSHIFT_CLOUD_PROVIDER_ANNOTATION, ANYSHIFT_CLOUD_REGION_ANNOTATION, ANYSHIFT_CLOUD_RESOURCE_ARN_ANNOTATION, ANYSHIFT_KIND_ANNOTATION, ANYSHIFT_OBSERVED_SERVICE_ANNOTATION, ANYSHIFT_RESOURCE_ID_ANNOTATION, ANYSHIFT_RESOURCE_TYPE_ANNOTATION, ANYSHIFT_TARGET_ANNOTATION, GITHUB_PROJECT_SLUG_ANNOTATION, anyshiftQueryPermission, anyshiftViewPermission } from '@anyshift/backstage-plugin-anyshift-common';
4
4
  //# sourceMappingURL=index.esm.js.map
@@ -1,15 +1,15 @@
1
1
  var name = "@anyshift/backstage-plugin-anyshift";
2
- var version = "0.1.0-beta.20";
2
+ var version = "0.1.0-beta.21";
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";
6
6
  var license = "Apache-2.0";
7
7
  var repository = {
8
8
  type: "git",
9
- url: "https://github.com/anyshift-io/graph-api",
10
- directory: "integrations/backstage/plugins/anyshift"
9
+ url: "https://github.com/anyshift-io/backstage-plugins",
10
+ directory: "plugins/anyshift"
11
11
  };
12
- var homepage = "https://github.com/anyshift-io/graph-api/tree/main/integrations/backstage#readme";
12
+ var homepage = "https://github.com/anyshift-io/backstage-plugins#readme";
13
13
  var keywords = [
14
14
  "backstage",
15
15
  "anyshift",
@@ -46,27 +46,27 @@ var scripts = {
46
46
  var dependencies = {
47
47
  "@anyshift/backstage-plugin-anyshift-common": "workspace:^",
48
48
  "@backstage/catalog-model": "^1.9.0",
49
- "@backstage/core-components": "^0.18.12",
50
- "@backstage/frontend-plugin-api": "^0.17.3",
51
- "@backstage/plugin-catalog-react": "^3.2.0",
52
- "@backstage/plugin-permission-react": "^0.5.3",
49
+ "@backstage/core-components": "^0.18.11",
50
+ "@backstage/frontend-plugin-api": "^0.17.2",
51
+ "@backstage/plugin-catalog-react": "^3.1.0",
52
+ "@backstage/plugin-permission-react": "^0.5.2",
53
53
  "@backstage/theme": "^0.7.3",
54
54
  "@material-ui/core": "^4.12.2",
55
55
  "@material-ui/icons": "^4.9.1",
56
56
  "@material-ui/lab": "^4.0.0-alpha.61",
57
- mermaid: "^11.16.1"
57
+ mermaid: "^11.15.0"
58
58
  };
59
59
  var peerDependencies = {
60
60
  react: "^16.13.1 || ^17.0.0 || ^18.0.0",
61
61
  "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
62
- "react-router-dom": "^6.0.0 || ^7.0.0"
62
+ "react-router-dom": "^6.0.0"
63
63
  };
64
64
  var devDependencies = {
65
- "@backstage/cli": "^0.36.4",
66
- "@backstage/test-utils": "^1.7.20",
65
+ "@backstage/cli": "^0.36.3",
66
+ "@backstage/test-utils": "^1.7.12",
67
67
  "@testing-library/jest-dom": "^6.0.0",
68
68
  "@testing-library/react": "^14.0.0",
69
- "@testing-library/user-event": "^14.6.4",
69
+ "@testing-library/user-event": "^14.0.0",
70
70
  msw: "^1.0.0"
71
71
  };
72
72
  var files = [
@@ -3,8 +3,7 @@ import DeviceHubIcon from '@material-ui/icons/DeviceHub';
3
3
  import CloudQueueIcon from '@material-ui/icons/CloudQueue';
4
4
  import { ApiBlueprint, fetchApiRef, discoveryApiRef, PageBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
5
5
  import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
6
- import { anyshiftViewPermission, ANYSHIFT_TARGET_ANNOTATION, GITHUB_PROJECT_SLUG_ANNOTATION, ANYSHIFT_KIND_ANNOTATION, isAnyshiftResourceKind, ANYSHIFT_MANAGED_BY_ANNOTATION } from '@anyshift/backstage-plugin-anyshift-common';
7
- import { isCloudResourceEntity, cloudResourceIdentity } from './components/entity/entityIdentity.esm.js';
6
+ import { anyshiftViewPermission, ANYSHIFT_TARGET_ANNOTATION, GITHUB_PROJECT_SLUG_ANNOTATION, ANYSHIFT_KIND_ANNOTATION, isAnyshiftResourceKind, ANYSHIFT_MANAGED_BY_ANNOTATION, ANYSHIFT_CLOUD_PROVIDER_ANNOTATION } from '@anyshift/backstage-plugin-anyshift-common';
8
7
  import { AnyshiftPermissionBoundary } from './components/AnyshiftPermissionBoundary.esm.js';
9
8
  import { AnyshiftClient, anyshiftApiRef } from './api/AnyshiftApi.esm.js';
10
9
  import { rootRouteRef, cloudRouteRef } from './routes.esm.js';
@@ -58,9 +57,6 @@ const cloudEntityContent = EntityContentBlueprint.make({
58
57
  }
59
58
  });
60
59
  function isAnyshiftEntityContentAvailable(entity) {
61
- if (isCloudResourceEntity(entity)) {
62
- return Boolean(cloudResourceIdentity(entity));
63
- }
64
60
  const annotations = entity.metadata.annotations ?? {};
65
61
  const hasTarget = Boolean(
66
62
  annotations[ANYSHIFT_TARGET_ANNOTATION] || annotations[GITHUB_PROJECT_SLUG_ANNOTATION]
@@ -71,7 +67,7 @@ function isAnyshiftEntityContentAvailable(entity) {
71
67
  return annotations[ANYSHIFT_MANAGED_BY_ANNOTATION] !== "catalog-provider";
72
68
  }
73
69
  function isCloudResourceContentAvailable(entity) {
74
- return isCloudResourceEntity(entity) && Boolean(cloudResourceIdentity(entity));
70
+ return entity.kind.toLocaleLowerCase("en-US") === "resource" && Boolean(entity.metadata.annotations?.[ANYSHIFT_CLOUD_PROVIDER_ANNOTATION]);
75
71
  }
76
72
  const anyshiftPlugin = createFrontendPlugin({
77
73
  pluginId: "anyshift",
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.tsx"],"sourcesContent":["import DeviceHubIcon from '@material-ui/icons/DeviceHub';\nimport CloudQueueIcon from '@material-ui/icons/CloudQueue';\nimport {\n ApiBlueprint,\n PageBlueprint,\n createFrontendPlugin,\n discoveryApiRef,\n fetchApiRef,\n type FrontendPlugin,\n} from '@backstage/frontend-plugin-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport type { Entity } from '@backstage/catalog-model';\nimport {\n ANYSHIFT_KIND_ANNOTATION,\n ANYSHIFT_MANAGED_BY_ANNOTATION,\n ANYSHIFT_TARGET_ANNOTATION,\n GITHUB_PROJECT_SLUG_ANNOTATION,\n anyshiftViewPermission,\n isAnyshiftResourceKind,\n} from '@anyshift/backstage-plugin-anyshift-common';\nimport {\n cloudResourceIdentity,\n isCloudResourceEntity,\n} from './components/entity/entityIdentity';\nimport { AnyshiftPermissionBoundary } from './components/AnyshiftPermissionBoundary';\nimport { anyshiftApiRef, AnyshiftClient } from './api/AnyshiftApi';\nimport { cloudRouteRef, rootRouteRef } from './routes';\n\nconst anyshiftApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: anyshiftApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new AnyshiftClient({ discoveryApi, fetchApi }),\n }),\n});\n\nconst anyshiftPage = PageBlueprint.make({\n params: {\n path: '/anyshift',\n title: 'Anyshift',\n icon: <DeviceHubIcon fontSize=\"inherit\" />,\n routeRef: rootRouteRef,\n noHeader: true,\n loader: () =>\n import('./components/explorer/AnyshiftExplorerPage').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.AnyshiftExplorerPage />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nconst cloudPage = PageBlueprint.make({\n name: 'cloud',\n params: {\n path: '/cloud',\n title: 'Cloud',\n icon: <CloudQueueIcon fontSize=\"inherit\" />,\n routeRef: cloudRouteRef,\n noHeader: true,\n loader: () =>\n import('./components/cloud/CloudPage').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.CloudPage />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nconst anyshiftEntityContent = EntityContentBlueprint.make({\n name: 'entity-content',\n params: {\n path: '/anyshift',\n title: 'Anyshift',\n group: 'observability',\n filter: isAnyshiftEntityContentAvailable,\n loader: () =>\n import('./components/entity/AnyshiftEntityContent').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.AnyshiftEntityContent />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nconst cloudEntityContent = EntityContentBlueprint.make({\n name: 'cloud-resource-content',\n params: {\n path: '/cloud',\n title: 'Cloud',\n group: 'observability',\n filter: isCloudResourceContentAvailable,\n loader: () =>\n import('./components/cloud/CloudResourceContent').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.CloudResourceContent />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nexport function isAnyshiftEntityContentAvailable(entity: Entity): boolean {\n if (isCloudResourceEntity(entity)) {\n return Boolean(cloudResourceIdentity(entity));\n }\n\n const annotations = entity.metadata.annotations ?? {};\n const hasTarget = Boolean(\n annotations[ANYSHIFT_TARGET_ANNOTATION] ||\n annotations[GITHUB_PROJECT_SLUG_ANNOTATION],\n );\n if (!hasTarget) return false;\n\n const kind = annotations[ANYSHIFT_KIND_ANNOTATION];\n if (kind) return isAnyshiftResourceKind(kind);\n\n return annotations[ANYSHIFT_MANAGED_BY_ANNOTATION] !== 'catalog-provider';\n}\n\nexport function isCloudResourceContentAvailable(entity: Entity): boolean {\n return (\n isCloudResourceEntity(entity) && Boolean(cloudResourceIdentity(entity))\n );\n}\n\nexport const anyshiftPlugin: FrontendPlugin = createFrontendPlugin({\n pluginId: 'anyshift',\n info: {\n packageJson: () => import('../package.json'),\n },\n routes: { root: rootRouteRef, cloud: cloudRouteRef },\n extensions: [\n anyshiftApi,\n anyshiftPage,\n cloudPage,\n anyshiftEntityContent,\n cloudEntityContent,\n ],\n});\n\nexport default anyshiftPlugin;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.tsx"],"sourcesContent":["import DeviceHubIcon from '@material-ui/icons/DeviceHub';\nimport CloudQueueIcon from '@material-ui/icons/CloudQueue';\nimport {\n ApiBlueprint,\n PageBlueprint,\n createFrontendPlugin,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/frontend-plugin-api';\nimport type { FrontendPlugin } from '@backstage/frontend-plugin-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport type { Entity } from '@backstage/catalog-model';\nimport {\n ANYSHIFT_KIND_ANNOTATION,\n ANYSHIFT_CLOUD_PROVIDER_ANNOTATION,\n ANYSHIFT_MANAGED_BY_ANNOTATION,\n ANYSHIFT_TARGET_ANNOTATION,\n GITHUB_PROJECT_SLUG_ANNOTATION,\n anyshiftViewPermission,\n isAnyshiftResourceKind,\n} from '@anyshift/backstage-plugin-anyshift-common';\nimport { AnyshiftPermissionBoundary } from './components/AnyshiftPermissionBoundary';\nimport { anyshiftApiRef, AnyshiftClient } from './api/AnyshiftApi';\nimport { cloudRouteRef, rootRouteRef } from './routes';\n\nconst anyshiftApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: anyshiftApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new AnyshiftClient({ discoveryApi, fetchApi }),\n }),\n});\n\nconst anyshiftPage = PageBlueprint.make({\n params: {\n path: '/anyshift',\n title: 'Anyshift',\n icon: <DeviceHubIcon fontSize=\"inherit\" />,\n routeRef: rootRouteRef,\n noHeader: true,\n loader: () =>\n import('./components/explorer/AnyshiftExplorerPage').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.AnyshiftExplorerPage />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nconst cloudPage = PageBlueprint.make({\n name: 'cloud',\n params: {\n path: '/cloud',\n title: 'Cloud',\n icon: <CloudQueueIcon fontSize=\"inherit\" />,\n routeRef: cloudRouteRef,\n noHeader: true,\n loader: () =>\n import('./components/cloud/CloudPage').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.CloudPage />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nconst anyshiftEntityContent = EntityContentBlueprint.make({\n name: 'entity-content',\n params: {\n path: '/anyshift',\n title: 'Anyshift',\n group: 'observability',\n filter: isAnyshiftEntityContentAvailable,\n loader: () =>\n import('./components/entity/AnyshiftEntityContent').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.AnyshiftEntityContent />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nconst cloudEntityContent = EntityContentBlueprint.make({\n name: 'cloud-resource-content',\n params: {\n path: '/cloud',\n title: 'Cloud',\n group: 'observability',\n filter: isCloudResourceContentAvailable,\n loader: () =>\n import('./components/cloud/CloudResourceContent').then(module => (\n <AnyshiftPermissionBoundary permission={anyshiftViewPermission}>\n <module.CloudResourceContent />\n </AnyshiftPermissionBoundary>\n )),\n },\n});\n\nexport function isAnyshiftEntityContentAvailable(entity: Entity): boolean {\n const annotations = entity.metadata.annotations ?? {};\n const hasTarget = Boolean(\n annotations[ANYSHIFT_TARGET_ANNOTATION] ||\n annotations[GITHUB_PROJECT_SLUG_ANNOTATION],\n );\n if (!hasTarget) return false;\n\n const kind = annotations[ANYSHIFT_KIND_ANNOTATION];\n if (kind) return isAnyshiftResourceKind(kind);\n\n return annotations[ANYSHIFT_MANAGED_BY_ANNOTATION] !== 'catalog-provider';\n}\n\nexport function isCloudResourceContentAvailable(entity: Entity): boolean {\n return (\n entity.kind.toLocaleLowerCase('en-US') === 'resource' &&\n Boolean(entity.metadata.annotations?.[ANYSHIFT_CLOUD_PROVIDER_ANNOTATION])\n );\n}\n\nexport const anyshiftPlugin: FrontendPlugin = createFrontendPlugin({\n pluginId: 'anyshift',\n info: {\n packageJson: () => import('../package.json'),\n },\n routes: { root: rootRouteRef, cloud: cloudRouteRef },\n extensions: [\n anyshiftApi,\n anyshiftPage,\n cloudPage,\n anyshiftEntityContent,\n cloudEntityContent,\n ],\n});\n\nexport default anyshiftPlugin;\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@anyshift/backstage-plugin-anyshift",
3
- "version": "0.1.0-beta.20",
3
+ "version": "0.1.0-beta.21",
4
4
  "description": "Read-only Anyshift infrastructure context for Backstage",
5
5
  "main": "dist/index.esm.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "Apache-2.0",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/anyshift-io/graph-api",
11
- "directory": "integrations/backstage/plugins/anyshift"
10
+ "url": "https://github.com/anyshift-io/backstage-plugins",
11
+ "directory": "plugins/anyshift"
12
12
  },
13
- "homepage": "https://github.com/anyshift-io/graph-api/tree/main/integrations/backstage#readme",
13
+ "homepage": "https://github.com/anyshift-io/backstage-plugins#readme",
14
14
  "keywords": [
15
15
  "backstage",
16
16
  "anyshift",
@@ -45,29 +45,29 @@
45
45
  "clean": "backstage-cli package clean"
46
46
  },
47
47
  "dependencies": {
48
- "@anyshift/backstage-plugin-anyshift-common": "^0.1.0-beta.14",
48
+ "@anyshift/backstage-plugin-anyshift-common": "workspace:^",
49
49
  "@backstage/catalog-model": "^1.9.0",
50
- "@backstage/core-components": "^0.18.12",
51
- "@backstage/frontend-plugin-api": "^0.17.3",
52
- "@backstage/plugin-catalog-react": "^3.2.0",
53
- "@backstage/plugin-permission-react": "^0.5.3",
50
+ "@backstage/core-components": "^0.18.11",
51
+ "@backstage/frontend-plugin-api": "^0.17.2",
52
+ "@backstage/plugin-catalog-react": "^3.1.0",
53
+ "@backstage/plugin-permission-react": "^0.5.2",
54
54
  "@backstage/theme": "^0.7.3",
55
55
  "@material-ui/core": "^4.12.2",
56
56
  "@material-ui/icons": "^4.9.1",
57
57
  "@material-ui/lab": "^4.0.0-alpha.61",
58
- "mermaid": "^11.16.1"
58
+ "mermaid": "^11.15.0"
59
59
  },
60
60
  "peerDependencies": {
61
61
  "react": "^16.13.1 || ^17.0.0 || ^18.0.0",
62
62
  "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
63
- "react-router-dom": "^6.0.0 || ^7.0.0"
63
+ "react-router-dom": "^6.0.0"
64
64
  },
65
65
  "devDependencies": {
66
- "@backstage/cli": "^0.36.4",
67
- "@backstage/test-utils": "^1.7.20",
66
+ "@backstage/cli": "^0.36.3",
67
+ "@backstage/test-utils": "^1.7.12",
68
68
  "@testing-library/jest-dom": "^6.0.0",
69
69
  "@testing-library/react": "^14.0.0",
70
- "@testing-library/user-event": "^14.6.4",
70
+ "@testing-library/user-event": "^14.0.0",
71
71
  "msw": "^1.0.0"
72
72
  },
73
73
  "files": [
@@ -81,4 +81,4 @@
81
81
  }
82
82
  },
83
83
  "module": "./dist/index.esm.js"
84
- }
84
+ }