@pagerduty/backstage-plugin 0.12.1-next.87 → 0.12.1-next.89

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.
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { P as PagerDutyCard } from './index-e9e49c56.esm.js';
2
+ import { P as PagerDutyCard } from './index-fdce978d.esm.js';
3
3
  import '@backstage/core-plugin-api';
4
4
  import '@backstage/errors';
5
5
  import '@backstage/plugin-home-react';
@@ -34,4 +34,4 @@ const Content = (props) => {
34
34
  };
35
35
 
36
36
  export { Content };
37
- //# sourceMappingURL=index-069cf780.esm.js.map
37
+ //# sourceMappingURL=index-23ca9d1e.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-069cf780.esm.js","sources":["../../src/components/HomePagePagerDutyCard/Content.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\n\nimport { PagerDutyEntity } from '../../types';\nimport { PagerDutyCard } from '../PagerDutyCard';\n\n/** @public */\nexport type HomePagePagerDutyCardProps = PagerDutyEntity & {\n readOnly?: boolean;\n};\n\n/** @public */\nexport const Content = (props: HomePagePagerDutyCardProps) => {\n return <PagerDutyCard {...props} />;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2Ba,MAAA,OAAA,GAAU,CAAC,KAAsC,KAAA;AAC5D,EAAO,uBAAA,KAAA,CAAA,aAAA,CAAC,aAAe,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA,CAAA;AACnC;;;;"}
1
+ {"version":3,"file":"index-23ca9d1e.esm.js","sources":["../../src/components/HomePagePagerDutyCard/Content.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\n\nimport { PagerDutyEntity } from '../../types';\nimport { PagerDutyCard } from '../PagerDutyCard';\n\n/** @public */\nexport type HomePagePagerDutyCardProps = PagerDutyEntity & {\n readOnly?: boolean;\n};\n\n/** @public */\nexport const Content = (props: HomePagePagerDutyCardProps) => {\n return <PagerDutyCard {...props} />;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2Ba,MAAA,OAAA,GAAU,CAAC,KAAsC,KAAA;AAC5D,EAAO,uBAAA,KAAA,CAAA,aAAA,CAAC,aAAe,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA,CAAA;AACnC;;;;"}
@@ -1,9 +1,9 @@
1
1
  import React, { useState, useMemo } from 'react';
2
- import { Typography, Box, DialogTitle, DialogContent, DialogActions, Tooltip, IconButton, Grid } from '@material-ui/core';
2
+ import { Typography, Box, DialogTitle, DialogContent, Grid, DialogActions, Tooltip, IconButton } from '@material-ui/core';
3
3
  import { Page, Header, Content } from '@backstage/core-components';
4
4
  import EditIcon from '@mui/icons-material/Edit';
5
5
  import { useApi } from '@backstage/core-plugin-api';
6
- import { p as pagerDutyApiRef } from './index-e9e49c56.esm.js';
6
+ import { p as pagerDutyApiRef } from './index-fdce978d.esm.js';
7
7
  import { QueryClient, QueryClientProvider, useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
8
8
  import { useMaterialReactTable, MRT_EditActionButtons, MaterialReactTable } from 'material-react-table';
9
9
  import { catalogApiRef } from '@backstage/plugin-catalog-react';
@@ -242,7 +242,7 @@ const ServiceMappingComponent = () => {
242
242
  onEditingRowCancel: () => setValidationErrors({}),
243
243
  onEditingRowSave: handleSaveMapping,
244
244
  // optionally customize modal content
245
- renderEditRowDialogContent: ({ table, row, internalEditComponents }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DialogTitle, null, "Edit Mapping"), /* @__PURE__ */ React.createElement(DialogContent, null, internalEditComponents, " "), /* @__PURE__ */ React.createElement(DialogActions, null, /* @__PURE__ */ React.createElement(MRT_EditActionButtons, { variant: "text", table, row }))),
245
+ renderEditRowDialogContent: ({ table, row }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DialogTitle, null, "Edit Mapping"), /* @__PURE__ */ React.createElement(DialogContent, null, /* @__PURE__ */ React.createElement(Grid, null, /* @__PURE__ */ React.createElement(Typography, { variant: "body1" }, "PagerDuty Service"), /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, row.getValue("serviceName")), /* @__PURE__ */ React.createElement(Typography, { variant: "body1" }, /* @__PURE__ */ React.createElement("b", null, "Team:"), " ", row.getValue("team")), /* @__PURE__ */ React.createElement(Typography, { variant: "body1" }, /* @__PURE__ */ React.createElement("b", null, "Escalation Policy:"), " ", row.getValue("escalationPolicy")))), /* @__PURE__ */ React.createElement(DialogActions, null, /* @__PURE__ */ React.createElement(MRT_EditActionButtons, { variant: "text", table, row }))),
246
246
  renderRowActions: ({ row, table }) => /* @__PURE__ */ React.createElement(Box, { sx: { display: "flex" } }, /* @__PURE__ */ React.createElement(Tooltip, { title: "Edit" }, /* @__PURE__ */ React.createElement(IconButton, { onClick: () => table.setEditingRow(row) }, /* @__PURE__ */ React.createElement(EditIcon, null))), /* @__PURE__ */ React.createElement(Tooltip, { title: "Open in PagerDuty" }, /* @__PURE__ */ React.createElement(IconButton, { onClick: () => openInBrowser(row.getValue("serviceUrl")) }, /* @__PURE__ */ React.createElement(OpenInBrowser, null)))),
247
247
  state: {
248
248
  isLoading: isLoadingMappings,
@@ -267,4 +267,4 @@ const PagerDutyPage = () => {
267
267
  };
268
268
 
269
269
  export { PagerDutyPage };
270
- //# sourceMappingURL=index-38df1ae2.esm.js.map
270
+ //# sourceMappingURL=index-b823920d.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-b823920d.esm.js","sources":["../../src/components/PagerDutyPage/ServiceMappingComponent.tsx","../../src/components/PagerDutyPage/index.tsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\nimport {\n Box,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport { PagerDutyEntityMapping } from \"@pagerduty/backstage-plugin-common\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { pagerDutyApiRef } from \"../../api\";\nimport {\n QueryClient,\n QueryClientProvider,\n useMutation,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport {\n DropdownOption,\n MRT_ColumnDef,\n MRT_EditActionButtons, \n MRT_TableOptions,\n MaterialReactTable,\n useMaterialReactTable,\n} from \"material-react-table\";\nimport { catalogApiRef } from \"@backstage/plugin-catalog-react\";\nimport { OpenInBrowser } from \"@material-ui/icons\";\n// import { catalogApiRef } from \"@backstage/plugin-catalog-react\";\n// import { Entity } from \"@backstage/catalog-model\";\n\ntype Service = {\n name: string; // \"Ads\"\n id: string; // \"QWe1j283n12j132\"\n system: string; // \"Production\"\n owner: string; // \"Mapped\"\n lifecycle: string; // \"Ads\"\n};\n\n// type TableItem = {\n// name: string | undefined;\n// team: string | undefined;\n// escalationPolicy: string | undefined;\n// mappingStatus: JSX.Element;\n// mapping: JSX.Element;\n// actions: JSX.Element;\n// };\n\n// type DenseTableProps = {\n// items: TableItem[];\n// };\n\nfunction getColorFromStatus(status?: string) {\n switch (status) {\n case \"InSync\":\n return \"green\";\n case \"OutOfSync\":\n return \"red\";\n case \"NotMapped\":\n return \"orange\";\n default:\n return \"gray\";\n }\n}\n\nfunction makeReadable(status?: string) {\n switch (status) {\n case \"InSync\":\n return \"In Sync\";\n case \"OutOfSync\":\n return \"Out of Sync\";\n case \"NotMapped\":\n return \"Not Mapped\";\n default:\n return \"Refresh to Update\";\n }\n}\n\nexport const ServiceMappingComponent = () => {\n\n const [catalogEntities, setCatalogEntities] = useState<Service[]>([]);\n const [entityOptions, setEntityOptions] = useState<DropdownOption[]>([]);\n\n const pagerDutyApi = useApi(pagerDutyApiRef);\n const catalogApi = useApi(catalogApiRef);\n\n // READ hook (get mappings from api)\n function useGetMappings() {\n return useQuery<PagerDutyEntityMapping[]>({\n queryKey: [\"mappings\"],\n queryFn: async () => {\n // send api request here\n const { mappings: foundMappings } =\n await pagerDutyApi.getEntityMappings();\n\n return foundMappings;\n },\n refetchOnWindowFocus: false,\n });\n }\n\n // UPDATE hook (put mapping in api)\n function useUpdateMapping() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: async (mapping: PagerDutyEntityMapping) => {\n return await pagerDutyApi.storeServiceMapping(\n mapping.serviceId,\n mapping.entityRef\n );\n },\n // client side optimistic update\n onMutate: (newMappingInfo: PagerDutyEntityMapping) => {\n queryClient.setQueryData([\"updateMappings\"], (prevMappings: any) =>\n prevMappings?.map((prevMapping: PagerDutyEntityMapping) => {\n if (prevMapping.serviceId === newMappingInfo.serviceId) {\n newMappingInfo.entityName = catalogEntities.find((entity) => entity.id === newMappingInfo.entityRef)?.name || \"\";\n\n return newMappingInfo;\n }\n return prevMapping; \n }\n )\n );\n },\n });\n }\n\n function fetchCatalogEntities() {\n catalogApi\n .getEntities({\n filter: { kind: \"Component\" },\n })\n .then(({ items }) => {\n const entities: Service[] = [];\n items.forEach((entity: any) => {\n entities.push({\n name: entity.metadata?.name,\n id: entity.metadata?.uid ?? \"\",\n system: JSON.stringify(entity.spec?.system) || \"\",\n owner: JSON.stringify(entity.spec?.owner) || \"\",\n lifecycle: JSON.stringify(entity.spec?.lifecycle) || \"\",\n });\n });\n setCatalogEntities(entities);\n });\n }\n\n function getCatalogEntityOptions() : DropdownOption[] {\n // fetch entities if not already fetched\n if (catalogEntities.length === 0) {\n fetchCatalogEntities();\n }\n\n if(entityOptions.length === 0) {\n const options : DropdownOption[] = [];\n // Add empty object\n options.push({ value: \"\", label: \"None\" });\n\n catalogEntities.forEach((entity) => {\n options.push({\n value: entity.id,\n label: entity.name,\n });\n setEntityOptions(options);\n });\n }\n\n return entityOptions;\n }\n\n const DenseTable = () => {\n const [validationErrors, setValidationErrors] = useState<\n Record<string, string | undefined>\n >({});\n\n const columns = useMemo<MRT_ColumnDef<PagerDutyEntityMapping>[]>(\n () => [\n {\n accessorKey: \"serviceId\",\n header: \"Service ID\",\n visibleInShowHideMenu: false,\n enableEditing: false,\n Cell: ({ cell }) => (\n <Typography variant=\"body1\" style={{fontWeight: 600}}>\n {cell.getValue<string>()}\n </Typography> \n ),\n },\n {\n accessorKey: \"serviceName\",\n header: \"PagerDuty Service\",\n enableEditing: false,\n },\n {\n accessorKey: \"team\",\n header: \"Team\",\n enableEditing: false,\n },\n {\n accessorKey: \"escalationPolicy\",\n header: \"Escalation Policy\",\n enableEditing: false,\n },\n {\n accessorKey: \"entityRef\",\n header: \"Mapping\",\n visibleInShowHideMenu: false,\n editVariant: \"select\",\n editSelectOptions: getCatalogEntityOptions(),\n muiEditTextFieldProps: {\n select: true,\n error: !!validationErrors?.state,\n helperText: validationErrors?.state,\n },\n },\n {\n accessorKey: \"entityName\",\n header: \"Mapped Entity Name\",\n enableEditing: false,\n },\n {\n accessorKey: \"status\",\n header: \"Status\",\n enableEditing: false,\n Cell: ({ cell }) => (\n <Box\n component=\"span\"\n bgcolor={getColorFromStatus(cell.getValue<string>())}\n borderRadius=\"0.25rem\"\n color=\"white\"\n p=\"0.25rem\"\n >\n {makeReadable(cell.getValue<string>())}\n </Box>\n ),\n },\n {\n accessorKey: \"serviceUrl\",\n header: \"Service URL\",\n visibleInShowHideMenu: false,\n enableEditing: false,\n },\n ],\n [validationErrors]\n );\n\n // call READ hook\n const {\n data: fetchedMappings = [],\n isError: isLoadingMappingsError,\n isFetching: isFetchingMappings,\n isLoading: isLoadingMappings,\n } = useGetMappings();\n\n // call UPDATE hook\n const { mutateAsync: updateMapping, isPending: isUpdatingMapping } =\n useUpdateMapping();\n\n // UPDATE action\n const handleSaveMapping: MRT_TableOptions<PagerDutyEntityMapping>[\"onEditingRowSave\"] =\n async ({ values, table }) => {\n setValidationErrors({});\n values.entityName = catalogEntities.find((entity) => entity.id === values.entityRef)?.name || \"\";\n values.status = \"RefreshToUpdate\";\n await updateMapping(values);\n table.setEditingRow(null); // exit editing mode\n };\n\n const openInBrowser = (url: string) => {\n window.open(url, \"_blank\", \"noreferrer\");\n };\n\n const dataTable = useMaterialReactTable({\n columns,\n data: fetchedMappings,\n editDisplayMode: \"modal\", // default ('row', 'cell', 'table', and 'custom' are also available)\n enableEditing: true,\n positionActionsColumn: \"last\",\n enableStickyHeader: true,\n enableFilters: true,\n getRowId: (row) => row.serviceId,\n muiToolbarAlertBannerProps: isLoadingMappingsError\n ? {\n color: \"error\",\n children: \"Error loading data\",\n }\n : undefined,\n muiTableContainerProps: {\n sx: {\n minHeight: \"500px\",\n },\n },\n onEditingRowCancel: () => setValidationErrors({}),\n onEditingRowSave: handleSaveMapping,\n // optionally customize modal content\n renderEditRowDialogContent: ({ table, row }) => (\n <>\n <DialogTitle>Edit Mapping</DialogTitle>\n <DialogContent>\n <Grid>\n <Typography variant=\"body1\">\n PagerDuty Service \n </Typography>\n <Typography variant=\"body2\">\n {row.getValue(\"serviceName\")}\n </Typography>\n <Typography variant=\"body1\">\n <b>Team:</b> {row.getValue(\"team\")}\n </Typography>\n <Typography variant=\"body1\">\n <b>Escalation Policy:</b> {row.getValue(\"escalationPolicy\")}\n </Typography>\n </Grid>\n {/* {internalEditComponents}{\" \"} */}\n {/* or render custom edit components here */}\n </DialogContent>\n <DialogActions>\n <MRT_EditActionButtons variant=\"text\" table={table} row={row} />\n </DialogActions>\n </>\n ),\n renderRowActions: ({ row, table }) => (\n <Box sx={{ display: \"flex\" }}>\n <Tooltip title=\"Edit\">\n <IconButton onClick={() => table.setEditingRow(row)}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Open in PagerDuty\">\n <IconButton onClick={() => openInBrowser(row.getValue(\"serviceUrl\"))}>\n <OpenInBrowser />\n </IconButton>\n </Tooltip>\n </Box>\n ),\n state: {\n isLoading: isLoadingMappings,\n isSaving: isUpdatingMapping,\n showAlertBanner: isLoadingMappingsError,\n showProgressBars: isFetchingMappings,\n columnVisibility: {\n serviceId: false,\n entityRef: false,\n serviceUrl: false,\n },\n },\n });\n\n return <MaterialReactTable table={dataTable} />;\n };\n\n const queryClient = new QueryClient();\n\n return (\n <QueryClientProvider client={queryClient}>\n <DenseTable />\n </QueryClientProvider>\n );\n};\n","import React from \"react\";\nimport { Grid, Typography } from \"@material-ui/core\";\nimport { Header, Page, Content } from \"@backstage/core-components\";\nimport { ServiceMappingComponent } from \"./ServiceMappingComponent\";\n\n/** @public */\nexport const PagerDutyPage = () => {\n return (\n <Page themeId=\"home\">\n <Header title=\"PagerDuty\" subtitle=\"Advanced configurations\" />\n <Content>\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <Typography variant=\"h4\">Service to Entity mapping</Typography>\n <Typography variant=\"body1\">\n Easily map your services to entities in Backstage without the need to add anotations to all your projects.\n </Typography>\n <Typography variant=\"body1\">\n <b>Warning: </b>Only 1:1 mapping is allowed at this time.\n </Typography>\n </Grid>\n <Grid item>\n <ServiceMappingComponent />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":["queryClient"],"mappings":"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"}
@@ -229,7 +229,7 @@ const pagerDutyPlugin = createPlugin({
229
229
  const PagerDutyPage = pagerDutyPlugin.provide(
230
230
  createRoutableExtension({
231
231
  name: "PagerDutyPage",
232
- component: () => import('./index-38df1ae2.esm.js').then((m) => m.PagerDutyPage),
232
+ component: () => import('./index-b823920d.esm.js').then((m) => m.PagerDutyPage),
233
233
  mountPoint: rootRouteRef
234
234
  })
235
235
  );
@@ -257,7 +257,7 @@ const HomePagePagerDutyCard = pagerDutyPlugin.provide(
257
257
  createCardExtension({
258
258
  name: "HomePagePagerDutyCard",
259
259
  title: "PagerDuty Homepage Card",
260
- components: () => import('./index-069cf780.esm.js'),
260
+ components: () => import('./index-23ca9d1e.esm.js'),
261
261
  settings: {
262
262
  schema: {
263
263
  title: "PagerDuty",
@@ -1623,4 +1623,4 @@ function TriggerButton(props) {
1623
1623
  const PagerDutyCard = EntityPagerDutyCard;
1624
1624
 
1625
1625
  export { EntityPagerDutyCard$1 as E, HomePagePagerDutyCard as H, PagerDutyCard$1 as P, TriggerButton as T, UnauthorizedError as U, pagerDutyPlugin as a, PagerDutyPage as b, EntityPagerDutySmallCard$1 as c, isPluginApplicableToEntity as d, PagerDutyClient as e, PagerDutyCard as f, isPluginApplicableToEntity$1 as i, pagerDutyApiRef as p };
1626
- //# sourceMappingURL=index-e9e49c56.esm.js.map
1626
+ //# sourceMappingURL=index-fdce978d.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-e9e49c56.esm.js","sources":["../../src/components/constants.ts","../../src/components/pagerDutyEntity.ts","../../src/api/client.ts","../../src/plugin.ts","../../src/components/Incident/IncidentListItem.tsx","../../src/components/Incident/IncidentEmptyState.tsx","../../src/components/Incident/IncidentForbiddenState.tsx","../../src/components/Incident/Incidents.tsx","../../src/components/Escalation/EscalationUsersEmptyState.tsx","../../src/components/Escalation/EscalationUsersForbiddenState.tsx","../../src/components/Escalation/EscalationUser.tsx","../../src/components/Escalation/EscalationPolicy.tsx","../../src/components/Errors/MissingTokenError.tsx","../../src/components/Errors/ServiceNotFoundError.tsx","../../src/components/ChangeEvents/ChangeEventListItem.tsx","../../src/components/ChangeEvents/ChangeEventEmptyState.tsx","../../src/components/ChangeEvents/ChangeEventForbiddenState.tsx","../../src/components/ChangeEvents/ChangeEvents.tsx","../../src/components/Errors/ForbiddenError.tsx","../../src/components/PagerDutyCardCommon/InsightsCard.tsx","../../src/components/PagerDutyCardCommon/OpenServiceButton.tsx","../../src/components/PagerDutyCardCommon/ServiceStandardsCard.tsx","../../src/components/PagerDutyCardCommon/StatusCard.tsx","../../src/components/TriggerDialog/TriggerDialog.tsx","../../src/components/PagerDutyCardCommon/TriggerIncidentButton.tsx","../../src/components/PagerDutyCard/index.tsx","../../src/components/EntityPagerDutyCard/index.tsx","../../src/components/PagerDutySmallCard/index.tsx","../../src/components/EntityPagerDutySmallCard/index.tsx","../../src/hooks/index.ts","../../src/components/TriggerButton/index.tsx","../../src/deprecated.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const PAGERDUTY_INTEGRATION_KEY = 'pagerduty.com/integration-key';\nexport const PAGERDUTY_SERVICE_ID = 'pagerduty.com/service-id';\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { PagerDutyEntity } from '../types';\nimport { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from './constants';\n\nexport function getPagerDutyEntity(entity: Entity): PagerDutyEntity {\n const {\n [PAGERDUTY_INTEGRATION_KEY]: integrationKey,\n [PAGERDUTY_SERVICE_ID]: serviceId,\n } = entity.metadata.annotations || ({} as Record<string, string>);\n const name = entity.metadata.name;\n\n return { integrationKey, serviceId, name };\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n PagerDutyApi,\n PagerDutyTriggerAlarmRequest,\n PagerDutyClientApiDependencies,\n PagerDutyClientApiConfig,\n RequestOptions,\n} from './types';\nimport { PagerDutyChangeEventsResponse, \n PagerDutyOnCallUsersResponse, \n PagerDutyUser, \n PagerDutyServiceResponse,\n PagerDutyIncidentsResponse,\n PagerDutyServiceStandardsResponse,\n PagerDutyServiceMetricsResponse,\n PagerDutyEntityMappingResponse\n} from '@pagerduty/backstage-plugin-common';\nimport { createApiRef, ConfigApi } from '@backstage/core-plugin-api';\nimport { NotFoundError } from '@backstage/errors';\nimport { Entity } from '@backstage/catalog-model';\nimport { getPagerDutyEntity } from '../components/pagerDutyEntity';\nimport { PagerDutyEntity } from '../types';\n\n/** @public */\nexport class UnauthorizedError extends Error {}\n\n/** @public */\nexport class ForbiddenError extends Error { }\n\n/** @public */\nexport const pagerDutyApiRef = createApiRef<PagerDutyApi>({\n id: 'plugin.pagerduty.api',\n});\n\n/** @public */\nexport class PagerDutyClient implements PagerDutyApi {\n static fromConfig(\n configApi: ConfigApi,\n dependencies: PagerDutyClientApiDependencies,\n ) {\n const { discoveryApi, fetchApi } = dependencies;\n\n const eventsBaseUrl: string =\n configApi.getOptionalString('pagerDuty.eventsBaseUrl') ??\n 'https://events.pagerduty.com/v2';\n\n return new PagerDutyClient({\n eventsBaseUrl,\n discoveryApi,\n fetchApi,\n });\n }\n\n constructor(private readonly config: PagerDutyClientApiConfig) {}\n\n async getServiceByPagerDutyEntity(\n pagerDutyEntity: PagerDutyEntity,\n ): Promise<PagerDutyServiceResponse> {\n const { integrationKey, serviceId } = pagerDutyEntity;\n\n let response: PagerDutyServiceResponse;\n let url: string;\n\n if (integrationKey) {\n url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services?integration_key=${integrationKey}`;\n const serviceResponse = await this.findByUrl<PagerDutyServiceResponse>(url);\n\n if (serviceResponse.service === undefined) throw new NotFoundError();\n\n response = serviceResponse;\n } else if (serviceId) {\n url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}`;\n\n response = await this.findByUrl<PagerDutyServiceResponse>(url);\n } else {\n throw new NotFoundError();\n }\n\n return response;\n }\n\n async getEntityMappings(): Promise<PagerDutyEntityMappingResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n return await this.findByUrl<PagerDutyEntityMappingResponse>(url);\n }\n\n async storeServiceMapping(serviceId: string, backstageEntityId: string): Promise<Response> {\n\n const body = JSON.stringify({\n entityRef: backstageEntityId,\n serviceId: serviceId,\n });\n\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n body,\n };\n\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n return this.request(url, options);\n }\n\n async getServiceByEntity(entity: Entity): Promise<PagerDutyServiceResponse> {\n return await this.getServiceByPagerDutyEntity(getPagerDutyEntity(entity));\n }\n\n async getServiceById(serviceId: string): Promise<PagerDutyServiceResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}`;\n\n return await this.findByUrl<PagerDutyServiceResponse>(url);\n }\n\n async getIncidentsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyIncidentsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/incidents`;\n\n return await this.findByUrl<PagerDutyIncidentsResponse>(url);\n }\n\n async getChangeEventsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyChangeEventsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/change-events`;\n\n return await this.findByUrl<PagerDutyChangeEventsResponse>(url);\n }\n\n async getServiceStandardsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyServiceStandardsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/standards`;\n\n return await this.findByUrl<PagerDutyServiceStandardsResponse>(url);\n }\n\n async getServiceMetricsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyServiceMetricsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/metrics`;\n\n return await this.findByUrl<PagerDutyServiceMetricsResponse>(url);\n }\n\n async getOnCallByPolicyId(\n policyId: string,\n ): Promise<PagerDutyUser[]> {\n const params = `escalation_policy_ids[]=${policyId}`;\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/oncall-users?${params}`;\n\n const response: PagerDutyOnCallUsersResponse = await this.findByUrl<PagerDutyOnCallUsersResponse>(url);\n return response.users;\n }\n\n triggerAlarm(request: PagerDutyTriggerAlarmRequest): Promise<Response> {\n const { integrationKey, source, description, userName } = request;\n\n const body = JSON.stringify({\n event_action: 'trigger',\n routing_key: integrationKey,\n client: 'Backstage',\n client_url: source,\n payload: {\n summary: description,\n source: source,\n severity: 'error',\n class: 'manual trigger',\n custom_details: {\n user: userName,\n },\n },\n });\n\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n body,\n };\n\n const url = this.config.eventsBaseUrl ?? 'https://events.pagerduty.com/v2';\n\n return this.request(`${url}/enqueue`, options);\n }\n\n private async findByUrl<T>(url: string): Promise<T> {\n const options = {\n method: 'GET',\n headers: {\n Accept: 'application/vnd.pagerduty+json;version=2',\n 'Content-Type': 'application/json',\n },\n };\n const response = await this.request(url, options);\n return response.json();\n }\n\n private async request(\n url: string,\n options: RequestOptions,\n ): Promise<Response> {\n const response = await this.config.fetchApi.fetch(url, options);\n if (response.status === 401) {\n throw new UnauthorizedError(\"Unauthorized: You don't have access to this resource\");\n }\n\n if (response.status === 403) {\n throw new ForbiddenError(\"Forbidden: You are not allowed to perform this action\");\n }\n\n if (response.status === 404) {\n throw new NotFoundError(\"Not Found: Resource not found\");\n }\n\n if (!response.ok) {\n const payload = await response.json();\n const errors = payload.errors.map((error: string) => error).join(' ');\n const message = `Request failed with ${response.status}, ${errors}`;\n throw new Error(message);\n }\n return response;\n }\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { pagerDutyApiRef, PagerDutyClient } from './api';\nimport {\n createApiFactory,\n createPlugin,\n createRouteRef,\n discoveryApiRef,\n fetchApiRef,\n configApiRef,\n createComponentExtension,\n createRoutableExtension,\n} from '@backstage/core-plugin-api';\nimport { createCardExtension } from '@backstage/plugin-home-react';\nimport { HomePagePagerDutyCardProps } from './components/HomePagePagerDutyCard/Content';\n\nexport const rootRouteRef = createRouteRef({\n id: 'pagerduty',\n});\n\n/** @public */\nexport const pagerDutyPlugin = createPlugin({\n id: 'pagerduty',\n apis: [\n createApiFactory({\n api: pagerDutyApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n configApi: configApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n PagerDutyClient.fromConfig(configApi, { discoveryApi, fetchApi }),\n }),\n ],\n});\n\n/** @public */\nexport const PagerDutyPage = pagerDutyPlugin.provide(\n createRoutableExtension({\n name: 'PagerDutyPage',\n component: () => import('./components/PagerDutyPage').then(m => m.PagerDutyPage),\n mountPoint: rootRouteRef,\n })\n)\n\n/** @public */\nexport const EntityPagerDutyCard = pagerDutyPlugin.provide(\n createComponentExtension({\n name: 'EntityPagerDutyCard',\n component: {\n lazy: () =>\n import('./components/EntityPagerDutyCard').then(\n m => m.EntityPagerDutyCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityPagerDutySmallCard = pagerDutyPlugin.provide(\n createComponentExtension({\n name: 'EntityPagerDutySmallCard',\n component: {\n lazy: () =>\n import('./components/EntityPagerDutySmallCard').then(\n m => m.EntityPagerDutySmallCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const HomePagePagerDutyCard = pagerDutyPlugin.provide(\n createCardExtension<HomePagePagerDutyCardProps>({\n name: 'HomePagePagerDutyCard',\n title: 'PagerDuty Homepage Card',\n components: () => import('./components/HomePagePagerDutyCard'),\n settings: {\n schema: {\n title: 'PagerDuty',\n type: 'object',\n properties: {\n integrationKey: {\n title: 'PagerDuty integration key',\n type: 'string',\n },\n serviceId: {\n title: 'PagerDuty service id',\n type: 'string',\n },\n name: {\n title: 'PagerDuty service name',\n type: 'string',\n },\n },\n },\n },\n }),\n);\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemSecondaryAction,\n Tooltip,\n ListItemText,\n makeStyles,\n IconButton,\n Typography,\n Chip,\n} from '@material-ui/core';\nimport { DateTime, Duration } from 'luxon';\nimport { PagerDutyIncident } from '@pagerduty/backstage-plugin-common';\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\nimport { BackstageTheme } from '@backstage/theme';\nimport { Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles<BackstageTheme>((theme) => ({\n denseListIcon: {\n marginRight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n listItemPrimary: {\n fontWeight: \"bold\",\n },\n warning: {\n borderColor: theme.palette.warning.main,\n color: \"#fff\",\n backgroundColor: theme.palette.warning.main,\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: \"#fff\",\n },\n },\n error: {\n borderColor: theme.palette.error.main,\n color: \"#fff\",\n backgroundColor: theme.palette.error.main,\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: \"#fff\",\n },\n },\n lowUrgency: {\n borderColor: theme.palette.warning.main,\n color: theme.palette.warning.main,\n backgroundColor: \"#fff\",\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: theme.palette.warning.main,\n },\n },\n highUrgency: {\n borderColor: theme.palette.error.main,\n color: theme.palette.error.main,\n backgroundColor: \"#fff\",\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: theme.palette.error.main,\n },\n },\n textContainer: {\n display: \"flex\",\n alignItems: \"baseline\",\n },\n smallIconStyle: {\n color: theme.palette.text.primary,\n marginRight: \"-20px\",\n },\n}));\n\ntype Props = {\n incident: PagerDutyIncident;\n};\n\nexport const IncidentListItem = ({ incident }: Props) => {\n const classes = useStyles();\n const duration =\n new Date().getTime() - new Date(incident.created_at).getTime();\n const createdAt = DateTime.local()\n .minus(Duration.fromMillis(duration))\n .toRelative({ locale: 'en' });\n const user = incident.assignments[0]?.assignee;\n\n return (\n <ListItem dense key={incident.id}>\n <ListItemText\n primary={\n <div className={classes.textContainer}>\n <Chip\n data-testid={`chip-${incident.status}`}\n label={incident.status}\n size=\"small\"\n variant=\"outlined\"\n className={\n incident.status === \"triggered\"\n ? classes.error\n : classes.warning\n }\n />\n <Chip\n data-testid={`chip-${incident.urgency}`}\n label={`${incident.urgency} urgency`}\n size=\"small\"\n variant=\"outlined\"\n className={\n incident.urgency === \"high\"\n ? classes.highUrgency\n : classes.lowUrgency\n }\n />\n {incident.title}\n </div>\n }\n primaryTypographyProps={{\n variant: \"body1\",\n className: classes.listItemPrimary,\n }}\n secondary={\n <Typography noWrap variant=\"body2\" color=\"textSecondary\">\n Created {createdAt} and assigned to{\" \"}\n <Link to={user?.html_url ?? \"#\"}>{user?.summary ?? \"nobody\"}</Link>\n </Typography>\n }\n />\n <ListItemSecondaryAction>\n <Tooltip title=\"View in PagerDuty\" placement=\"top\">\n <IconButton\n href={incident.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classes.smallIconStyle}\n >\n <OpenInBrowserIcon />\n </IconButton>\n </Tooltip>\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport EmptyStateImage from \"../../assets/emptystate.svg\";\n\nexport const IncidentsEmptyState = () => {\n return (\n <Grid\n container\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n >\n <Grid item xs={12}>\n <Typography variant=\"h5\">Nice! No incidents found!</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={EmptyStateImage}\n alt=\"EmptyState\"\n data-testid=\"emptyStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport ForbiddenStateImage from '../../assets/forbiddenstate.svg';\n\nexport const IncidentForbiddenState = () => {\n return (\n <Grid container justifyContent=\"center\" direction=\"column\" alignItems=\"center\">\n <Grid item xs={12}>\n <Typography variant=\"h5\">Feature not available with your account or token.</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={ForbiddenStateImage}\n alt=\"ForbiddenState\"\n data-testid=\"forbiddenStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useEffect } from 'react';\nimport { List } from '@material-ui/core';\nimport { IncidentListItem } from './IncidentListItem';\nimport { IncidentsEmptyState } from './IncidentEmptyState';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { Alert } from '@material-ui/lab';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Progress } from '@backstage/core-components';\nimport { IncidentForbiddenState } from './IncidentForbiddenState';\n\ntype Props = {\n serviceId: string;\n refreshIncidents: boolean;\n};\n\nexport const Incidents = ({ serviceId, refreshIncidents }: Props) => {\n const api = useApi(pagerDutyApiRef);\n\n const [{ value: incidents, loading, error }, getIncidents] = useAsyncFn(\n async () => {\n const { incidents: foundIncidents } = await api.getIncidentsByServiceId(\n serviceId,\n );\n return foundIncidents;\n },\n );\n\n useEffect(() => {\n getIncidents();\n }, [refreshIncidents, getIncidents]);\n\n if (error) {\n if (error.message.includes('Forbidden')) {\n return <IncidentForbiddenState />;\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!incidents?.length) {\n return <IncidentsEmptyState />;\n }\n\n return (\n <List dense>\n {incidents!.map((incident, index) => (\n <IncidentListItem key={incident.id + index} incident={incident} />\n ))}\n </List>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport { StatusWarning } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n denseListIcon: {\n marginRight: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport const EscalationUsersEmptyState = () => {\n const classes = useStyles();\n return (\n <ListItem>\n <ListItemIcon>\n <div className={classes.denseListIcon}>\n <StatusWarning />\n </div>\n </ListItemIcon>\n <ListItemText primary=\"No one is on-call. Update the escalation policy.\" />\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport { StatusError } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n denseListIcon: {\n marginRight: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport const EscalationUsersForbiddenState = () => {\n const classes = useStyles();\n return (\n <ListItem>\n <ListItemIcon>\n <div className={classes.denseListIcon}>\n <StatusError />\n </div>\n </ListItemIcon>\n <ListItemText primary=\"You don't permissions to list on-calls. Check your OAuth token permissions.\" />\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemIcon,\n Tooltip,\n ListItemText,\n makeStyles,\n IconButton,\n Typography,\n} from '@material-ui/core';\nimport Avatar from '@material-ui/core/Avatar';\nimport { PagerDutyUser } from '@pagerduty/backstage-plugin-common';\nimport NotificationsIcon from \"@material-ui/icons/Notifications\";\nimport { BackstageTheme } from '@backstage/theme';\n\nconst useStyles = makeStyles<BackstageTheme>((theme) => ({\n listItemPrimary: {\n fontWeight: \"bold\",\n },\n listItemSecondary: {\n fontWeight: \"normal\",\n textDecoration: \"underline\",\n marginTop: \"-5px\",\n },\n buttonStyle: {\n marginLeft: \"-11px\",\n marginTop: \"-10px\",\n fontSize: \"15px\",\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n userTextButtonStyle: {\n marginLeft: \"-11px\",\n marginTop: \"-10px\",\n marginBottom: \"-10px\",\n fontSize: \"15px\",\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n containerStyle: {\n display: \"flex\",\n alignItems: \"center\",\n fontWeight: \"bold\",\n },\n iconStyle: {\n fontSize: \"25px\",\n marginLeft: \"-4px\",\n color: theme.palette.text.primary,\n },\n smallIconStyle: {\n color: theme.palette.text.primary,\n },\n avatarStyle: {\n marginTop: \"-20px\",\n },\n}));\n\ntype Props = {\n user: PagerDutyUser;\n policyUrl: string;\n policyName: string;\n};\n\nfunction navigateToUrl(url: string) {\n // open url in new browser window\n window.open(url, \"_blank\");\n}\n\nexport const EscalationUser = ({ user, policyUrl, policyName }: Props) => {\n const classes = useStyles();\n\n return (\n <ListItem>\n <ListItemIcon>\n <Avatar\n alt={user.name}\n src={user.avatar_url}\n className={classes.avatarStyle}\n />\n </ListItemIcon>\n <ListItemText\n primary={\n <>\n <Tooltip title=\"Open user in PagerDuty\" placement=\"top\">\n <IconButton\n aria-label=\"open-user-in-browser\"\n onClick={() => navigateToUrl(user.html_url)}\n className={classes.userTextButtonStyle}\n >\n <span className={classes.containerStyle}>{user.name}</span>\n </IconButton>\n </Tooltip>\n\n <Typography\n className={classes.listItemSecondary}\n color=\"textSecondary\"\n >\n {user.email}\n </Typography>\n </>\n }\n secondary={\n <IconButton\n aria-label=\"open-escalation-policy-in-browser\"\n onClick={() => navigateToUrl(policyUrl)}\n className={classes.buttonStyle}\n >\n <span className={classes.containerStyle}>\n <NotificationsIcon className={classes.iconStyle} />\n {policyName}\n </span>\n </IconButton>\n }\n />\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from \"react\";\nimport { List, ListSubheader, createStyles, makeStyles } from \"@material-ui/core\";\nimport { EscalationUsersEmptyState } from \"./EscalationUsersEmptyState\";\nimport { EscalationUsersForbiddenState } from \"./EscalationUsersForbiddenState\";\nimport { EscalationUser } from \"./EscalationUser\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef } from \"../../api\";\nimport { Alert } from \"@material-ui/lab\";\n\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { Progress } from \"@backstage/core-components\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\ntype Props = {\n policyId: string;\n policyUrl: string;\n policyName: string;\n};\nconst useStyles = makeStyles<BackstageTheme>(() =>\n createStyles({\n listStyle: {\n marginLeft: \"-15px\",\n },\n })\n);\n\nexport const EscalationPolicy = ({\n policyId,\n policyUrl,\n policyName,\n}: Props) => {\n const api = useApi(pagerDutyApiRef);\n const classes = useStyles();\n\n const {\n value: users,\n loading,\n error,\n } = useAsync(async () => {\n return await api.getOnCallByPolicyId(policyId);\n });\n\n if (error) {\n if (error.message.includes(\"Forbidden\")) {\n return (\n <List dense subheader={<ListSubheader>ON CALL</ListSubheader>}>\n <EscalationUsersForbiddenState />\n </List>\n );\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!users?.length) {\n return <EscalationUsersEmptyState />;\n }\n\n return (\n <List\n dense\n className={classes.listStyle}\n >\n {users!.map((user, index) => (\n <EscalationUser\n key={index}\n user={user}\n policyUrl={policyUrl}\n policyName={policyName}\n />\n ))}\n </List>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Button } from '@material-ui/core';\nimport { EmptyState } from '@backstage/core-components';\n\nexport const MissingTokenError = () => (\n <EmptyState\n missing=\"info\"\n title=\"Missing or invalid PagerDuty Token\"\n description=\"The request to fetch data needs a valid token. See README for more details.\"\n action={\n <Button\n color=\"primary\"\n variant=\"contained\"\n href=\"https://pagerduty.github.io/backstage-plugin-docs/getting-started/pagerduty/\"\n >\n Read More\n </Button>\n }\n />\n);\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Button } from '@material-ui/core';\nimport { EmptyState } from '@backstage/core-components';\n\nexport const ServiceNotFoundError = () => (\n <EmptyState\n missing=\"data\"\n title=\"PagerDuty Service Not Found\"\n description=\"A service could not be found within PagerDuty based on the provided service id. Please verify your configuration.\"\n action={\n <Button\n color=\"primary\"\n variant=\"contained\"\n href=\"https://pagerduty.github.io/backstage-plugin-docs/getting-started/pagerduty/\"\n >\n Read More\n </Button>\n }\n />\n);\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Link } from '@backstage/core-components';\nimport {\n ListItem,\n ListItemSecondaryAction,\n Tooltip,\n ListItemText,\n makeStyles,\n IconButton,\n Typography,\n} from '@material-ui/core';\nimport { DateTime, Duration } from 'luxon';\nimport { PagerDutyChangeEvent } from '@pagerduty/backstage-plugin-common';\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\nimport LinkIcon from '@material-ui/icons/Link';\nimport { BackstageTheme } from '@backstage/theme';\n\nconst useStyles = makeStyles<BackstageTheme>((theme) => ({\n denseListIcon: {\n marginRight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n listItemPrimary: {\n fontWeight: \"bold\",\n },\n smallExternalLinkIconStyle: {\n color: theme.palette.text.primary,\n },\n smallExternalLinkWithoutMarginIconStyle: {\n color: theme.palette.text.primary,\n marginRight: \"-20px\",\n },\n smallIconStyle: {\n color: theme.palette.text.primary,\n marginRight: \"-20px\",\n },\n}));\n\ntype Props = {\n changeEvent: PagerDutyChangeEvent;\n};\n\nexport const ChangeEventListItem = ({ changeEvent }: Props) => {\n const classes = useStyles();\n const duration =\n new Date().getTime() - new Date(changeEvent.timestamp).getTime();\n const changedAt = DateTime.local()\n .minus(Duration.fromMillis(duration))\n .toRelative({ locale: 'en' });\n \n let externalLinkElem: JSX.Element | undefined;\n if (changeEvent.links.length > 0) {\n const text: string = changeEvent.links[0].text;\n externalLinkElem = (\n <Tooltip title={text} placement=\"top\">\n <IconButton\n component={Link}\n to={changeEvent.links[0].href}\n className={\n changeEvent.html_url === undefined\n ? classes.smallExternalLinkWithoutMarginIconStyle\n : classes.smallExternalLinkIconStyle\n }\n >\n <LinkIcon />\n </IconButton>\n </Tooltip>\n );\n }\n\n return (\n <ListItem dense key={changeEvent.id}>\n <ListItemText\n primary={<>{changeEvent.summary}</>}\n primaryTypographyProps={{\n variant: 'body1',\n className: classes.listItemPrimary,\n }}\n secondary={\n <Typography variant=\"body2\" color=\"textSecondary\">\n Triggered from {changeEvent.source} {changedAt}.\n </Typography>\n }\n />\n <ListItemSecondaryAction>\n {externalLinkElem}\n {changeEvent.html_url === undefined ? null : (\n <Tooltip title=\"View in PagerDuty\" placement=\"top\">\n <IconButton\n component={Link}\n to={changeEvent.html_url}\n className={classes.smallIconStyle}\n >\n <OpenInBrowserIcon />\n </IconButton>\n </Tooltip>\n )}\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport EmptyStateImage from '../../assets/emptystate.svg';\n\nexport const ChangeEventEmptyState = () => {\n return (\n <Grid container justifyContent=\"center\" direction=\"column\" alignItems=\"center\">\n <Grid item xs={12}>\n <Typography variant=\"h5\">No change events to display yet.</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={EmptyStateImage}\n alt=\"EmptyState\"\n data-testid=\"emptyStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport ForbiddenStateImage from '../../assets/forbiddenstate.svg';\n\nexport const ChangeEventForbiddenState = () => {\n return (\n <Grid container justifyContent=\"center\" direction=\"column\" alignItems=\"center\">\n <Grid item xs={12}>\n <Typography variant=\"h5\">Feature not available with your account or token.</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={ForbiddenStateImage}\n alt=\"ForbiddenState\"\n data-testid=\"forbiddenStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useEffect } from 'react';\nimport { List } from '@material-ui/core';\nimport { ChangeEventListItem } from './ChangeEventListItem';\nimport { ChangeEventEmptyState } from './ChangeEventEmptyState';\nimport { ChangeEventForbiddenState } from './ChangeEventForbiddenState';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Progress } from '@backstage/core-components';\nimport { Alert } from '@material-ui/lab';\n\ntype Props = {\n serviceId: string;\n refreshEvents: boolean;\n};\n\nexport const ChangeEvents = ({ serviceId, refreshEvents }: Props) => {\n const api = useApi(pagerDutyApiRef);\n\n const [{ value: changeEvents, loading, error }, getChangeEvents] = useAsyncFn(\n async () => {\n const { change_events } = await api.getChangeEventsByServiceId(serviceId);\n return change_events;\n },\n );\n\n useEffect(() => {\n getChangeEvents();\n }, [refreshEvents, getChangeEvents]);\n\n if (error) {\n if (error.message.includes('Forbidden')) {\n return <ChangeEventForbiddenState />;\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!changeEvents?.length) {\n return <ChangeEventEmptyState />;\n }\n\n return (\n <List dense>\n {changeEvents!.map((changeEvent, index) => (\n <ChangeEventListItem\n key={changeEvent.id + index}\n changeEvent={changeEvent}\n />\n ))}\n </List>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Button } from '@material-ui/core';\nimport { EmptyState } from '@backstage/core-components';\n\nexport const ForbiddenError = () => (\n <EmptyState\n missing=\"info\"\n title=\"Unauthorized\"\n description=\"You don't have the required permissions to perform this action. See README for more details.\"\n action={\n <Button\n color=\"primary\"\n variant=\"contained\"\n href=\"https://pagerduty.github.io/backstage-plugin-docs/getting-started/pagerduty/\"\n >\n Read More\n </Button>\n }\n />\n);\n","import { BackstageTheme } from \"@backstage/theme\";\nimport { Card, Typography, makeStyles } from \"@material-ui/core\";\nimport React from \"react\";\nimport validateColor from \"validate-color\";\n\ntype Props = {\n count: number | undefined;\n label: string;\n color: string;\n compact?: boolean;\n};\n\nfunction IncidentCounterCard({ count, label, color, compact }: Props) {\n\n const textColor = color && validateColor(color) ? color : \"black\";\n\n const useStyles = makeStyles<BackstageTheme>(() => ({\n cardStyle: {\n marginRight: \"10px\",\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n largeTextStyle: {\n color: textColor,\n fontSize: \"30px\",\n marginTop: \"-10px\",\n },\n smallTextStyle: {\n color: textColor,\n fontWeight: \"bold\",\n fontSize: \"10px\",\n marginTop: \"-5px\",\n textTransform: \"uppercase\",\n flexWrap: \"wrap\",\n },\n }));\n\n const { cardStyle, largeTextStyle, smallTextStyle } = useStyles();\n\n return (\n <Card className={cardStyle}>\n {(count !== undefined) ? (\n <>\n <Typography className={largeTextStyle}>{count}</Typography>\n <Typography className={smallTextStyle}>{label}</Typography>\n </>\n ) : (\n <>\n <Typography className={largeTextStyle}>-</Typography>\n <Typography className={smallTextStyle}>{label}</Typography>\n </>\n )}\n </Card>\n );\n}\n\nexport default IncidentCounterCard;\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from \"react\";\nimport { makeStyles, IconButton } from \"@material-ui/core\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\nimport OpenInBrowser from \"@material-ui/icons/OpenInBrowser\";\n\ntype OpenServiceButtonProps = {\n serviceUrl: string;\n compact?: boolean;\n};\n\n/** @public */\nexport function OpenServiceButton({ serviceUrl, compact }: OpenServiceButtonProps) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n buttonStyle: {\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n containerStyle: {\n fontSize: compact !== true ? \"12px\" : \"10px\",\n width: compact !== true ? \"85px\" : \"70px\",\n },\n iconStyle: {\n fontSize: \"30px\",\n marginBottom: \"-10px\",\n },\n textStyle: {\n marginBottom: \"-10px\",\n },\n }));\n\n const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();\n\n function navigateToService() {\n window.open(serviceUrl, \"_blank\");\n }\n\n return (\n <>\n <IconButton\n aria-label=\"open-service-in-browser\"\n onClick={navigateToService}\n className={buttonStyle}\n >\n <div className={containerStyle}>\n <OpenInBrowser className={iconStyle} />\n <p className={textStyle}>Open service in PagerDuty</p>\n </div>\n </IconButton>\n </>\n );\n}\n","import { BackstageTheme } from \"@backstage/theme\";\nimport {\n Card,\n IconButton,\n LinearProgress,\n Theme,\n Tooltip,\n Typography,\n makeStyles,\n withStyles,\n} from \"@material-ui/core\";\nimport React from \"react\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport { PagerDutyServiceStandard } from \"@pagerduty/backstage-plugin-common\";\nimport CheckCircle from \"@material-ui/icons/CheckCircle\";\nimport RadioButtonUncheckedIcon from \"@material-ui/icons/RadioButtonUnchecked\";\n\ntype Props = {\n total: number | undefined;\n completed: number | undefined;\n standards: PagerDutyServiceStandard[] | undefined;\n compact?: boolean;\n};\n\nfunction colorFromPercentage(theme: Theme, percentage: number) {\n if (percentage < 0.5) {\n return theme.palette.error.main;\n } else if (percentage < 0.8) {\n return theme.palette.warning.main;\n }\n return theme.palette.success.main;\n}\n\nfunction ServiceStandardsCard({ total, completed, standards, compact }: Props) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n cardStyle: {\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"grid\",\n gridTemplateRows: \"1fr auto auto\",\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n containerStyle: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: compact !== true ? \"-100px\" : \"-50px\",\n },\n largeTextStyle: {\n fontSize: compact !== true ? \"50px\" : \"40px\",\n color:\n completed !== undefined && total !== undefined\n ? colorFromPercentage(theme, completed / total)\n : colorFromPercentage(theme, 0),\n alignSelf: \"center\",\n justifyContent: \"center\",\n },\n smallTextStyle: {\n color: theme.palette.textSubtle,\n fontSize: compact !== true ? \"14px\" : \"12px\",\n fontWeight: \"bold\",\n alignSelf: \"center\",\n justifyContent: \"center\",\n marginLeft: \"-2px\",\n marginTop: compact !== true ? \"25px\" : \"20px\",\n },\n tooltipContainer: {},\n tooltipIcon: {\n marginRight: \"5px\",\n },\n standardItem: {\n display: \"flex\",\n alignItems: \"center\",\n },\n }));\n\n const BorderLinearProgress = withStyles((theme) => ({\n root: {\n height: 10,\n borderRadius: 5,\n margin: 5,\n },\n colorPrimary: {\n backgroundColor:\n theme.palette.grey[theme.palette.type === \"light\" ? 200 : 700],\n },\n bar: {\n borderRadius: 5,\n backgroundColor:\n completed !== undefined && total !== undefined\n ? colorFromPercentage(theme, completed / total)\n : colorFromPercentage(theme, 0),\n },\n }))(LinearProgress);\n\n const {\n cardStyle,\n containerStyle,\n largeTextStyle,\n smallTextStyle,\n tooltipContainer,\n tooltipIcon,\n standardItem,\n } = useStyles();\n\n if (standards === undefined || completed === undefined || total === undefined) {\n return (\n <Card className={cardStyle}>\n <div className={containerStyle}>\n <Typography className={smallTextStyle}>\n Unable to retrieve Scores\n </Typography>\n </div>\n </Card>\n );\n }\n \n return (\n <Card className={cardStyle}>\n {completed !== undefined && total !== undefined ? (\n <>\n <div className={tooltipContainer}>\n <IconButton>\n <Tooltip\n interactive\n title={\n <>\n {standards?.map((standard, key) => (\n <p key={key}>\n {standard.pass ? (\n <span className={standardItem}>\n <CheckCircle className={tooltipIcon} />{\" \"}\n {standard.name}\n </span>\n ) : (\n <span className={standardItem}>\n <RadioButtonUncheckedIcon className={tooltipIcon} />{\" \"}\n {standard.name}\n </span>\n )}\n </p>\n ))}\n </>\n }\n >\n <InfoIcon />\n </Tooltip>\n </IconButton>\n </div>\n <div className={containerStyle}>\n <Typography className={largeTextStyle}>{completed}</Typography>\n <Typography className={smallTextStyle}>/{total}</Typography>\n </div>\n <div>\n <BorderLinearProgress\n variant=\"determinate\"\n value={(completed! / total!) * 100}\n />\n </div>\n </>\n ) : (\n <div className={containerStyle}>\n <Typography className={smallTextStyle}>\n Unable to retrieve Scores\n </Typography>\n </div>\n )}\n </Card>\n );\n}\n\nexport default ServiceStandardsCard;\n","import { Card, Typography } from \"@material-ui/core\";\nimport React, { useEffect } from \"react\";\nimport { Theme, makeStyles } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { pagerDutyApiRef } from \"../../api\";\nimport { useAsyncFn } from \"react-use\";\nimport Alert from \"@material-ui/lab/Alert/Alert\";\nimport { Progress } from \"@backstage/core-components\";\n\ntype Props = {\n serviceId: string;\n refreshStatus: boolean;\n compact?: boolean;\n};\n\nfunction labelFromStatus(status: string) {\n let label;\n switch (status) {\n case \"active\":\n label = \"OK\";\n break;\n case \"warning\":\n label = \"ACTIVE\";\n break;\n case \"critical\":\n label = \"ALARM\";\n break;\n case \"maintenance\":\n label = \"MAINTENANCE\";\n break;\n case \"disabled\":\n label = \"DISABLED\";\n break;\n default:\n label = \"OK\";\n break;\n }\n\n return label;\n}\n\nfunction colorFromStatus(theme: Theme, status: string) {\n let color;\n switch (status) {\n case \"active\":\n color = theme.palette.success.main;\n break;\n case \"warning\":\n color = theme.palette.warningBackground;\n break;\n case \"critical\":\n color = theme.palette.error.main;\n break;\n case \"maintenance\":\n color = \"#ebdc00\";\n break;\n case \"disabled\":\n color = \"#A9A9A9\";\n break;\n default:\n color = theme.palette.success.main;\n break;\n }\n\n return color;\n}\n\nfunction StatusCard({ serviceId, refreshStatus, compact}: Props) {\n const api = useApi(pagerDutyApiRef);\n const [{ value: status, loading, error }, getStatus] = useAsyncFn(\n async () => {\n const { service: foundService } = await api.getServiceById(serviceId);\n return foundService.status;\n }\n );\n\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n cardStyle: {\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor:\n status !== undefined\n ? colorFromStatus(theme, status)\n : colorFromStatus(theme, \"active\"),\n marginRight: \"10px\",\n },\n largeTextStyle: {\n color: \"white\",\n fontWeight: \"bold\",\n fontSize: \"20px\",\n wordWrap: \"break-word\",\n },\n }));\n\n const { cardStyle, largeTextStyle } = useStyles();\n\n useEffect(() => {\n getStatus();\n }, [refreshStatus, getStatus]);\n\n if (error) {\n if (error.message.includes(\"Forbidden\")) {\n return <p>forbidden</p>;\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!status) {\n return <p>not found</p>;\n }\n\n return (\n <Card className={cardStyle}>\n {status !== undefined ? (\n <Typography className={largeTextStyle}>\n {labelFromStatus(status)}\n </Typography>\n ) : (\n <Typography className={largeTextStyle}>Unable to get status</Typography>\n )}\n </Card>\n );\n}\n\nexport default StatusCard;\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n TextField,\n DialogActions,\n Button,\n DialogContent,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { Alert } from '@material-ui/lab';\nimport {\n useApi,\n alertApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\n\ntype Props = {\n showDialog: boolean;\n handleDialog: () => void;\n onIncidentCreated?: () => void;\n serviceName: string;\n integrationKey: string;\n};\n\nexport const TriggerDialog = ({\n showDialog,\n handleDialog,\n onIncidentCreated: onIncidentCreated,\n serviceName,\n integrationKey,\n}: Props) => {\n const alertApi = useApi(alertApiRef);\n const identityApi = useApi(identityApiRef);\n const api = useApi(pagerDutyApiRef);\n const [description, setDescription] = useState<string>('');\n\n const [{ value, loading, error }, handleTriggerAlarm] = useAsyncFn(\n async (descriptions: string) => {\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n return await api.triggerAlarm({\n integrationKey: integrationKey as string,\n source: window.location.toString(),\n description: descriptions,\n userName,\n });\n },\n );\n\n const descriptionChanged = (\n event: React.ChangeEvent<HTMLTextAreaElement>,\n ) => {\n setDescription(event.target.value);\n };\n\n useEffect(() => {\n if (value) {\n (async () => {\n alertApi.post({\n message: `Alarm successfully triggered`,\n });\n\n handleDialog();\n\n // The pager duty API isn't always returning the newly created alarm immediately\n await new Promise(resolve => setTimeout(resolve, 1000));\n onIncidentCreated?.();\n })();\n }\n }, [value, alertApi, handleDialog, onIncidentCreated]);\n\n if (error) {\n alertApi.post({\n message: `Failed to trigger alarm. ${error.message}`,\n severity: 'error',\n });\n }\n\n return (\n <Dialog maxWidth=\"md\" open={showDialog} onClose={handleDialog} fullWidth>\n <DialogTitle>\n This action will trigger an incident for <strong>\"{serviceName}\"</strong>.\n </DialogTitle>\n <DialogContent>\n <Alert severity=\"info\">\n <Typography variant=\"body1\" align=\"justify\">\n If the issue you are seeing does not need urgent attention, please\n get in touch with the responsible team using their preferred\n communications channel. You can find information about the owner of\n this entity in the \"About\" card. If the issue is urgent, please\n don't hesitate to trigger the alert.\n </Typography>\n </Alert>\n <Typography\n variant=\"body1\"\n style={{ marginTop: '1em' }}\n gutterBottom\n align=\"justify\"\n >\n Please describe the problem you want to report. Be as descriptive as\n possible. Your signed in user and a reference to the current page will\n automatically be amended to the alarm so that the receiver can reach\n out to you if necessary.\n </Typography>\n <TextField\n inputProps={{ 'data-testid': 'trigger-input' }}\n id=\"description\"\n multiline\n fullWidth\n minRows={4}\n margin=\"normal\"\n label=\"Problem description\"\n variant=\"outlined\"\n onChange={descriptionChanged}\n />\n </DialogContent>\n <DialogActions>\n <Button\n data-testid=\"trigger-button\"\n id=\"trigger\"\n color=\"secondary\"\n disabled={!description || loading}\n variant=\"contained\"\n onClick={() => handleTriggerAlarm(description)}\n endIcon={loading && <CircularProgress size={16} />}\n >\n Trigger Incident\n </Button>\n <Button id=\"close\" color=\"primary\" onClick={handleDialog}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useCallback, useState } from \"react\";\nimport { makeStyles, IconButton } from \"@material-ui/core\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\nimport { TriggerDialog } from \"../TriggerDialog\";\nimport AddAlert from \"@material-ui/icons/AddAlert\";\n\n/** @public */\nexport type TriggerIncidentButtonProps = {\n integrationKey: string | undefined;\n entityName: string;\n compact?: boolean;\n handleRefresh: () => void;\n}\n\n/** @public */\nexport function TriggerIncidentButton({ integrationKey, entityName, compact, handleRefresh } : TriggerIncidentButtonProps) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n buttonStyle: {\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n containerStyle: {\n fontSize: compact !== true ? \"12px\" : \"10px\",\n width: compact !== true ? \"80px\" : \"60px\",\n marginRight: \"-10px\",\n },\n iconStyle: {\n fontSize: \"30px\",\n marginBottom: \"-10px\",\n },\n textStyle: {\n marginBottom: \"-10px\",\n },\n }));\n\n const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();\n const [dialogShown, setDialogShown] = useState<boolean>(false);\n\n const showDialog = useCallback(() => {\n setDialogShown(true);\n }, [setDialogShown]);\n const hideDialog = useCallback(() => {\n setDialogShown(false);\n }, [setDialogShown]);\n \n const disabled = !integrationKey;\n \n return (\n <>\n <IconButton\n aria-label=\"create-incident\"\n onClick={showDialog}\n className={disabled ? \"\" : buttonStyle}\n disabled={disabled}\n >\n <div className={containerStyle}>\n <AddAlert className={iconStyle} />\n <p className={textStyle}>Create new incident</p>\n </div>\n </IconButton>\n {integrationKey && (\n <TriggerDialog\n showDialog={dialogShown}\n handleDialog={hideDialog}\n integrationKey={integrationKey}\n serviceName={entityName}\n onIncidentCreated={handleRefresh}\n />\n )}\n </>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { ReactNode, useCallback, useState } from \"react\";\nimport {\n Card,\n CardHeader,\n Divider,\n CardContent,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport { Incidents } from \"../Incident\";\nimport { EscalationPolicy } from \"../Escalation\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef, UnauthorizedError } from \"../../api\";\nimport { MissingTokenError, ServiceNotFoundError } from \"../Errors\";\nimport { ChangeEvents } from \"../ChangeEvents\";\nimport PDGreenImage from \"../../assets/PD-Green.svg\";\nimport PDWhiteImage from \"../../assets/PD-White.svg\";\n\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { NotFoundError } from \"@backstage/errors\";\nimport {\n Progress,\n TabbedCard,\n CardTab,\n InfoCard,\n} from \"@backstage/core-components\";\nimport { PagerDutyEntity } from \"../../types\";\nimport { ForbiddenError } from \"../Errors/ForbiddenError\";\nimport {\n InsightsCard,\n OpenServiceButton,\n ServiceStandardsCard,\n StatusCard,\n TriggerIncidentButton\n} from \"../PagerDutyCardCommon\";\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { PagerDutyCardServiceResponse } from \"../../api/types\";\n\nconst useStyles = makeStyles<BackstageTheme>((theme) =>\n createStyles({\n overviewHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n color:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.54)\"\n : \"rgba(255, 255, 255, 0.7)\",\n },\n oncallHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n marginTop: \"10px\",\n color:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.54)\"\n : \"rgba(255, 255, 255, 0.7)\",\n },\n headerStyle: {\n marginBottom: \"0px\",\n fontSize: \"0px\",\n },\n overviewHeaderContainerStyle: {\n display: \"flex\",\n margin: \"15px\",\n marginBottom: \"20px\",\n },\n headerWithSubheaderContainerStyle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n subheaderTextStyle: {\n fontSize: \"10px\",\n marginLeft: \"5px\",\n },\n overviewCardsContainerStyle: {\n display: \"flex\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n incidentMetricsContainerStyle: {\n display: \"flex\",\n height: \"100%\",\n justifyContent: \"center\",\n columnSpan: \"all\",\n },\n })\n);\n\nconst BasicCard = ({ children }: { children: ReactNode }) => (\n <InfoCard title=\"PagerDuty\">{children}</InfoCard>\n);\n\n/** @public */\nexport type PagerDutyCardProps = PagerDutyEntity & {\n readOnly?: boolean;\n disableChangeEvents?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const PagerDutyCard = (props: PagerDutyCardProps) => {\n const classes = useStyles();\n\n const theme = useTheme();\n const { readOnly, disableChangeEvents, disableOnCall } = props;\n const api = useApi(pagerDutyApiRef);\n const [refreshIncidents, setRefreshIncidents] = useState<boolean>(false);\n const [refreshChangeEvents, setRefreshChangeEvents] =\n useState<boolean>(false);\n const [refreshStatus, setRefreshStatus] = useState<boolean>(false);\n\n const handleRefresh = useCallback(() => {\n setRefreshIncidents((x) => !x);\n setRefreshChangeEvents((x) => !x);\n setRefreshStatus((x) => !x);\n }, []);\n\n const {\n value: service,\n loading,\n error,\n } = useAsync(async () => {\n const { service: foundService } = await api.getServiceByPagerDutyEntity(\n props\n );\n\n const serviceStandards = await api.getServiceStandardsByServiceId(\n foundService.id\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n name: foundService.name,\n url: foundService.html_url,\n policyId: foundService.escalation_policy.id,\n policyLink: foundService.escalation_policy.html_url as string,\n policyName: foundService.escalation_policy.name,\n status: foundService.status,\n standards:\n serviceStandards !== undefined ? serviceStandards.standards : undefined,\n metrics:\n serviceMetrics !== undefined ? serviceMetrics.metrics : undefined,\n };\n\n return result;\n }, [props]);\n\n if (error) {\n let errorNode: ReactNode;\n\n switch (error.constructor) {\n case UnauthorizedError:\n errorNode = <MissingTokenError />;\n break;\n case NotFoundError:\n errorNode = <ServiceNotFoundError />;\n break;\n default:\n errorNode = <ForbiddenError />;\n }\n\n return <BasicCard>{errorNode}</BasicCard>;\n }\n\n if (loading) {\n return (\n <BasicCard>\n <Progress />\n </BasicCard>\n );\n }\n\n return (\n <Card data-testid=\"pagerduty-card\">\n <CardHeader\n className={classes.headerStyle}\n title={\n theme.palette.type === \"dark\" ? (\n <img src={PDWhiteImage} alt=\"PagerDuty\" height=\"35\" />\n ) : (\n <img src={PDGreenImage} alt=\"PagerDuty\" height=\"35\" />\n )\n }\n action={\n !readOnly && props.integrationKey ? (\n <div>\n <TriggerIncidentButton\n data-testid=\"trigger-incident-button\"\n integrationKey={props.integrationKey}\n entityName={props.name}\n handleRefresh={handleRefresh}\n />\n <OpenServiceButton serviceUrl={service!.url} />\n </div>\n ) : (\n <OpenServiceButton serviceUrl={service!.url} />\n )\n }\n />\n <Grid item md={12} className={classes.overviewHeaderContainerStyle}>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid>\n <Grid item md={6}>\n <span className={classes.headerWithSubheaderContainerStyle}>\n <Typography className={classes.overviewHeaderTextStyle}>\n INSIGHTS\n </Typography>\n <Typography className={classes.subheaderTextStyle}>\n (last 30 days)\n </Typography>\n </span>\n </Grid>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid>\n </Grid>\n <Grid item md={12} className={classes.overviewCardsContainerStyle}>\n <Grid item md={3}>\n <StatusCard serviceId={service!.id} refreshStatus={refreshStatus} />\n </Grid>\n <Grid item md={6} className={classes.incidentMetricsContainerStyle}>\n <Grid item md={4}>\n <InsightsCard\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_interruptions\n : undefined\n }\n label=\"interruptions\"\n color={theme.palette.textSubtle}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_high_urgency_incidents\n : undefined\n }\n label=\"high urgency\"\n color={theme.palette.warning.main}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n count={\n service?.metrics !== undefined && service?.metrics?.length > 0\n ? service?.metrics[0].total_incident_count\n : undefined\n }\n label=\"incidents\"\n color={theme.palette.error.main}\n />\n </Grid>\n </Grid>\n <Grid item md={3}>\n <ServiceStandardsCard\n total={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.total\n : undefined\n }\n completed={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.passing\n : undefined\n }\n standards={\n service?.standards !== undefined\n ? service?.standards?.standards\n : undefined\n }\n />\n </Grid>\n </Grid>\n\n <Divider />\n <CardContent>\n <TabbedCard>\n <CardTab label=\"Incidents\">\n <Incidents\n serviceId={service!.id}\n refreshIncidents={refreshIncidents}\n />\n </CardTab>\n {disableChangeEvents !== true ? (\n <CardTab label=\"Change Events\">\n <ChangeEvents\n data-testid=\"change-events\"\n serviceId={service!.id}\n refreshEvents={refreshChangeEvents}\n />\n </CardTab>\n ) : (\n <></>\n )}\n </TabbedCard>\n {disableOnCall !== true ? (\n <>\n <Typography className={classes.oncallHeaderTextStyle}>\n ON CALL\n </Typography>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n />\n </>\n ) : (\n <></>\n )}\n </CardContent>\n </Card>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Entity } from '@backstage/catalog-model';\nimport { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from '../constants';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { getPagerDutyEntity } from '../pagerDutyEntity';\nimport { PagerDutyCard } from '../PagerDutyCard';\n\n/** @public */\nexport const isPluginApplicableToEntity = (entity: Entity) =>\n Boolean(\n entity.metadata.annotations?.[PAGERDUTY_INTEGRATION_KEY] ||\n entity.metadata.annotations?.[PAGERDUTY_SERVICE_ID],\n );\n\n/** @public */\nexport type EntityPagerDutyCardProps = {\n readOnly?: boolean;\n disableChangeEvents?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const EntityPagerDutyCard = (props: EntityPagerDutyCardProps) => {\n const { readOnly, disableChangeEvents, disableOnCall } = props;\n const { entity } = useEntity();\n const pagerDutyEntity = getPagerDutyEntity(entity);\n return (\n <PagerDutyCard\n {...pagerDutyEntity}\n readOnly={readOnly}\n disableChangeEvents={disableChangeEvents}\n disableOnCall={disableOnCall}\n />\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { ReactNode, useCallback, useState } from \"react\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Card,\n CardHeader,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef, UnauthorizedError } from \"../../api\";\nimport { MissingTokenError, ServiceNotFoundError } from \"../Errors\";\nimport PDGreenImage from \"../../assets/PD-Green.svg\";\nimport PDWhiteImage from \"../../assets/PD-White.svg\";\n\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { NotFoundError } from \"@backstage/errors\";\nimport { Progress, InfoCard } from \"@backstage/core-components\";\nimport { PagerDutyEntity } from \"../../types\";\nimport { ForbiddenError } from \"../Errors/ForbiddenError\";\nimport {\n InsightsCard,\n OpenServiceButton,\n ServiceStandardsCard,\n StatusCard,\n TriggerIncidentButton,\n} from \"../PagerDutyCardCommon\";\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { PagerDutyCardServiceResponse } from \"../../api/types\";\nimport { EscalationPolicy } from \"../Escalation\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\n\nconst useStyles = makeStyles<BackstageTheme>((theme) =>\n createStyles({\n overviewHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n color:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.54)\"\n : \"rgba(255, 255, 255, 0.7)\",\n },\n headerStyle: {\n marginBottom: \"0px\",\n fontSize: \"0px\",\n },\n overviewHeaderContainerStyle: {\n display: \"flex\",\n margin: \"0px\",\n padding: \"15px\",\n marginBottom: \"5px\",\n },\n headerWithSubheaderContainerStyle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n subheaderTextStyle: {\n fontSize: \"10px\",\n marginLeft: \"5px\",\n },\n overviewCardsContainerStyle: {\n display: \"flex\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n onCallAccordionDetails: {\n display: \"flex\",\n width: \"100%\",\n marginTop: \"-25px\",\n marginBottom: \"-15px\",\n },\n incidentMetricsContainerStyle: {\n display: \"flex\",\n height: \"100%\",\n justifyContent: \"center\",\n columnSpan: \"all\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n })\n);\n\nconst BasicCard = ({ children }: { children: ReactNode }) => (\n <InfoCard title=\"PagerDuty\">{children}</InfoCard>\n);\n\n/** @public */\nexport type PagerDutyCardProps = PagerDutyEntity & {\n readOnly?: boolean;\n disableInsights?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const PagerDutySmallCard = (props: PagerDutyCardProps) => {\n const classes = useStyles();\n\n const theme = useTheme();\n const { readOnly, disableInsights, disableOnCall } = props;\n const api = useApi(pagerDutyApiRef);\n const [refreshStatus, setRefreshStatus] = useState<boolean>(false);\n\n const handleRefresh = useCallback(() => {\n setRefreshStatus((x) => !x);\n }, []);\n\n const {\n value: service,\n loading,\n error,\n } = useAsync(async () => {\n const { service: foundService } = await api.getServiceByPagerDutyEntity(\n props\n );\n\n const serviceStandards = await api.getServiceStandardsByServiceId(\n foundService.id\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n name: foundService.name,\n url: foundService.html_url,\n policyId: foundService.escalation_policy.id,\n policyLink: foundService.escalation_policy.html_url as string,\n policyName: foundService.escalation_policy.name,\n status: foundService.status,\n standards:\n serviceStandards !== undefined ? serviceStandards.standards : undefined,\n metrics:\n serviceMetrics !== undefined ? serviceMetrics.metrics : undefined,\n };\n\n return result;\n }, [props]);\n\n if (error) {\n let errorNode: ReactNode;\n\n switch (error.constructor) {\n case UnauthorizedError:\n errorNode = <MissingTokenError />;\n break;\n case NotFoundError:\n errorNode = <ServiceNotFoundError />;\n break;\n default:\n errorNode = <ForbiddenError />;\n }\n\n return <BasicCard>{errorNode}</BasicCard>;\n }\n\n if (loading) {\n return (\n <BasicCard>\n <Progress />\n </BasicCard>\n );\n }\n\n return (\n <Card data-testid=\"pagerduty-card\">\n <CardHeader\n className={classes.headerStyle}\n title={\n theme.palette.type === \"dark\" ? (\n <img src={PDWhiteImage} alt=\"PagerDuty\" height=\"25\" />\n ) : (\n <img src={PDGreenImage} alt=\"PagerDuty\" height=\"25\" />\n )\n }\n action={\n !readOnly && props.integrationKey ? (\n <div>\n <TriggerIncidentButton\n compact\n data-testid=\"trigger-incident-button\"\n integrationKey={props.integrationKey}\n entityName={props.name}\n handleRefresh={handleRefresh}\n />\n <OpenServiceButton compact serviceUrl={service!.url} />\n </div>\n ) : (\n <OpenServiceButton compact serviceUrl={service!.url} />\n )\n }\n />\n <Grid item md={12} className={classes.overviewHeaderContainerStyle}>\n <Grid item md={6}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid>\n <Grid item md={6}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid>\n </Grid>\n\n <Grid item md={12} className={classes.overviewCardsContainerStyle}>\n <Grid item md={6}>\n <StatusCard compact serviceId={service!.id} refreshStatus={refreshStatus} />\n </Grid>\n <Grid item md={6}>\n <ServiceStandardsCard\n compact\n total={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.total\n : undefined\n }\n completed={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.passing\n : undefined\n }\n standards={\n service?.standards !== undefined\n ? service?.standards?.standards\n : undefined\n }\n />\n </Grid>\n </Grid>\n {disableInsights !== true ? (\n <Accordion>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <span className={classes.headerWithSubheaderContainerStyle}>\n <Typography className={classes.overviewHeaderTextStyle}>\n INSIGHTS\n </Typography>\n <Typography className={classes.subheaderTextStyle}>\n (last 30 days)\n </Typography>\n </span>\n </AccordionSummary>\n <AccordionDetails>\n <Grid\n item\n md={12}\n className={classes.incidentMetricsContainerStyle}\n >\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_interruptions\n : undefined\n }\n label=\"interruptions\"\n color={theme.palette.textSubtle}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_high_urgency_incidents\n : undefined\n }\n label=\"high urgency\"\n color={theme.palette.warning.main}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined &&\n service?.metrics?.length > 0\n ? service?.metrics[0].total_incident_count\n : undefined\n }\n label=\"incidents\"\n color={theme.palette.error.main}\n />\n </Grid>\n </Grid>\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n\n {disableOnCall !== true ? (\n <Accordion>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <Typography className={classes.overviewHeaderTextStyle}>\n ON CALL\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.onCallAccordionDetails}>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n />\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n </Card>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Entity } from '@backstage/catalog-model';\nimport { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from '../constants';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { getPagerDutyEntity } from '../pagerDutyEntity';\nimport { PagerDutySmallCard } from '../PagerDutySmallCard';\n\n/** @public */\nexport const isPluginApplicableToEntity = (entity: Entity) =>\n Boolean(\n entity.metadata.annotations?.[PAGERDUTY_INTEGRATION_KEY] ||\n entity.metadata.annotations?.[PAGERDUTY_SERVICE_ID],\n );\n\n/** @public */\nexport type EntityPagerDutySmallCardProps = {\n readOnly?: boolean;\n disableInsights?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const EntityPagerDutySmallCard = (props: EntityPagerDutySmallCardProps) => {\n const { readOnly, disableInsights, disableOnCall } = props;\n const { entity } = useEntity();\n const pagerDutyEntity = getPagerDutyEntity(entity);\n return (\n <PagerDutySmallCard\n {...pagerDutyEntity}\n readOnly={readOnly}\n disableInsights={disableInsights}\n disableOnCall={disableOnCall}\n />\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { catalogApiRef, useEntity } from '@backstage/plugin-catalog-react';\nimport { PagerDutyEntity } from '../types';\nimport { getPagerDutyEntity } from '../components/pagerDutyEntity';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { useAsync } from 'react-use';\nimport { Entity } from '@backstage/catalog-model';\n\nexport function usePagerdutyEntity(): PagerDutyEntity {\n const { entity } = useEntity();\n\n return getPagerDutyEntity(entity);\n}\n\nexport function useCatalogEntities() : Entity[] {\n const catalogApi = useApi(catalogApiRef);\n\n const { value: entities, error, loading } = useAsync( async () => catalogApi.getEntities({\n filter: {\n kind: 'Component',\n },\n }), []);\n\n if (error) {\n throw error;\n }\n\n if (loading) {\n return [];\n }\n\n return entities?.items || []; \n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useCallback, ReactNode, useState } from 'react';\nimport { makeStyles, Button } from '@material-ui/core';\nimport { BackstageTheme } from '@backstage/theme';\n\nimport { usePagerdutyEntity } from '../../hooks';\nimport { TriggerDialog } from '../TriggerDialog';\n\nconst useStyles = makeStyles<BackstageTheme>(theme => ({\n buttonStyle: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.error.dark,\n },\n },\n}));\n\n/** @public */\nexport function TriggerButton(props: { children?: ReactNode }) {\n const { buttonStyle } = useStyles();\n const { integrationKey, name } = usePagerdutyEntity();\n const [dialogShown, setDialogShown] = useState<boolean>(false);\n\n const showDialog = useCallback(() => {\n setDialogShown(true);\n }, [setDialogShown]);\n const hideDialog = useCallback(() => {\n setDialogShown(false);\n }, [setDialogShown]);\n\n const disabled = !integrationKey;\n return (\n <>\n <Button\n onClick={showDialog}\n variant=\"contained\"\n className={disabled ? '' : buttonStyle}\n disabled={disabled}\n >\n {integrationKey\n ? props.children ?? 'Create new incident'\n : 'Missing integration key'}\n </Button>\n {integrationKey && (\n <TriggerDialog\n showDialog={dialogShown}\n handleDialog={hideDialog}\n integrationKey={integrationKey}\n serviceName={name}\n />\n )}\n </>\n );\n}\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EntityPagerDutyCardProps, EntityPagerDutyCard } from './components';\n\n/**\n * @public\n * @deprecated Please use EntityPagerDutyCard\n */\nexport const PagerDutyCard = EntityPagerDutyCard;\n\n/**\n * @public\n * @deprecated Please use EntityPagerDutyCardProps\n */\nexport type PagerDutyCardProps = EntityPagerDutyCardProps;\n"],"names":["ForbiddenError","EntityPagerDutyCard","EntityPagerDutySmallCard","useStyles","OpenInBrowser","useAsyncFn","makeStyles","Alert","createStyles","BasicCard","PagerDutyCard","InsightsCard","isPluginApplicableToEntity"],"mappings":"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"}
1
+ {"version":3,"file":"index-fdce978d.esm.js","sources":["../../src/components/constants.ts","../../src/components/pagerDutyEntity.ts","../../src/api/client.ts","../../src/plugin.ts","../../src/components/Incident/IncidentListItem.tsx","../../src/components/Incident/IncidentEmptyState.tsx","../../src/components/Incident/IncidentForbiddenState.tsx","../../src/components/Incident/Incidents.tsx","../../src/components/Escalation/EscalationUsersEmptyState.tsx","../../src/components/Escalation/EscalationUsersForbiddenState.tsx","../../src/components/Escalation/EscalationUser.tsx","../../src/components/Escalation/EscalationPolicy.tsx","../../src/components/Errors/MissingTokenError.tsx","../../src/components/Errors/ServiceNotFoundError.tsx","../../src/components/ChangeEvents/ChangeEventListItem.tsx","../../src/components/ChangeEvents/ChangeEventEmptyState.tsx","../../src/components/ChangeEvents/ChangeEventForbiddenState.tsx","../../src/components/ChangeEvents/ChangeEvents.tsx","../../src/components/Errors/ForbiddenError.tsx","../../src/components/PagerDutyCardCommon/InsightsCard.tsx","../../src/components/PagerDutyCardCommon/OpenServiceButton.tsx","../../src/components/PagerDutyCardCommon/ServiceStandardsCard.tsx","../../src/components/PagerDutyCardCommon/StatusCard.tsx","../../src/components/TriggerDialog/TriggerDialog.tsx","../../src/components/PagerDutyCardCommon/TriggerIncidentButton.tsx","../../src/components/PagerDutyCard/index.tsx","../../src/components/EntityPagerDutyCard/index.tsx","../../src/components/PagerDutySmallCard/index.tsx","../../src/components/EntityPagerDutySmallCard/index.tsx","../../src/hooks/index.ts","../../src/components/TriggerButton/index.tsx","../../src/deprecated.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const PAGERDUTY_INTEGRATION_KEY = 'pagerduty.com/integration-key';\nexport const PAGERDUTY_SERVICE_ID = 'pagerduty.com/service-id';\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { PagerDutyEntity } from '../types';\nimport { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from './constants';\n\nexport function getPagerDutyEntity(entity: Entity): PagerDutyEntity {\n const {\n [PAGERDUTY_INTEGRATION_KEY]: integrationKey,\n [PAGERDUTY_SERVICE_ID]: serviceId,\n } = entity.metadata.annotations || ({} as Record<string, string>);\n const name = entity.metadata.name;\n\n return { integrationKey, serviceId, name };\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n PagerDutyApi,\n PagerDutyTriggerAlarmRequest,\n PagerDutyClientApiDependencies,\n PagerDutyClientApiConfig,\n RequestOptions,\n} from './types';\nimport { PagerDutyChangeEventsResponse, \n PagerDutyOnCallUsersResponse, \n PagerDutyUser, \n PagerDutyServiceResponse,\n PagerDutyIncidentsResponse,\n PagerDutyServiceStandardsResponse,\n PagerDutyServiceMetricsResponse,\n PagerDutyEntityMappingResponse\n} from '@pagerduty/backstage-plugin-common';\nimport { createApiRef, ConfigApi } from '@backstage/core-plugin-api';\nimport { NotFoundError } from '@backstage/errors';\nimport { Entity } from '@backstage/catalog-model';\nimport { getPagerDutyEntity } from '../components/pagerDutyEntity';\nimport { PagerDutyEntity } from '../types';\n\n/** @public */\nexport class UnauthorizedError extends Error {}\n\n/** @public */\nexport class ForbiddenError extends Error { }\n\n/** @public */\nexport const pagerDutyApiRef = createApiRef<PagerDutyApi>({\n id: 'plugin.pagerduty.api',\n});\n\n/** @public */\nexport class PagerDutyClient implements PagerDutyApi {\n static fromConfig(\n configApi: ConfigApi,\n dependencies: PagerDutyClientApiDependencies,\n ) {\n const { discoveryApi, fetchApi } = dependencies;\n\n const eventsBaseUrl: string =\n configApi.getOptionalString('pagerDuty.eventsBaseUrl') ??\n 'https://events.pagerduty.com/v2';\n\n return new PagerDutyClient({\n eventsBaseUrl,\n discoveryApi,\n fetchApi,\n });\n }\n\n constructor(private readonly config: PagerDutyClientApiConfig) {}\n\n async getServiceByPagerDutyEntity(\n pagerDutyEntity: PagerDutyEntity,\n ): Promise<PagerDutyServiceResponse> {\n const { integrationKey, serviceId } = pagerDutyEntity;\n\n let response: PagerDutyServiceResponse;\n let url: string;\n\n if (integrationKey) {\n url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services?integration_key=${integrationKey}`;\n const serviceResponse = await this.findByUrl<PagerDutyServiceResponse>(url);\n\n if (serviceResponse.service === undefined) throw new NotFoundError();\n\n response = serviceResponse;\n } else if (serviceId) {\n url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}`;\n\n response = await this.findByUrl<PagerDutyServiceResponse>(url);\n } else {\n throw new NotFoundError();\n }\n\n return response;\n }\n\n async getEntityMappings(): Promise<PagerDutyEntityMappingResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n return await this.findByUrl<PagerDutyEntityMappingResponse>(url);\n }\n\n async storeServiceMapping(serviceId: string, backstageEntityId: string): Promise<Response> {\n\n const body = JSON.stringify({\n entityRef: backstageEntityId,\n serviceId: serviceId,\n });\n\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n body,\n };\n\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n return this.request(url, options);\n }\n\n async getServiceByEntity(entity: Entity): Promise<PagerDutyServiceResponse> {\n return await this.getServiceByPagerDutyEntity(getPagerDutyEntity(entity));\n }\n\n async getServiceById(serviceId: string): Promise<PagerDutyServiceResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}`;\n\n return await this.findByUrl<PagerDutyServiceResponse>(url);\n }\n\n async getIncidentsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyIncidentsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/incidents`;\n\n return await this.findByUrl<PagerDutyIncidentsResponse>(url);\n }\n\n async getChangeEventsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyChangeEventsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/change-events`;\n\n return await this.findByUrl<PagerDutyChangeEventsResponse>(url);\n }\n\n async getServiceStandardsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyServiceStandardsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/standards`;\n\n return await this.findByUrl<PagerDutyServiceStandardsResponse>(url);\n }\n\n async getServiceMetricsByServiceId(\n serviceId: string,\n ): Promise<PagerDutyServiceMetricsResponse> {\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}/metrics`;\n\n return await this.findByUrl<PagerDutyServiceMetricsResponse>(url);\n }\n\n async getOnCallByPolicyId(\n policyId: string,\n ): Promise<PagerDutyUser[]> {\n const params = `escalation_policy_ids[]=${policyId}`;\n const url = `${await this.config.discoveryApi.getBaseUrl(\n 'pagerduty',\n )}/oncall-users?${params}`;\n\n const response: PagerDutyOnCallUsersResponse = await this.findByUrl<PagerDutyOnCallUsersResponse>(url);\n return response.users;\n }\n\n triggerAlarm(request: PagerDutyTriggerAlarmRequest): Promise<Response> {\n const { integrationKey, source, description, userName } = request;\n\n const body = JSON.stringify({\n event_action: 'trigger',\n routing_key: integrationKey,\n client: 'Backstage',\n client_url: source,\n payload: {\n summary: description,\n source: source,\n severity: 'error',\n class: 'manual trigger',\n custom_details: {\n user: userName,\n },\n },\n });\n\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n body,\n };\n\n const url = this.config.eventsBaseUrl ?? 'https://events.pagerduty.com/v2';\n\n return this.request(`${url}/enqueue`, options);\n }\n\n private async findByUrl<T>(url: string): Promise<T> {\n const options = {\n method: 'GET',\n headers: {\n Accept: 'application/vnd.pagerduty+json;version=2',\n 'Content-Type': 'application/json',\n },\n };\n const response = await this.request(url, options);\n return response.json();\n }\n\n private async request(\n url: string,\n options: RequestOptions,\n ): Promise<Response> {\n const response = await this.config.fetchApi.fetch(url, options);\n if (response.status === 401) {\n throw new UnauthorizedError(\"Unauthorized: You don't have access to this resource\");\n }\n\n if (response.status === 403) {\n throw new ForbiddenError(\"Forbidden: You are not allowed to perform this action\");\n }\n\n if (response.status === 404) {\n throw new NotFoundError(\"Not Found: Resource not found\");\n }\n\n if (!response.ok) {\n const payload = await response.json();\n const errors = payload.errors.map((error: string) => error).join(' ');\n const message = `Request failed with ${response.status}, ${errors}`;\n throw new Error(message);\n }\n return response;\n }\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { pagerDutyApiRef, PagerDutyClient } from './api';\nimport {\n createApiFactory,\n createPlugin,\n createRouteRef,\n discoveryApiRef,\n fetchApiRef,\n configApiRef,\n createComponentExtension,\n createRoutableExtension,\n} from '@backstage/core-plugin-api';\nimport { createCardExtension } from '@backstage/plugin-home-react';\nimport { HomePagePagerDutyCardProps } from './components/HomePagePagerDutyCard/Content';\n\nexport const rootRouteRef = createRouteRef({\n id: 'pagerduty',\n});\n\n/** @public */\nexport const pagerDutyPlugin = createPlugin({\n id: 'pagerduty',\n apis: [\n createApiFactory({\n api: pagerDutyApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n configApi: configApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n PagerDutyClient.fromConfig(configApi, { discoveryApi, fetchApi }),\n }),\n ],\n});\n\n/** @public */\nexport const PagerDutyPage = pagerDutyPlugin.provide(\n createRoutableExtension({\n name: 'PagerDutyPage',\n component: () => import('./components/PagerDutyPage').then(m => m.PagerDutyPage),\n mountPoint: rootRouteRef,\n })\n)\n\n/** @public */\nexport const EntityPagerDutyCard = pagerDutyPlugin.provide(\n createComponentExtension({\n name: 'EntityPagerDutyCard',\n component: {\n lazy: () =>\n import('./components/EntityPagerDutyCard').then(\n m => m.EntityPagerDutyCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityPagerDutySmallCard = pagerDutyPlugin.provide(\n createComponentExtension({\n name: 'EntityPagerDutySmallCard',\n component: {\n lazy: () =>\n import('./components/EntityPagerDutySmallCard').then(\n m => m.EntityPagerDutySmallCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const HomePagePagerDutyCard = pagerDutyPlugin.provide(\n createCardExtension<HomePagePagerDutyCardProps>({\n name: 'HomePagePagerDutyCard',\n title: 'PagerDuty Homepage Card',\n components: () => import('./components/HomePagePagerDutyCard'),\n settings: {\n schema: {\n title: 'PagerDuty',\n type: 'object',\n properties: {\n integrationKey: {\n title: 'PagerDuty integration key',\n type: 'string',\n },\n serviceId: {\n title: 'PagerDuty service id',\n type: 'string',\n },\n name: {\n title: 'PagerDuty service name',\n type: 'string',\n },\n },\n },\n },\n }),\n);\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemSecondaryAction,\n Tooltip,\n ListItemText,\n makeStyles,\n IconButton,\n Typography,\n Chip,\n} from '@material-ui/core';\nimport { DateTime, Duration } from 'luxon';\nimport { PagerDutyIncident } from '@pagerduty/backstage-plugin-common';\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\nimport { BackstageTheme } from '@backstage/theme';\nimport { Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles<BackstageTheme>((theme) => ({\n denseListIcon: {\n marginRight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n listItemPrimary: {\n fontWeight: \"bold\",\n },\n warning: {\n borderColor: theme.palette.warning.main,\n color: \"#fff\",\n backgroundColor: theme.palette.warning.main,\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: \"#fff\",\n },\n },\n error: {\n borderColor: theme.palette.error.main,\n color: \"#fff\",\n backgroundColor: theme.palette.error.main,\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: \"#fff\",\n },\n },\n lowUrgency: {\n borderColor: theme.palette.warning.main,\n color: theme.palette.warning.main,\n backgroundColor: \"#fff\",\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: theme.palette.warning.main,\n },\n },\n highUrgency: {\n borderColor: theme.palette.error.main,\n color: theme.palette.error.main,\n backgroundColor: \"#fff\",\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: theme.palette.error.main,\n },\n },\n textContainer: {\n display: \"flex\",\n alignItems: \"baseline\",\n },\n smallIconStyle: {\n color: theme.palette.text.primary,\n marginRight: \"-20px\",\n },\n}));\n\ntype Props = {\n incident: PagerDutyIncident;\n};\n\nexport const IncidentListItem = ({ incident }: Props) => {\n const classes = useStyles();\n const duration =\n new Date().getTime() - new Date(incident.created_at).getTime();\n const createdAt = DateTime.local()\n .minus(Duration.fromMillis(duration))\n .toRelative({ locale: 'en' });\n const user = incident.assignments[0]?.assignee;\n\n return (\n <ListItem dense key={incident.id}>\n <ListItemText\n primary={\n <div className={classes.textContainer}>\n <Chip\n data-testid={`chip-${incident.status}`}\n label={incident.status}\n size=\"small\"\n variant=\"outlined\"\n className={\n incident.status === \"triggered\"\n ? classes.error\n : classes.warning\n }\n />\n <Chip\n data-testid={`chip-${incident.urgency}`}\n label={`${incident.urgency} urgency`}\n size=\"small\"\n variant=\"outlined\"\n className={\n incident.urgency === \"high\"\n ? classes.highUrgency\n : classes.lowUrgency\n }\n />\n {incident.title}\n </div>\n }\n primaryTypographyProps={{\n variant: \"body1\",\n className: classes.listItemPrimary,\n }}\n secondary={\n <Typography noWrap variant=\"body2\" color=\"textSecondary\">\n Created {createdAt} and assigned to{\" \"}\n <Link to={user?.html_url ?? \"#\"}>{user?.summary ?? \"nobody\"}</Link>\n </Typography>\n }\n />\n <ListItemSecondaryAction>\n <Tooltip title=\"View in PagerDuty\" placement=\"top\">\n <IconButton\n href={incident.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classes.smallIconStyle}\n >\n <OpenInBrowserIcon />\n </IconButton>\n </Tooltip>\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport EmptyStateImage from \"../../assets/emptystate.svg\";\n\nexport const IncidentsEmptyState = () => {\n return (\n <Grid\n container\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n >\n <Grid item xs={12}>\n <Typography variant=\"h5\">Nice! No incidents found!</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={EmptyStateImage}\n alt=\"EmptyState\"\n data-testid=\"emptyStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport ForbiddenStateImage from '../../assets/forbiddenstate.svg';\n\nexport const IncidentForbiddenState = () => {\n return (\n <Grid container justifyContent=\"center\" direction=\"column\" alignItems=\"center\">\n <Grid item xs={12}>\n <Typography variant=\"h5\">Feature not available with your account or token.</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={ForbiddenStateImage}\n alt=\"ForbiddenState\"\n data-testid=\"forbiddenStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useEffect } from 'react';\nimport { List } from '@material-ui/core';\nimport { IncidentListItem } from './IncidentListItem';\nimport { IncidentsEmptyState } from './IncidentEmptyState';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { Alert } from '@material-ui/lab';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Progress } from '@backstage/core-components';\nimport { IncidentForbiddenState } from './IncidentForbiddenState';\n\ntype Props = {\n serviceId: string;\n refreshIncidents: boolean;\n};\n\nexport const Incidents = ({ serviceId, refreshIncidents }: Props) => {\n const api = useApi(pagerDutyApiRef);\n\n const [{ value: incidents, loading, error }, getIncidents] = useAsyncFn(\n async () => {\n const { incidents: foundIncidents } = await api.getIncidentsByServiceId(\n serviceId,\n );\n return foundIncidents;\n },\n );\n\n useEffect(() => {\n getIncidents();\n }, [refreshIncidents, getIncidents]);\n\n if (error) {\n if (error.message.includes('Forbidden')) {\n return <IncidentForbiddenState />;\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!incidents?.length) {\n return <IncidentsEmptyState />;\n }\n\n return (\n <List dense>\n {incidents!.map((incident, index) => (\n <IncidentListItem key={incident.id + index} incident={incident} />\n ))}\n </List>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport { StatusWarning } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n denseListIcon: {\n marginRight: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport const EscalationUsersEmptyState = () => {\n const classes = useStyles();\n return (\n <ListItem>\n <ListItemIcon>\n <div className={classes.denseListIcon}>\n <StatusWarning />\n </div>\n </ListItemIcon>\n <ListItemText primary=\"No one is on-call. Update the escalation policy.\" />\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport { StatusError } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n denseListIcon: {\n marginRight: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport const EscalationUsersForbiddenState = () => {\n const classes = useStyles();\n return (\n <ListItem>\n <ListItemIcon>\n <div className={classes.denseListIcon}>\n <StatusError />\n </div>\n </ListItemIcon>\n <ListItemText primary=\"You don't permissions to list on-calls. Check your OAuth token permissions.\" />\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport {\n ListItem,\n ListItemIcon,\n Tooltip,\n ListItemText,\n makeStyles,\n IconButton,\n Typography,\n} from '@material-ui/core';\nimport Avatar from '@material-ui/core/Avatar';\nimport { PagerDutyUser } from '@pagerduty/backstage-plugin-common';\nimport NotificationsIcon from \"@material-ui/icons/Notifications\";\nimport { BackstageTheme } from '@backstage/theme';\n\nconst useStyles = makeStyles<BackstageTheme>((theme) => ({\n listItemPrimary: {\n fontWeight: \"bold\",\n },\n listItemSecondary: {\n fontWeight: \"normal\",\n textDecoration: \"underline\",\n marginTop: \"-5px\",\n },\n buttonStyle: {\n marginLeft: \"-11px\",\n marginTop: \"-10px\",\n fontSize: \"15px\",\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n userTextButtonStyle: {\n marginLeft: \"-11px\",\n marginTop: \"-10px\",\n marginBottom: \"-10px\",\n fontSize: \"15px\",\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n containerStyle: {\n display: \"flex\",\n alignItems: \"center\",\n fontWeight: \"bold\",\n },\n iconStyle: {\n fontSize: \"25px\",\n marginLeft: \"-4px\",\n color: theme.palette.text.primary,\n },\n smallIconStyle: {\n color: theme.palette.text.primary,\n },\n avatarStyle: {\n marginTop: \"-20px\",\n },\n}));\n\ntype Props = {\n user: PagerDutyUser;\n policyUrl: string;\n policyName: string;\n};\n\nfunction navigateToUrl(url: string) {\n // open url in new browser window\n window.open(url, \"_blank\");\n}\n\nexport const EscalationUser = ({ user, policyUrl, policyName }: Props) => {\n const classes = useStyles();\n\n return (\n <ListItem>\n <ListItemIcon>\n <Avatar\n alt={user.name}\n src={user.avatar_url}\n className={classes.avatarStyle}\n />\n </ListItemIcon>\n <ListItemText\n primary={\n <>\n <Tooltip title=\"Open user in PagerDuty\" placement=\"top\">\n <IconButton\n aria-label=\"open-user-in-browser\"\n onClick={() => navigateToUrl(user.html_url)}\n className={classes.userTextButtonStyle}\n >\n <span className={classes.containerStyle}>{user.name}</span>\n </IconButton>\n </Tooltip>\n\n <Typography\n className={classes.listItemSecondary}\n color=\"textSecondary\"\n >\n {user.email}\n </Typography>\n </>\n }\n secondary={\n <IconButton\n aria-label=\"open-escalation-policy-in-browser\"\n onClick={() => navigateToUrl(policyUrl)}\n className={classes.buttonStyle}\n >\n <span className={classes.containerStyle}>\n <NotificationsIcon className={classes.iconStyle} />\n {policyName}\n </span>\n </IconButton>\n }\n />\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from \"react\";\nimport { List, ListSubheader, createStyles, makeStyles } from \"@material-ui/core\";\nimport { EscalationUsersEmptyState } from \"./EscalationUsersEmptyState\";\nimport { EscalationUsersForbiddenState } from \"./EscalationUsersForbiddenState\";\nimport { EscalationUser } from \"./EscalationUser\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef } from \"../../api\";\nimport { Alert } from \"@material-ui/lab\";\n\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { Progress } from \"@backstage/core-components\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\ntype Props = {\n policyId: string;\n policyUrl: string;\n policyName: string;\n};\nconst useStyles = makeStyles<BackstageTheme>(() =>\n createStyles({\n listStyle: {\n marginLeft: \"-15px\",\n },\n })\n);\n\nexport const EscalationPolicy = ({\n policyId,\n policyUrl,\n policyName,\n}: Props) => {\n const api = useApi(pagerDutyApiRef);\n const classes = useStyles();\n\n const {\n value: users,\n loading,\n error,\n } = useAsync(async () => {\n return await api.getOnCallByPolicyId(policyId);\n });\n\n if (error) {\n if (error.message.includes(\"Forbidden\")) {\n return (\n <List dense subheader={<ListSubheader>ON CALL</ListSubheader>}>\n <EscalationUsersForbiddenState />\n </List>\n );\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!users?.length) {\n return <EscalationUsersEmptyState />;\n }\n\n return (\n <List\n dense\n className={classes.listStyle}\n >\n {users!.map((user, index) => (\n <EscalationUser\n key={index}\n user={user}\n policyUrl={policyUrl}\n policyName={policyName}\n />\n ))}\n </List>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Button } from '@material-ui/core';\nimport { EmptyState } from '@backstage/core-components';\n\nexport const MissingTokenError = () => (\n <EmptyState\n missing=\"info\"\n title=\"Missing or invalid PagerDuty Token\"\n description=\"The request to fetch data needs a valid token. See README for more details.\"\n action={\n <Button\n color=\"primary\"\n variant=\"contained\"\n href=\"https://pagerduty.github.io/backstage-plugin-docs/getting-started/pagerduty/\"\n >\n Read More\n </Button>\n }\n />\n);\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Button } from '@material-ui/core';\nimport { EmptyState } from '@backstage/core-components';\n\nexport const ServiceNotFoundError = () => (\n <EmptyState\n missing=\"data\"\n title=\"PagerDuty Service Not Found\"\n description=\"A service could not be found within PagerDuty based on the provided service id. Please verify your configuration.\"\n action={\n <Button\n color=\"primary\"\n variant=\"contained\"\n href=\"https://pagerduty.github.io/backstage-plugin-docs/getting-started/pagerduty/\"\n >\n Read More\n </Button>\n }\n />\n);\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Link } from '@backstage/core-components';\nimport {\n ListItem,\n ListItemSecondaryAction,\n Tooltip,\n ListItemText,\n makeStyles,\n IconButton,\n Typography,\n} from '@material-ui/core';\nimport { DateTime, Duration } from 'luxon';\nimport { PagerDutyChangeEvent } from '@pagerduty/backstage-plugin-common';\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\nimport LinkIcon from '@material-ui/icons/Link';\nimport { BackstageTheme } from '@backstage/theme';\n\nconst useStyles = makeStyles<BackstageTheme>((theme) => ({\n denseListIcon: {\n marginRight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n listItemPrimary: {\n fontWeight: \"bold\",\n },\n smallExternalLinkIconStyle: {\n color: theme.palette.text.primary,\n },\n smallExternalLinkWithoutMarginIconStyle: {\n color: theme.palette.text.primary,\n marginRight: \"-20px\",\n },\n smallIconStyle: {\n color: theme.palette.text.primary,\n marginRight: \"-20px\",\n },\n}));\n\ntype Props = {\n changeEvent: PagerDutyChangeEvent;\n};\n\nexport const ChangeEventListItem = ({ changeEvent }: Props) => {\n const classes = useStyles();\n const duration =\n new Date().getTime() - new Date(changeEvent.timestamp).getTime();\n const changedAt = DateTime.local()\n .minus(Duration.fromMillis(duration))\n .toRelative({ locale: 'en' });\n \n let externalLinkElem: JSX.Element | undefined;\n if (changeEvent.links.length > 0) {\n const text: string = changeEvent.links[0].text;\n externalLinkElem = (\n <Tooltip title={text} placement=\"top\">\n <IconButton\n component={Link}\n to={changeEvent.links[0].href}\n className={\n changeEvent.html_url === undefined\n ? classes.smallExternalLinkWithoutMarginIconStyle\n : classes.smallExternalLinkIconStyle\n }\n >\n <LinkIcon />\n </IconButton>\n </Tooltip>\n );\n }\n\n return (\n <ListItem dense key={changeEvent.id}>\n <ListItemText\n primary={<>{changeEvent.summary}</>}\n primaryTypographyProps={{\n variant: 'body1',\n className: classes.listItemPrimary,\n }}\n secondary={\n <Typography variant=\"body2\" color=\"textSecondary\">\n Triggered from {changeEvent.source} {changedAt}.\n </Typography>\n }\n />\n <ListItemSecondaryAction>\n {externalLinkElem}\n {changeEvent.html_url === undefined ? null : (\n <Tooltip title=\"View in PagerDuty\" placement=\"top\">\n <IconButton\n component={Link}\n to={changeEvent.html_url}\n className={classes.smallIconStyle}\n >\n <OpenInBrowserIcon />\n </IconButton>\n </Tooltip>\n )}\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport EmptyStateImage from '../../assets/emptystate.svg';\n\nexport const ChangeEventEmptyState = () => {\n return (\n <Grid container justifyContent=\"center\" direction=\"column\" alignItems=\"center\">\n <Grid item xs={12}>\n <Typography variant=\"h5\">No change events to display yet.</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={EmptyStateImage}\n alt=\"EmptyState\"\n data-testid=\"emptyStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Grid, Typography } from '@material-ui/core';\nimport ForbiddenStateImage from '../../assets/forbiddenstate.svg';\n\nexport const ChangeEventForbiddenState = () => {\n return (\n <Grid container justifyContent=\"center\" direction=\"column\" alignItems=\"center\">\n <Grid item xs={12}>\n <Typography variant=\"h5\">Feature not available with your account or token.</Typography>\n </Grid>\n <Grid item xs={12}>\n <img\n src={ForbiddenStateImage}\n alt=\"ForbiddenState\"\n data-testid=\"forbiddenStateImg\"\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useEffect } from 'react';\nimport { List } from '@material-ui/core';\nimport { ChangeEventListItem } from './ChangeEventListItem';\nimport { ChangeEventEmptyState } from './ChangeEventEmptyState';\nimport { ChangeEventForbiddenState } from './ChangeEventForbiddenState';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Progress } from '@backstage/core-components';\nimport { Alert } from '@material-ui/lab';\n\ntype Props = {\n serviceId: string;\n refreshEvents: boolean;\n};\n\nexport const ChangeEvents = ({ serviceId, refreshEvents }: Props) => {\n const api = useApi(pagerDutyApiRef);\n\n const [{ value: changeEvents, loading, error }, getChangeEvents] = useAsyncFn(\n async () => {\n const { change_events } = await api.getChangeEventsByServiceId(serviceId);\n return change_events;\n },\n );\n\n useEffect(() => {\n getChangeEvents();\n }, [refreshEvents, getChangeEvents]);\n\n if (error) {\n if (error.message.includes('Forbidden')) {\n return <ChangeEventForbiddenState />;\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!changeEvents?.length) {\n return <ChangeEventEmptyState />;\n }\n\n return (\n <List dense>\n {changeEvents!.map((changeEvent, index) => (\n <ChangeEventListItem\n key={changeEvent.id + index}\n changeEvent={changeEvent}\n />\n ))}\n </List>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Button } from '@material-ui/core';\nimport { EmptyState } from '@backstage/core-components';\n\nexport const ForbiddenError = () => (\n <EmptyState\n missing=\"info\"\n title=\"Unauthorized\"\n description=\"You don't have the required permissions to perform this action. See README for more details.\"\n action={\n <Button\n color=\"primary\"\n variant=\"contained\"\n href=\"https://pagerduty.github.io/backstage-plugin-docs/getting-started/pagerduty/\"\n >\n Read More\n </Button>\n }\n />\n);\n","import { BackstageTheme } from \"@backstage/theme\";\nimport { Card, Typography, makeStyles } from \"@material-ui/core\";\nimport React from \"react\";\nimport validateColor from \"validate-color\";\n\ntype Props = {\n count: number | undefined;\n label: string;\n color: string;\n compact?: boolean;\n};\n\nfunction IncidentCounterCard({ count, label, color, compact }: Props) {\n\n const textColor = color && validateColor(color) ? color : \"black\";\n\n const useStyles = makeStyles<BackstageTheme>(() => ({\n cardStyle: {\n marginRight: \"10px\",\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n largeTextStyle: {\n color: textColor,\n fontSize: \"30px\",\n marginTop: \"-10px\",\n },\n smallTextStyle: {\n color: textColor,\n fontWeight: \"bold\",\n fontSize: \"10px\",\n marginTop: \"-5px\",\n textTransform: \"uppercase\",\n flexWrap: \"wrap\",\n },\n }));\n\n const { cardStyle, largeTextStyle, smallTextStyle } = useStyles();\n\n return (\n <Card className={cardStyle}>\n {(count !== undefined) ? (\n <>\n <Typography className={largeTextStyle}>{count}</Typography>\n <Typography className={smallTextStyle}>{label}</Typography>\n </>\n ) : (\n <>\n <Typography className={largeTextStyle}>-</Typography>\n <Typography className={smallTextStyle}>{label}</Typography>\n </>\n )}\n </Card>\n );\n}\n\nexport default IncidentCounterCard;\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from \"react\";\nimport { makeStyles, IconButton } from \"@material-ui/core\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\nimport OpenInBrowser from \"@material-ui/icons/OpenInBrowser\";\n\ntype OpenServiceButtonProps = {\n serviceUrl: string;\n compact?: boolean;\n};\n\n/** @public */\nexport function OpenServiceButton({ serviceUrl, compact }: OpenServiceButtonProps) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n buttonStyle: {\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n containerStyle: {\n fontSize: compact !== true ? \"12px\" : \"10px\",\n width: compact !== true ? \"85px\" : \"70px\",\n },\n iconStyle: {\n fontSize: \"30px\",\n marginBottom: \"-10px\",\n },\n textStyle: {\n marginBottom: \"-10px\",\n },\n }));\n\n const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();\n\n function navigateToService() {\n window.open(serviceUrl, \"_blank\");\n }\n\n return (\n <>\n <IconButton\n aria-label=\"open-service-in-browser\"\n onClick={navigateToService}\n className={buttonStyle}\n >\n <div className={containerStyle}>\n <OpenInBrowser className={iconStyle} />\n <p className={textStyle}>Open service in PagerDuty</p>\n </div>\n </IconButton>\n </>\n );\n}\n","import { BackstageTheme } from \"@backstage/theme\";\nimport {\n Card,\n IconButton,\n LinearProgress,\n Theme,\n Tooltip,\n Typography,\n makeStyles,\n withStyles,\n} from \"@material-ui/core\";\nimport React from \"react\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport { PagerDutyServiceStandard } from \"@pagerduty/backstage-plugin-common\";\nimport CheckCircle from \"@material-ui/icons/CheckCircle\";\nimport RadioButtonUncheckedIcon from \"@material-ui/icons/RadioButtonUnchecked\";\n\ntype Props = {\n total: number | undefined;\n completed: number | undefined;\n standards: PagerDutyServiceStandard[] | undefined;\n compact?: boolean;\n};\n\nfunction colorFromPercentage(theme: Theme, percentage: number) {\n if (percentage < 0.5) {\n return theme.palette.error.main;\n } else if (percentage < 0.8) {\n return theme.palette.warning.main;\n }\n return theme.palette.success.main;\n}\n\nfunction ServiceStandardsCard({ total, completed, standards, compact }: Props) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n cardStyle: {\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"grid\",\n gridTemplateRows: \"1fr auto auto\",\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n containerStyle: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: compact !== true ? \"-100px\" : \"-50px\",\n },\n largeTextStyle: {\n fontSize: compact !== true ? \"50px\" : \"40px\",\n color:\n completed !== undefined && total !== undefined\n ? colorFromPercentage(theme, completed / total)\n : colorFromPercentage(theme, 0),\n alignSelf: \"center\",\n justifyContent: \"center\",\n },\n smallTextStyle: {\n color: theme.palette.textSubtle,\n fontSize: compact !== true ? \"14px\" : \"12px\",\n fontWeight: \"bold\",\n alignSelf: \"center\",\n justifyContent: \"center\",\n marginLeft: \"-2px\",\n marginTop: compact !== true ? \"25px\" : \"20px\",\n },\n tooltipContainer: {},\n tooltipIcon: {\n marginRight: \"5px\",\n },\n standardItem: {\n display: \"flex\",\n alignItems: \"center\",\n },\n }));\n\n const BorderLinearProgress = withStyles((theme) => ({\n root: {\n height: 10,\n borderRadius: 5,\n margin: 5,\n },\n colorPrimary: {\n backgroundColor:\n theme.palette.grey[theme.palette.type === \"light\" ? 200 : 700],\n },\n bar: {\n borderRadius: 5,\n backgroundColor:\n completed !== undefined && total !== undefined\n ? colorFromPercentage(theme, completed / total)\n : colorFromPercentage(theme, 0),\n },\n }))(LinearProgress);\n\n const {\n cardStyle,\n containerStyle,\n largeTextStyle,\n smallTextStyle,\n tooltipContainer,\n tooltipIcon,\n standardItem,\n } = useStyles();\n\n if (standards === undefined || completed === undefined || total === undefined) {\n return (\n <Card className={cardStyle}>\n <div className={containerStyle}>\n <Typography className={smallTextStyle}>\n Unable to retrieve Scores\n </Typography>\n </div>\n </Card>\n );\n }\n \n return (\n <Card className={cardStyle}>\n {completed !== undefined && total !== undefined ? (\n <>\n <div className={tooltipContainer}>\n <IconButton>\n <Tooltip\n interactive\n title={\n <>\n {standards?.map((standard, key) => (\n <p key={key}>\n {standard.pass ? (\n <span className={standardItem}>\n <CheckCircle className={tooltipIcon} />{\" \"}\n {standard.name}\n </span>\n ) : (\n <span className={standardItem}>\n <RadioButtonUncheckedIcon className={tooltipIcon} />{\" \"}\n {standard.name}\n </span>\n )}\n </p>\n ))}\n </>\n }\n >\n <InfoIcon />\n </Tooltip>\n </IconButton>\n </div>\n <div className={containerStyle}>\n <Typography className={largeTextStyle}>{completed}</Typography>\n <Typography className={smallTextStyle}>/{total}</Typography>\n </div>\n <div>\n <BorderLinearProgress\n variant=\"determinate\"\n value={(completed! / total!) * 100}\n />\n </div>\n </>\n ) : (\n <div className={containerStyle}>\n <Typography className={smallTextStyle}>\n Unable to retrieve Scores\n </Typography>\n </div>\n )}\n </Card>\n );\n}\n\nexport default ServiceStandardsCard;\n","import { Card, Typography } from \"@material-ui/core\";\nimport React, { useEffect } from \"react\";\nimport { Theme, makeStyles } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { pagerDutyApiRef } from \"../../api\";\nimport { useAsyncFn } from \"react-use\";\nimport Alert from \"@material-ui/lab/Alert/Alert\";\nimport { Progress } from \"@backstage/core-components\";\n\ntype Props = {\n serviceId: string;\n refreshStatus: boolean;\n compact?: boolean;\n};\n\nfunction labelFromStatus(status: string) {\n let label;\n switch (status) {\n case \"active\":\n label = \"OK\";\n break;\n case \"warning\":\n label = \"ACTIVE\";\n break;\n case \"critical\":\n label = \"ALARM\";\n break;\n case \"maintenance\":\n label = \"MAINTENANCE\";\n break;\n case \"disabled\":\n label = \"DISABLED\";\n break;\n default:\n label = \"OK\";\n break;\n }\n\n return label;\n}\n\nfunction colorFromStatus(theme: Theme, status: string) {\n let color;\n switch (status) {\n case \"active\":\n color = theme.palette.success.main;\n break;\n case \"warning\":\n color = theme.palette.warningBackground;\n break;\n case \"critical\":\n color = theme.palette.error.main;\n break;\n case \"maintenance\":\n color = \"#ebdc00\";\n break;\n case \"disabled\":\n color = \"#A9A9A9\";\n break;\n default:\n color = theme.palette.success.main;\n break;\n }\n\n return color;\n}\n\nfunction StatusCard({ serviceId, refreshStatus, compact}: Props) {\n const api = useApi(pagerDutyApiRef);\n const [{ value: status, loading, error }, getStatus] = useAsyncFn(\n async () => {\n const { service: foundService } = await api.getServiceById(serviceId);\n return foundService.status;\n }\n );\n\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n cardStyle: {\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor:\n status !== undefined\n ? colorFromStatus(theme, status)\n : colorFromStatus(theme, \"active\"),\n marginRight: \"10px\",\n },\n largeTextStyle: {\n color: \"white\",\n fontWeight: \"bold\",\n fontSize: \"20px\",\n wordWrap: \"break-word\",\n },\n }));\n\n const { cardStyle, largeTextStyle } = useStyles();\n\n useEffect(() => {\n getStatus();\n }, [refreshStatus, getStatus]);\n\n if (error) {\n if (error.message.includes(\"Forbidden\")) {\n return <p>forbidden</p>;\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!status) {\n return <p>not found</p>;\n }\n\n return (\n <Card className={cardStyle}>\n {status !== undefined ? (\n <Typography className={largeTextStyle}>\n {labelFromStatus(status)}\n </Typography>\n ) : (\n <Typography className={largeTextStyle}>Unable to get status</Typography>\n )}\n </Card>\n );\n}\n\nexport default StatusCard;\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n TextField,\n DialogActions,\n Button,\n DialogContent,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { Alert } from '@material-ui/lab';\nimport {\n useApi,\n alertApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\n\ntype Props = {\n showDialog: boolean;\n handleDialog: () => void;\n onIncidentCreated?: () => void;\n serviceName: string;\n integrationKey: string;\n};\n\nexport const TriggerDialog = ({\n showDialog,\n handleDialog,\n onIncidentCreated: onIncidentCreated,\n serviceName,\n integrationKey,\n}: Props) => {\n const alertApi = useApi(alertApiRef);\n const identityApi = useApi(identityApiRef);\n const api = useApi(pagerDutyApiRef);\n const [description, setDescription] = useState<string>('');\n\n const [{ value, loading, error }, handleTriggerAlarm] = useAsyncFn(\n async (descriptions: string) => {\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n return await api.triggerAlarm({\n integrationKey: integrationKey as string,\n source: window.location.toString(),\n description: descriptions,\n userName,\n });\n },\n );\n\n const descriptionChanged = (\n event: React.ChangeEvent<HTMLTextAreaElement>,\n ) => {\n setDescription(event.target.value);\n };\n\n useEffect(() => {\n if (value) {\n (async () => {\n alertApi.post({\n message: `Alarm successfully triggered`,\n });\n\n handleDialog();\n\n // The pager duty API isn't always returning the newly created alarm immediately\n await new Promise(resolve => setTimeout(resolve, 1000));\n onIncidentCreated?.();\n })();\n }\n }, [value, alertApi, handleDialog, onIncidentCreated]);\n\n if (error) {\n alertApi.post({\n message: `Failed to trigger alarm. ${error.message}`,\n severity: 'error',\n });\n }\n\n return (\n <Dialog maxWidth=\"md\" open={showDialog} onClose={handleDialog} fullWidth>\n <DialogTitle>\n This action will trigger an incident for <strong>\"{serviceName}\"</strong>.\n </DialogTitle>\n <DialogContent>\n <Alert severity=\"info\">\n <Typography variant=\"body1\" align=\"justify\">\n If the issue you are seeing does not need urgent attention, please\n get in touch with the responsible team using their preferred\n communications channel. You can find information about the owner of\n this entity in the \"About\" card. If the issue is urgent, please\n don't hesitate to trigger the alert.\n </Typography>\n </Alert>\n <Typography\n variant=\"body1\"\n style={{ marginTop: '1em' }}\n gutterBottom\n align=\"justify\"\n >\n Please describe the problem you want to report. Be as descriptive as\n possible. Your signed in user and a reference to the current page will\n automatically be amended to the alarm so that the receiver can reach\n out to you if necessary.\n </Typography>\n <TextField\n inputProps={{ 'data-testid': 'trigger-input' }}\n id=\"description\"\n multiline\n fullWidth\n minRows={4}\n margin=\"normal\"\n label=\"Problem description\"\n variant=\"outlined\"\n onChange={descriptionChanged}\n />\n </DialogContent>\n <DialogActions>\n <Button\n data-testid=\"trigger-button\"\n id=\"trigger\"\n color=\"secondary\"\n disabled={!description || loading}\n variant=\"contained\"\n onClick={() => handleTriggerAlarm(description)}\n endIcon={loading && <CircularProgress size={16} />}\n >\n Trigger Incident\n </Button>\n <Button id=\"close\" color=\"primary\" onClick={handleDialog}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useCallback, useState } from \"react\";\nimport { makeStyles, IconButton } from \"@material-ui/core\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\nimport { TriggerDialog } from \"../TriggerDialog\";\nimport AddAlert from \"@material-ui/icons/AddAlert\";\n\n/** @public */\nexport type TriggerIncidentButtonProps = {\n integrationKey: string | undefined;\n entityName: string;\n compact?: boolean;\n handleRefresh: () => void;\n}\n\n/** @public */\nexport function TriggerIncidentButton({ integrationKey, entityName, compact, handleRefresh } : TriggerIncidentButtonProps) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n buttonStyle: {\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n containerStyle: {\n fontSize: compact !== true ? \"12px\" : \"10px\",\n width: compact !== true ? \"80px\" : \"60px\",\n marginRight: \"-10px\",\n },\n iconStyle: {\n fontSize: \"30px\",\n marginBottom: \"-10px\",\n },\n textStyle: {\n marginBottom: \"-10px\",\n },\n }));\n\n const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();\n const [dialogShown, setDialogShown] = useState<boolean>(false);\n\n const showDialog = useCallback(() => {\n setDialogShown(true);\n }, [setDialogShown]);\n const hideDialog = useCallback(() => {\n setDialogShown(false);\n }, [setDialogShown]);\n \n const disabled = !integrationKey;\n \n return (\n <>\n <IconButton\n aria-label=\"create-incident\"\n onClick={showDialog}\n className={disabled ? \"\" : buttonStyle}\n disabled={disabled}\n >\n <div className={containerStyle}>\n <AddAlert className={iconStyle} />\n <p className={textStyle}>Create new incident</p>\n </div>\n </IconButton>\n {integrationKey && (\n <TriggerDialog\n showDialog={dialogShown}\n handleDialog={hideDialog}\n integrationKey={integrationKey}\n serviceName={entityName}\n onIncidentCreated={handleRefresh}\n />\n )}\n </>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { ReactNode, useCallback, useState } from \"react\";\nimport {\n Card,\n CardHeader,\n Divider,\n CardContent,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport { Incidents } from \"../Incident\";\nimport { EscalationPolicy } from \"../Escalation\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef, UnauthorizedError } from \"../../api\";\nimport { MissingTokenError, ServiceNotFoundError } from \"../Errors\";\nimport { ChangeEvents } from \"../ChangeEvents\";\nimport PDGreenImage from \"../../assets/PD-Green.svg\";\nimport PDWhiteImage from \"../../assets/PD-White.svg\";\n\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { NotFoundError } from \"@backstage/errors\";\nimport {\n Progress,\n TabbedCard,\n CardTab,\n InfoCard,\n} from \"@backstage/core-components\";\nimport { PagerDutyEntity } from \"../../types\";\nimport { ForbiddenError } from \"../Errors/ForbiddenError\";\nimport {\n InsightsCard,\n OpenServiceButton,\n ServiceStandardsCard,\n StatusCard,\n TriggerIncidentButton\n} from \"../PagerDutyCardCommon\";\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { PagerDutyCardServiceResponse } from \"../../api/types\";\n\nconst useStyles = makeStyles<BackstageTheme>((theme) =>\n createStyles({\n overviewHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n color:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.54)\"\n : \"rgba(255, 255, 255, 0.7)\",\n },\n oncallHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n marginTop: \"10px\",\n color:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.54)\"\n : \"rgba(255, 255, 255, 0.7)\",\n },\n headerStyle: {\n marginBottom: \"0px\",\n fontSize: \"0px\",\n },\n overviewHeaderContainerStyle: {\n display: \"flex\",\n margin: \"15px\",\n marginBottom: \"20px\",\n },\n headerWithSubheaderContainerStyle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n subheaderTextStyle: {\n fontSize: \"10px\",\n marginLeft: \"5px\",\n },\n overviewCardsContainerStyle: {\n display: \"flex\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n incidentMetricsContainerStyle: {\n display: \"flex\",\n height: \"100%\",\n justifyContent: \"center\",\n columnSpan: \"all\",\n },\n })\n);\n\nconst BasicCard = ({ children }: { children: ReactNode }) => (\n <InfoCard title=\"PagerDuty\">{children}</InfoCard>\n);\n\n/** @public */\nexport type PagerDutyCardProps = PagerDutyEntity & {\n readOnly?: boolean;\n disableChangeEvents?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const PagerDutyCard = (props: PagerDutyCardProps) => {\n const classes = useStyles();\n\n const theme = useTheme();\n const { readOnly, disableChangeEvents, disableOnCall } = props;\n const api = useApi(pagerDutyApiRef);\n const [refreshIncidents, setRefreshIncidents] = useState<boolean>(false);\n const [refreshChangeEvents, setRefreshChangeEvents] =\n useState<boolean>(false);\n const [refreshStatus, setRefreshStatus] = useState<boolean>(false);\n\n const handleRefresh = useCallback(() => {\n setRefreshIncidents((x) => !x);\n setRefreshChangeEvents((x) => !x);\n setRefreshStatus((x) => !x);\n }, []);\n\n const {\n value: service,\n loading,\n error,\n } = useAsync(async () => {\n const { service: foundService } = await api.getServiceByPagerDutyEntity(\n props\n );\n\n const serviceStandards = await api.getServiceStandardsByServiceId(\n foundService.id\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n name: foundService.name,\n url: foundService.html_url,\n policyId: foundService.escalation_policy.id,\n policyLink: foundService.escalation_policy.html_url as string,\n policyName: foundService.escalation_policy.name,\n status: foundService.status,\n standards:\n serviceStandards !== undefined ? serviceStandards.standards : undefined,\n metrics:\n serviceMetrics !== undefined ? serviceMetrics.metrics : undefined,\n };\n\n return result;\n }, [props]);\n\n if (error) {\n let errorNode: ReactNode;\n\n switch (error.constructor) {\n case UnauthorizedError:\n errorNode = <MissingTokenError />;\n break;\n case NotFoundError:\n errorNode = <ServiceNotFoundError />;\n break;\n default:\n errorNode = <ForbiddenError />;\n }\n\n return <BasicCard>{errorNode}</BasicCard>;\n }\n\n if (loading) {\n return (\n <BasicCard>\n <Progress />\n </BasicCard>\n );\n }\n\n return (\n <Card data-testid=\"pagerduty-card\">\n <CardHeader\n className={classes.headerStyle}\n title={\n theme.palette.type === \"dark\" ? (\n <img src={PDWhiteImage} alt=\"PagerDuty\" height=\"35\" />\n ) : (\n <img src={PDGreenImage} alt=\"PagerDuty\" height=\"35\" />\n )\n }\n action={\n !readOnly && props.integrationKey ? (\n <div>\n <TriggerIncidentButton\n data-testid=\"trigger-incident-button\"\n integrationKey={props.integrationKey}\n entityName={props.name}\n handleRefresh={handleRefresh}\n />\n <OpenServiceButton serviceUrl={service!.url} />\n </div>\n ) : (\n <OpenServiceButton serviceUrl={service!.url} />\n )\n }\n />\n <Grid item md={12} className={classes.overviewHeaderContainerStyle}>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid>\n <Grid item md={6}>\n <span className={classes.headerWithSubheaderContainerStyle}>\n <Typography className={classes.overviewHeaderTextStyle}>\n INSIGHTS\n </Typography>\n <Typography className={classes.subheaderTextStyle}>\n (last 30 days)\n </Typography>\n </span>\n </Grid>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid>\n </Grid>\n <Grid item md={12} className={classes.overviewCardsContainerStyle}>\n <Grid item md={3}>\n <StatusCard serviceId={service!.id} refreshStatus={refreshStatus} />\n </Grid>\n <Grid item md={6} className={classes.incidentMetricsContainerStyle}>\n <Grid item md={4}>\n <InsightsCard\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_interruptions\n : undefined\n }\n label=\"interruptions\"\n color={theme.palette.textSubtle}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_high_urgency_incidents\n : undefined\n }\n label=\"high urgency\"\n color={theme.palette.warning.main}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n count={\n service?.metrics !== undefined && service?.metrics?.length > 0\n ? service?.metrics[0].total_incident_count\n : undefined\n }\n label=\"incidents\"\n color={theme.palette.error.main}\n />\n </Grid>\n </Grid>\n <Grid item md={3}>\n <ServiceStandardsCard\n total={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.total\n : undefined\n }\n completed={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.passing\n : undefined\n }\n standards={\n service?.standards !== undefined\n ? service?.standards?.standards\n : undefined\n }\n />\n </Grid>\n </Grid>\n\n <Divider />\n <CardContent>\n <TabbedCard>\n <CardTab label=\"Incidents\">\n <Incidents\n serviceId={service!.id}\n refreshIncidents={refreshIncidents}\n />\n </CardTab>\n {disableChangeEvents !== true ? (\n <CardTab label=\"Change Events\">\n <ChangeEvents\n data-testid=\"change-events\"\n serviceId={service!.id}\n refreshEvents={refreshChangeEvents}\n />\n </CardTab>\n ) : (\n <></>\n )}\n </TabbedCard>\n {disableOnCall !== true ? (\n <>\n <Typography className={classes.oncallHeaderTextStyle}>\n ON CALL\n </Typography>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n />\n </>\n ) : (\n <></>\n )}\n </CardContent>\n </Card>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Entity } from '@backstage/catalog-model';\nimport { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from '../constants';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { getPagerDutyEntity } from '../pagerDutyEntity';\nimport { PagerDutyCard } from '../PagerDutyCard';\n\n/** @public */\nexport const isPluginApplicableToEntity = (entity: Entity) =>\n Boolean(\n entity.metadata.annotations?.[PAGERDUTY_INTEGRATION_KEY] ||\n entity.metadata.annotations?.[PAGERDUTY_SERVICE_ID],\n );\n\n/** @public */\nexport type EntityPagerDutyCardProps = {\n readOnly?: boolean;\n disableChangeEvents?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const EntityPagerDutyCard = (props: EntityPagerDutyCardProps) => {\n const { readOnly, disableChangeEvents, disableOnCall } = props;\n const { entity } = useEntity();\n const pagerDutyEntity = getPagerDutyEntity(entity);\n return (\n <PagerDutyCard\n {...pagerDutyEntity}\n readOnly={readOnly}\n disableChangeEvents={disableChangeEvents}\n disableOnCall={disableOnCall}\n />\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { ReactNode, useCallback, useState } from \"react\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Card,\n CardHeader,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef, UnauthorizedError } from \"../../api\";\nimport { MissingTokenError, ServiceNotFoundError } from \"../Errors\";\nimport PDGreenImage from \"../../assets/PD-Green.svg\";\nimport PDWhiteImage from \"../../assets/PD-White.svg\";\n\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { NotFoundError } from \"@backstage/errors\";\nimport { Progress, InfoCard } from \"@backstage/core-components\";\nimport { PagerDutyEntity } from \"../../types\";\nimport { ForbiddenError } from \"../Errors/ForbiddenError\";\nimport {\n InsightsCard,\n OpenServiceButton,\n ServiceStandardsCard,\n StatusCard,\n TriggerIncidentButton,\n} from \"../PagerDutyCardCommon\";\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { PagerDutyCardServiceResponse } from \"../../api/types\";\nimport { EscalationPolicy } from \"../Escalation\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\n\nconst useStyles = makeStyles<BackstageTheme>((theme) =>\n createStyles({\n overviewHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n color:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.54)\"\n : \"rgba(255, 255, 255, 0.7)\",\n },\n headerStyle: {\n marginBottom: \"0px\",\n fontSize: \"0px\",\n },\n overviewHeaderContainerStyle: {\n display: \"flex\",\n margin: \"0px\",\n padding: \"15px\",\n marginBottom: \"5px\",\n },\n headerWithSubheaderContainerStyle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n subheaderTextStyle: {\n fontSize: \"10px\",\n marginLeft: \"5px\",\n },\n overviewCardsContainerStyle: {\n display: \"flex\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n onCallAccordionDetails: {\n display: \"flex\",\n width: \"100%\",\n marginTop: \"-25px\",\n marginBottom: \"-15px\",\n },\n incidentMetricsContainerStyle: {\n display: \"flex\",\n height: \"100%\",\n justifyContent: \"center\",\n columnSpan: \"all\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n })\n);\n\nconst BasicCard = ({ children }: { children: ReactNode }) => (\n <InfoCard title=\"PagerDuty\">{children}</InfoCard>\n);\n\n/** @public */\nexport type PagerDutyCardProps = PagerDutyEntity & {\n readOnly?: boolean;\n disableInsights?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const PagerDutySmallCard = (props: PagerDutyCardProps) => {\n const classes = useStyles();\n\n const theme = useTheme();\n const { readOnly, disableInsights, disableOnCall } = props;\n const api = useApi(pagerDutyApiRef);\n const [refreshStatus, setRefreshStatus] = useState<boolean>(false);\n\n const handleRefresh = useCallback(() => {\n setRefreshStatus((x) => !x);\n }, []);\n\n const {\n value: service,\n loading,\n error,\n } = useAsync(async () => {\n const { service: foundService } = await api.getServiceByPagerDutyEntity(\n props\n );\n\n const serviceStandards = await api.getServiceStandardsByServiceId(\n foundService.id\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n name: foundService.name,\n url: foundService.html_url,\n policyId: foundService.escalation_policy.id,\n policyLink: foundService.escalation_policy.html_url as string,\n policyName: foundService.escalation_policy.name,\n status: foundService.status,\n standards:\n serviceStandards !== undefined ? serviceStandards.standards : undefined,\n metrics:\n serviceMetrics !== undefined ? serviceMetrics.metrics : undefined,\n };\n\n return result;\n }, [props]);\n\n if (error) {\n let errorNode: ReactNode;\n\n switch (error.constructor) {\n case UnauthorizedError:\n errorNode = <MissingTokenError />;\n break;\n case NotFoundError:\n errorNode = <ServiceNotFoundError />;\n break;\n default:\n errorNode = <ForbiddenError />;\n }\n\n return <BasicCard>{errorNode}</BasicCard>;\n }\n\n if (loading) {\n return (\n <BasicCard>\n <Progress />\n </BasicCard>\n );\n }\n\n return (\n <Card data-testid=\"pagerduty-card\">\n <CardHeader\n className={classes.headerStyle}\n title={\n theme.palette.type === \"dark\" ? (\n <img src={PDWhiteImage} alt=\"PagerDuty\" height=\"25\" />\n ) : (\n <img src={PDGreenImage} alt=\"PagerDuty\" height=\"25\" />\n )\n }\n action={\n !readOnly && props.integrationKey ? (\n <div>\n <TriggerIncidentButton\n compact\n data-testid=\"trigger-incident-button\"\n integrationKey={props.integrationKey}\n entityName={props.name}\n handleRefresh={handleRefresh}\n />\n <OpenServiceButton compact serviceUrl={service!.url} />\n </div>\n ) : (\n <OpenServiceButton compact serviceUrl={service!.url} />\n )\n }\n />\n <Grid item md={12} className={classes.overviewHeaderContainerStyle}>\n <Grid item md={6}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid>\n <Grid item md={6}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid>\n </Grid>\n\n <Grid item md={12} className={classes.overviewCardsContainerStyle}>\n <Grid item md={6}>\n <StatusCard compact serviceId={service!.id} refreshStatus={refreshStatus} />\n </Grid>\n <Grid item md={6}>\n <ServiceStandardsCard\n compact\n total={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.total\n : undefined\n }\n completed={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.passing\n : undefined\n }\n standards={\n service?.standards !== undefined\n ? service?.standards?.standards\n : undefined\n }\n />\n </Grid>\n </Grid>\n {disableInsights !== true ? (\n <Accordion>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <span className={classes.headerWithSubheaderContainerStyle}>\n <Typography className={classes.overviewHeaderTextStyle}>\n INSIGHTS\n </Typography>\n <Typography className={classes.subheaderTextStyle}>\n (last 30 days)\n </Typography>\n </span>\n </AccordionSummary>\n <AccordionDetails>\n <Grid\n item\n md={12}\n className={classes.incidentMetricsContainerStyle}\n >\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_interruptions\n : undefined\n }\n label=\"interruptions\"\n color={theme.palette.textSubtle}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_high_urgency_incidents\n : undefined\n }\n label=\"high urgency\"\n color={theme.palette.warning.main}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined &&\n service?.metrics?.length > 0\n ? service?.metrics[0].total_incident_count\n : undefined\n }\n label=\"incidents\"\n color={theme.palette.error.main}\n />\n </Grid>\n </Grid>\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n\n {disableOnCall !== true ? (\n <Accordion>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <Typography className={classes.overviewHeaderTextStyle}>\n ON CALL\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.onCallAccordionDetails}>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n />\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n </Card>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React from 'react';\nimport { Entity } from '@backstage/catalog-model';\nimport { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from '../constants';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { getPagerDutyEntity } from '../pagerDutyEntity';\nimport { PagerDutySmallCard } from '../PagerDutySmallCard';\n\n/** @public */\nexport const isPluginApplicableToEntity = (entity: Entity) =>\n Boolean(\n entity.metadata.annotations?.[PAGERDUTY_INTEGRATION_KEY] ||\n entity.metadata.annotations?.[PAGERDUTY_SERVICE_ID],\n );\n\n/** @public */\nexport type EntityPagerDutySmallCardProps = {\n readOnly?: boolean;\n disableInsights?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const EntityPagerDutySmallCard = (props: EntityPagerDutySmallCardProps) => {\n const { readOnly, disableInsights, disableOnCall } = props;\n const { entity } = useEntity();\n const pagerDutyEntity = getPagerDutyEntity(entity);\n return (\n <PagerDutySmallCard\n {...pagerDutyEntity}\n readOnly={readOnly}\n disableInsights={disableInsights}\n disableOnCall={disableOnCall}\n />\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { catalogApiRef, useEntity } from '@backstage/plugin-catalog-react';\nimport { PagerDutyEntity } from '../types';\nimport { getPagerDutyEntity } from '../components/pagerDutyEntity';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { useAsync } from 'react-use';\nimport { Entity } from '@backstage/catalog-model';\n\nexport function usePagerdutyEntity(): PagerDutyEntity {\n const { entity } = useEntity();\n\n return getPagerDutyEntity(entity);\n}\n\nexport function useCatalogEntities() : Entity[] {\n const catalogApi = useApi(catalogApiRef);\n\n const { value: entities, error, loading } = useAsync( async () => catalogApi.getEntities({\n filter: {\n kind: 'Component',\n },\n }), []);\n\n if (error) {\n throw error;\n }\n\n if (loading) {\n return [];\n }\n\n return entities?.items || []; \n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useCallback, ReactNode, useState } from 'react';\nimport { makeStyles, Button } from '@material-ui/core';\nimport { BackstageTheme } from '@backstage/theme';\n\nimport { usePagerdutyEntity } from '../../hooks';\nimport { TriggerDialog } from '../TriggerDialog';\n\nconst useStyles = makeStyles<BackstageTheme>(theme => ({\n buttonStyle: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.error.dark,\n },\n },\n}));\n\n/** @public */\nexport function TriggerButton(props: { children?: ReactNode }) {\n const { buttonStyle } = useStyles();\n const { integrationKey, name } = usePagerdutyEntity();\n const [dialogShown, setDialogShown] = useState<boolean>(false);\n\n const showDialog = useCallback(() => {\n setDialogShown(true);\n }, [setDialogShown]);\n const hideDialog = useCallback(() => {\n setDialogShown(false);\n }, [setDialogShown]);\n\n const disabled = !integrationKey;\n return (\n <>\n <Button\n onClick={showDialog}\n variant=\"contained\"\n className={disabled ? '' : buttonStyle}\n disabled={disabled}\n >\n {integrationKey\n ? props.children ?? 'Create new incident'\n : 'Missing integration key'}\n </Button>\n {integrationKey && (\n <TriggerDialog\n showDialog={dialogShown}\n handleDialog={hideDialog}\n integrationKey={integrationKey}\n serviceName={name}\n />\n )}\n </>\n );\n}\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EntityPagerDutyCardProps, EntityPagerDutyCard } from './components';\n\n/**\n * @public\n * @deprecated Please use EntityPagerDutyCard\n */\nexport const PagerDutyCard = EntityPagerDutyCard;\n\n/**\n * @public\n * @deprecated Please use EntityPagerDutyCardProps\n */\nexport type PagerDutyCardProps = EntityPagerDutyCardProps;\n"],"names":["ForbiddenError","EntityPagerDutyCard","EntityPagerDutySmallCard","useStyles","OpenInBrowser","useAsyncFn","makeStyles","Alert","createStyles","BasicCard","PagerDutyCard","InsightsCard","isPluginApplicableToEntity"],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- export { E as EntityPagerDutyCard, c as EntityPagerDutySmallCard, H as HomePagePagerDutyCard, f as PagerDutyCard, e as PagerDutyClient, b as PagerDutyPage, T as TriggerButton, U as UnauthorizedError, i as isPagerDutyAvailable, d as isPagerDutySmallCardAvailable, i as isPluginApplicableToEntity, p as pagerDutyApiRef, a as pagerDutyPlugin, a as plugin } from './esm/index-e9e49c56.esm.js';
1
+ export { E as EntityPagerDutyCard, c as EntityPagerDutySmallCard, H as HomePagePagerDutyCard, f as PagerDutyCard, e as PagerDutyClient, b as PagerDutyPage, T as TriggerButton, U as UnauthorizedError, i as isPagerDutyAvailable, d as isPagerDutySmallCardAvailable, i as isPluginApplicableToEntity, p as pagerDutyApiRef, a as pagerDutyPlugin, a as plugin } from './esm/index-fdce978d.esm.js';
2
2
  import '@backstage/core-plugin-api';
3
3
  import '@backstage/errors';
4
4
  import '@backstage/plugin-home-react';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pagerduty/backstage-plugin",
3
3
  "description": "A Backstage plugin that integrates towards PagerDuty",
4
- "version": "0.12.1-next.87",
4
+ "version": "0.12.1-next.89",
5
5
  "main": "dist/index.esm.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "Apache-2.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-38df1ae2.esm.js","sources":["../../src/components/PagerDutyPage/ServiceMappingComponent.tsx","../../src/components/PagerDutyPage/index.tsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\nimport {\n Box,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport { PagerDutyEntityMapping } from \"@pagerduty/backstage-plugin-common\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { pagerDutyApiRef } from \"../../api\";\nimport {\n QueryClient,\n QueryClientProvider,\n useMutation,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport {\n DropdownOption,\n MRT_ColumnDef,\n MRT_EditActionButtons, \n MRT_TableOptions,\n MaterialReactTable,\n useMaterialReactTable,\n} from \"material-react-table\";\nimport { catalogApiRef } from \"@backstage/plugin-catalog-react\";\nimport { OpenInBrowser } from \"@material-ui/icons\";\n// import { catalogApiRef } from \"@backstage/plugin-catalog-react\";\n// import { Entity } from \"@backstage/catalog-model\";\n\ntype Service = {\n name: string; // \"Ads\"\n id: string; // \"QWe1j283n12j132\"\n system: string; // \"Production\"\n owner: string; // \"Mapped\"\n lifecycle: string; // \"Ads\"\n};\n\n// type TableItem = {\n// name: string | undefined;\n// team: string | undefined;\n// escalationPolicy: string | undefined;\n// mappingStatus: JSX.Element;\n// mapping: JSX.Element;\n// actions: JSX.Element;\n// };\n\n// type DenseTableProps = {\n// items: TableItem[];\n// };\n\nfunction getColorFromStatus(status?: string) {\n switch (status) {\n case \"InSync\":\n return \"green\";\n case \"OutOfSync\":\n return \"red\";\n case \"NotMapped\":\n return \"orange\";\n default:\n return \"gray\";\n }\n}\n\nfunction makeReadable(status?: string) {\n switch (status) {\n case \"InSync\":\n return \"In Sync\";\n case \"OutOfSync\":\n return \"Out of Sync\";\n case \"NotMapped\":\n return \"Not Mapped\";\n default:\n return \"Refresh to Update\";\n }\n}\n\nexport const ServiceMappingComponent = () => {\n\n const [catalogEntities, setCatalogEntities] = useState<Service[]>([]);\n const [entityOptions, setEntityOptions] = useState<DropdownOption[]>([]);\n\n const pagerDutyApi = useApi(pagerDutyApiRef);\n const catalogApi = useApi(catalogApiRef);\n\n // READ hook (get mappings from api)\n function useGetMappings() {\n return useQuery<PagerDutyEntityMapping[]>({\n queryKey: [\"mappings\"],\n queryFn: async () => {\n // send api request here\n const { mappings: foundMappings } =\n await pagerDutyApi.getEntityMappings();\n\n return foundMappings;\n },\n refetchOnWindowFocus: false,\n });\n }\n\n // UPDATE hook (put mapping in api)\n function useUpdateMapping() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: async (mapping: PagerDutyEntityMapping) => {\n return await pagerDutyApi.storeServiceMapping(\n mapping.serviceId,\n mapping.entityRef\n );\n },\n // client side optimistic update\n onMutate: (newMappingInfo: PagerDutyEntityMapping) => {\n queryClient.setQueryData([\"updateMappings\"], (prevMappings: any) =>\n prevMappings?.map((prevMapping: PagerDutyEntityMapping) => {\n if (prevMapping.serviceId === newMappingInfo.serviceId) {\n newMappingInfo.entityName = catalogEntities.find((entity) => entity.id === newMappingInfo.entityRef)?.name || \"\";\n\n return newMappingInfo;\n }\n return prevMapping; \n }\n )\n );\n },\n });\n }\n\n function fetchCatalogEntities() {\n catalogApi\n .getEntities({\n filter: { kind: \"Component\" },\n })\n .then(({ items }) => {\n const entities: Service[] = [];\n items.forEach((entity: any) => {\n entities.push({\n name: entity.metadata?.name,\n id: entity.metadata?.uid ?? \"\",\n system: JSON.stringify(entity.spec?.system) || \"\",\n owner: JSON.stringify(entity.spec?.owner) || \"\",\n lifecycle: JSON.stringify(entity.spec?.lifecycle) || \"\",\n });\n });\n setCatalogEntities(entities);\n });\n }\n\n function getCatalogEntityOptions() : DropdownOption[] {\n // fetch entities if not already fetched\n if (catalogEntities.length === 0) {\n fetchCatalogEntities();\n }\n\n if(entityOptions.length === 0) {\n const options : DropdownOption[] = [];\n // Add empty object\n options.push({ value: \"\", label: \"None\" });\n\n catalogEntities.forEach((entity) => {\n options.push({\n value: entity.id,\n label: entity.name,\n });\n setEntityOptions(options);\n });\n }\n\n return entityOptions;\n }\n\n const DenseTable = () => {\n const [validationErrors, setValidationErrors] = useState<\n Record<string, string | undefined>\n >({});\n\n const columns = useMemo<MRT_ColumnDef<PagerDutyEntityMapping>[]>(\n () => [\n {\n accessorKey: \"serviceId\",\n header: \"Service ID\",\n visibleInShowHideMenu: false,\n enableEditing: false,\n Cell: ({ cell }) => (\n <Typography variant=\"body1\" style={{fontWeight: 600}}>\n {cell.getValue<string>()}\n </Typography> \n ),\n },\n {\n accessorKey: \"serviceName\",\n header: \"PagerDuty Service\",\n enableEditing: false,\n },\n {\n accessorKey: \"team\",\n header: \"Team\",\n enableEditing: false,\n },\n {\n accessorKey: \"escalationPolicy\",\n header: \"Escalation Policy\",\n enableEditing: false,\n },\n {\n accessorKey: \"entityRef\",\n header: \"Mapping\",\n visibleInShowHideMenu: false,\n editVariant: \"select\",\n editSelectOptions: getCatalogEntityOptions(),\n muiEditTextFieldProps: {\n select: true,\n error: !!validationErrors?.state,\n helperText: validationErrors?.state,\n },\n },\n {\n accessorKey: \"entityName\",\n header: \"Mapped Entity Name\",\n enableEditing: false,\n },\n {\n accessorKey: \"status\",\n header: \"Status\",\n enableEditing: false,\n Cell: ({ cell }) => (\n <Box\n component=\"span\"\n bgcolor={getColorFromStatus(cell.getValue<string>())}\n borderRadius=\"0.25rem\"\n color=\"white\"\n p=\"0.25rem\"\n >\n {makeReadable(cell.getValue<string>())}\n </Box>\n ),\n },\n {\n accessorKey: \"serviceUrl\",\n header: \"Service URL\",\n visibleInShowHideMenu: false,\n enableEditing: false,\n },\n ],\n [validationErrors]\n );\n\n // call READ hook\n const {\n data: fetchedMappings = [],\n isError: isLoadingMappingsError,\n isFetching: isFetchingMappings,\n isLoading: isLoadingMappings,\n } = useGetMappings();\n\n // call UPDATE hook\n const { mutateAsync: updateMapping, isPending: isUpdatingMapping } =\n useUpdateMapping();\n\n // UPDATE action\n const handleSaveMapping: MRT_TableOptions<PagerDutyEntityMapping>[\"onEditingRowSave\"] =\n async ({ values, table }) => {\n setValidationErrors({});\n values.entityName = catalogEntities.find((entity) => entity.id === values.entityRef)?.name || \"\";\n values.status = \"RefreshToUpdate\";\n await updateMapping(values);\n table.setEditingRow(null); // exit editing mode\n };\n\n const openInBrowser = (url: string) => {\n window.open(url, \"_blank\", \"noreferrer\");\n };\n\n const dataTable = useMaterialReactTable({\n columns,\n data: fetchedMappings,\n editDisplayMode: \"modal\", // default ('row', 'cell', 'table', and 'custom' are also available)\n enableEditing: true,\n positionActionsColumn: \"last\",\n enableStickyHeader: true,\n enableFilters: true,\n getRowId: (row) => row.serviceId,\n muiToolbarAlertBannerProps: isLoadingMappingsError\n ? {\n color: \"error\",\n children: \"Error loading data\",\n }\n : undefined,\n muiTableContainerProps: {\n sx: {\n minHeight: \"500px\",\n },\n },\n onEditingRowCancel: () => setValidationErrors({}),\n onEditingRowSave: handleSaveMapping,\n // optionally customize modal content\n renderEditRowDialogContent: ({ table, row, internalEditComponents }) => (\n <>\n <DialogTitle>Edit Mapping</DialogTitle>\n <DialogContent>\n {internalEditComponents}{\" \"}\n {/* or render custom edit components here */}\n </DialogContent>\n <DialogActions>\n <MRT_EditActionButtons variant=\"text\" table={table} row={row} />\n </DialogActions>\n </>\n ),\n renderRowActions: ({ row, table }) => (\n <Box sx={{ display: \"flex\" }}>\n <Tooltip title=\"Edit\">\n <IconButton onClick={() => table.setEditingRow(row)}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Open in PagerDuty\">\n <IconButton onClick={() => openInBrowser(row.getValue(\"serviceUrl\"))}>\n <OpenInBrowser />\n </IconButton>\n </Tooltip>\n </Box>\n ),\n state: {\n isLoading: isLoadingMappings,\n isSaving: isUpdatingMapping,\n showAlertBanner: isLoadingMappingsError,\n showProgressBars: isFetchingMappings,\n columnVisibility: {\n serviceId: false,\n entityRef: false,\n serviceUrl: false,\n },\n },\n });\n\n return <MaterialReactTable table={dataTable} />;\n };\n\n const queryClient = new QueryClient();\n\n return (\n <QueryClientProvider client={queryClient}>\n <DenseTable />\n </QueryClientProvider>\n );\n};\n","import React from \"react\";\nimport { Grid, Typography } from \"@material-ui/core\";\nimport { Header, Page, Content } from \"@backstage/core-components\";\nimport { ServiceMappingComponent } from \"./ServiceMappingComponent\";\n\n/** @public */\nexport const PagerDutyPage = () => {\n return (\n <Page themeId=\"home\">\n <Header title=\"PagerDuty\" subtitle=\"Advanced configurations\" />\n <Content>\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <Typography variant=\"h4\">Service to Entity mapping</Typography>\n <Typography variant=\"body1\">\n Easily map your services to entities in Backstage without the need to add anotations to all your projects.\n </Typography>\n <Typography variant=\"body1\">\n <b>Warning: </b>Only 1:1 mapping is allowed at this time.\n </Typography>\n </Grid>\n <Grid item>\n <ServiceMappingComponent />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":["queryClient"],"mappings":"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"}