@pagerduty/backstage-plugin 0.15.8 → 0.15.9-next.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/config.d.ts +4 -1
- package/dist/alpha.d.ts +8 -0
- package/dist/alpha.esm.js +67 -0
- package/dist/alpha.esm.js.map +1 -0
- package/dist/api/client.esm.js +9 -3
- package/dist/api/client.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js +20 -11
- package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js +20 -11
- package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEventListItem.esm.js +37 -34
- package/dist/components/ChangeEvents/ChangeEventListItem.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEvents.esm.js +14 -3
- package/dist/components/ChangeEvents/ChangeEvents.esm.js.map +1 -1
- package/dist/components/EntityPagerDutyCard/index.esm.js +13 -10
- package/dist/components/EntityPagerDutyCard/index.esm.js.map +1 -1
- package/dist/components/EntityPagerDutySmallCard/index.esm.js +13 -10
- package/dist/components/EntityPagerDutySmallCard/index.esm.js.map +1 -1
- package/dist/components/Escalation/EscalationPolicy.esm.js +9 -24
- package/dist/components/Escalation/EscalationPolicy.esm.js.map +1 -1
- package/dist/components/Escalation/EscalationUser.esm.js +16 -26
- package/dist/components/Escalation/EscalationUser.esm.js.map +1 -1
- package/dist/components/Icons/index.esm.js.map +1 -1
- package/dist/components/Incident/IncidentEmptyState.esm.js.map +1 -1
- package/dist/components/Incident/IncidentForbiddenState.esm.js +20 -11
- package/dist/components/Incident/IncidentForbiddenState.esm.js.map +1 -1
- package/dist/components/Incident/IncidentListItem.esm.js +17 -15
- package/dist/components/Incident/IncidentListItem.esm.js.map +1 -1
- package/dist/components/Incident/Incidents.esm.js +10 -2
- package/dist/components/Incident/Incidents.esm.js.map +1 -1
- package/dist/components/PagerDutyCard/index.esm.js +81 -89
- package/dist/components/PagerDutyCard/index.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js +2 -1
- package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js +28 -30
- package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js +59 -38
- package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/StatusCard.esm.js +9 -6
- package/dist/components/PagerDutyCardCommon/StatusCard.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js +30 -30
- package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js.map +1 -1
- package/dist/components/PagerDutyPage/MappingTable.esm.js +30 -19
- package/dist/components/PagerDutyPage/MappingTable.esm.js.map +1 -1
- package/dist/components/PagerDutyPage/ServiceMappingComponent.esm.js.map +1 -1
- package/dist/components/PagerDutyPage/index.esm.js +55 -77
- package/dist/components/PagerDutyPage/index.esm.js.map +1 -1
- package/dist/components/PagerDutySmallCard/index.esm.js +42 -54
- package/dist/components/PagerDutySmallCard/index.esm.js.map +1 -1
- package/dist/components/TriggerDialog/TriggerDialog.esm.js +14 -9
- package/dist/components/TriggerDialog/TriggerDialog.esm.js.map +1 -1
- package/dist/components/pagerDutyEntity.esm.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.esm.js +1 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/package.json +33 -9
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { makeStyles, Typography, createStyles } from '@material-ui/core';
|
|
4
|
+
import { Grid, Card, RadioGroup, Radio } from '@backstage/ui';
|
|
4
5
|
import { Page, Header, Content, TabbedLayout } from '@backstage/core-components';
|
|
5
6
|
import { ServiceMappingComponent } from './ServiceMappingComponent.esm.js';
|
|
6
7
|
import { useApi } from '@backstage/core-plugin-api';
|
|
@@ -8,7 +9,22 @@ import { pagerDutyApiRef } from '../../api/client.esm.js';
|
|
|
8
9
|
import { NotFoundError } from '@backstage/errors';
|
|
9
10
|
|
|
10
11
|
const SERVICE_DEPENDENCY_SYNC_STRATEGY = "settings::service-dependency-sync-strategy";
|
|
12
|
+
const useStyles = makeStyles(
|
|
13
|
+
() => createStyles({
|
|
14
|
+
cardStyles: {
|
|
15
|
+
padding: "15px",
|
|
16
|
+
marginTop: "16px"
|
|
17
|
+
},
|
|
18
|
+
textContainerStyles: {
|
|
19
|
+
marginTop: "16px"
|
|
20
|
+
},
|
|
21
|
+
linkStyles: {
|
|
22
|
+
color: "cadetblue"
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
);
|
|
11
26
|
const PagerDutyPage = () => {
|
|
27
|
+
const { cardStyles, textContainerStyles, linkStyles } = useStyles();
|
|
12
28
|
const pagerDutyApi = useApi(pagerDutyApiRef);
|
|
13
29
|
const [
|
|
14
30
|
selectedServiceDependencyStrategy,
|
|
@@ -28,8 +44,7 @@ const PagerDutyPage = () => {
|
|
|
28
44
|
}
|
|
29
45
|
fetchSetting();
|
|
30
46
|
}, [pagerDutyApi]);
|
|
31
|
-
const handleChange = (
|
|
32
|
-
const value = getSelectedValue(event.target.value);
|
|
47
|
+
const handleChange = (value) => {
|
|
33
48
|
setSelectedServiceDependencyStrategy(value);
|
|
34
49
|
pagerDutyApi.storeSettings([
|
|
35
50
|
{
|
|
@@ -38,95 +53,58 @@ const PagerDutyPage = () => {
|
|
|
38
53
|
}
|
|
39
54
|
]);
|
|
40
55
|
};
|
|
41
|
-
function getSelectedValue(value) {
|
|
42
|
-
switch (value) {
|
|
43
|
-
case "backstage":
|
|
44
|
-
return "backstage";
|
|
45
|
-
case "pagerduty":
|
|
46
|
-
return "pagerduty";
|
|
47
|
-
case "both":
|
|
48
|
-
return "both";
|
|
49
|
-
default:
|
|
50
|
-
return "disabled";
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
56
|
return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
|
|
54
57
|
/* @__PURE__ */ jsx(Header, { title: "PagerDuty", subtitle: "Advanced configurations" }),
|
|
55
58
|
/* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsxs(TabbedLayout, { children: [
|
|
56
|
-
/* @__PURE__ */ jsx(TabbedLayout.Route, { path: "/service-mapping", title: "Service Mapping", children: /* @__PURE__ */ jsxs(Grid, {
|
|
57
|
-
/* @__PURE__ */ jsxs(Grid, {
|
|
58
|
-
/* @__PURE__ */ jsx(Typography, {
|
|
59
|
-
/* @__PURE__ */ jsxs(Typography, {
|
|
59
|
+
/* @__PURE__ */ jsx(TabbedLayout.Route, { path: "/service-mapping", title: "Service Mapping", children: /* @__PURE__ */ jsxs(Grid.Root, { gap: "3", columns: "1", children: [
|
|
60
|
+
/* @__PURE__ */ jsxs(Grid.Item, { children: [
|
|
61
|
+
/* @__PURE__ */ jsx(Typography, { children: "Easily map your existing PagerDuty services to entities in Backstage without the need to add anotations to all your projects." }),
|
|
62
|
+
/* @__PURE__ */ jsxs(Typography, { children: [
|
|
60
63
|
/* @__PURE__ */ jsx("b", { children: "Warning: " }),
|
|
61
64
|
"Only 1:1 mapping is allowed at this time."
|
|
62
65
|
] })
|
|
63
66
|
] }),
|
|
64
|
-
/* @__PURE__ */ jsx(Grid, {
|
|
67
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(ServiceMappingComponent, {}) })
|
|
65
68
|
] }) }),
|
|
66
|
-
/* @__PURE__ */ jsx(TabbedLayout.Route, { path: "/settings", title: "Configuration", children: /* @__PURE__ */ jsxs(
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
|
|
69
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body1", children: "Configure your PagerDuty plugin configuration here" })
|
|
70
|
-
] }),
|
|
69
|
+
/* @__PURE__ */ jsx(TabbedLayout.Route, { path: "/settings", title: "Configuration", children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
70
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h4", children: "Plugin configuration" }),
|
|
71
|
+
/* @__PURE__ */ jsx(Typography, { children: "Configure your PagerDuty plugin configuration here" }),
|
|
71
72
|
/* @__PURE__ */ jsxs(
|
|
72
73
|
Card,
|
|
73
74
|
{
|
|
74
75
|
title: "Service dependency synchronization preferences",
|
|
75
|
-
|
|
76
|
+
className: cardStyles,
|
|
76
77
|
children: [
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h6", children: "Service dependency synchronization strategy" }),
|
|
79
|
+
/* @__PURE__ */ jsxs(
|
|
80
|
+
RadioGroup,
|
|
81
|
+
{
|
|
82
|
+
label: "Select the main source of truth for your service dependencies",
|
|
83
|
+
value: selectedServiceDependencyStrategy,
|
|
84
|
+
onChange: (value) => handleChange(value),
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ jsx(Radio, { value: "backstage" /* backstage */, children: "Backstage" }),
|
|
87
|
+
/* @__PURE__ */ jsx(Radio, { value: "pagerduty" /* pagerduty */, children: "PagerDuty" }),
|
|
88
|
+
/* @__PURE__ */ jsx(Radio, { value: "both" /* both */, children: "Both" }),
|
|
89
|
+
/* @__PURE__ */ jsx(Radio, { value: "disabled" /* disabled */, children: "Disabled" })
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
/* @__PURE__ */ jsx("div", { className: textContainerStyles, children: /* @__PURE__ */ jsxs(Typography, { children: [
|
|
94
|
+
/* @__PURE__ */ jsx("b", { children: "Warning: " }),
|
|
95
|
+
"Changing this setting will affect how your service dependencies are synchronized and may cause data loss. Check the",
|
|
96
|
+
" ",
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
"a",
|
|
82
99
|
{
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
children:
|
|
86
|
-
/* @__PURE__ */ jsx(
|
|
87
|
-
FormControlLabel,
|
|
88
|
-
{
|
|
89
|
-
value: "backstage",
|
|
90
|
-
control: /* @__PURE__ */ jsx(Radio, {}),
|
|
91
|
-
label: "Backstage"
|
|
92
|
-
}
|
|
93
|
-
),
|
|
94
|
-
/* @__PURE__ */ jsx(
|
|
95
|
-
FormControlLabel,
|
|
96
|
-
{
|
|
97
|
-
value: "pagerduty",
|
|
98
|
-
control: /* @__PURE__ */ jsx(Radio, {}),
|
|
99
|
-
label: "PagerDuty"
|
|
100
|
-
}
|
|
101
|
-
),
|
|
102
|
-
/* @__PURE__ */ jsx(
|
|
103
|
-
FormControlLabel,
|
|
104
|
-
{
|
|
105
|
-
value: "both",
|
|
106
|
-
control: /* @__PURE__ */ jsx(Radio, {}),
|
|
107
|
-
label: "Both"
|
|
108
|
-
}
|
|
109
|
-
),
|
|
110
|
-
/* @__PURE__ */ jsx(
|
|
111
|
-
FormControlLabel,
|
|
112
|
-
{
|
|
113
|
-
value: "disabled",
|
|
114
|
-
control: /* @__PURE__ */ jsx(Radio, {}),
|
|
115
|
-
label: "Disabled"
|
|
116
|
-
}
|
|
117
|
-
)
|
|
118
|
-
]
|
|
100
|
+
className: linkStyles,
|
|
101
|
+
href: "https://pagerduty.github.io/backstage-plugin-docs/index.html",
|
|
102
|
+
children: "documentation"
|
|
119
103
|
}
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
/* @__PURE__ */ jsxs(Typography, { variant: "body1", children: [
|
|
125
|
-
/* @__PURE__ */ jsx("b", { children: "Warning: " }),
|
|
126
|
-
"Changing this setting will affect how your service dependencies are synchronized and may cause data loss. Check the ",
|
|
127
|
-
/* @__PURE__ */ jsx("a", { style: { color: "cadetblue" }, href: "https://pagerduty.github.io/backstage-plugin-docs/index.html", children: " documentation " }),
|
|
128
|
-
" for more information."
|
|
129
|
-
] })
|
|
104
|
+
),
|
|
105
|
+
" ",
|
|
106
|
+
"for more information."
|
|
107
|
+
] }) })
|
|
130
108
|
]
|
|
131
109
|
}
|
|
132
110
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutyPage/index.tsx"],"sourcesContent":["import { useEffect, useState } from
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutyPage/index.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { createStyles, makeStyles, Typography } from '@material-ui/core';\nimport { Card, Grid, RadioGroup, Radio } from '@backstage/ui';\nimport {\n Header,\n Page,\n Content,\n TabbedLayout,\n} from '@backstage/core-components';\nimport { ServiceMappingComponent } from './ServiceMappingComponent';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { pagerDutyApiRef } from '../../api';\nimport { NotFoundError } from '@backstage/errors';\nimport { BackstageTheme } from '@backstage/theme';\n\nenum StoreSettings {\n backstage = 'backstage',\n pagerduty = 'pagerduty',\n both = 'both',\n disabled = 'disabled',\n}\n\nconst SERVICE_DEPENDENCY_SYNC_STRATEGY =\n 'settings::service-dependency-sync-strategy';\n\nconst useStyles = makeStyles<BackstageTheme>(() =>\n createStyles({\n cardStyles: {\n padding: '15px',\n marginTop: '16px',\n },\n textContainerStyles: {\n marginTop: '16px',\n },\n linkStyles: {\n color: 'cadetblue',\n },\n }),\n);\n\n/** @public */\nexport const PagerDutyPage = () => {\n const { cardStyles, textContainerStyles, linkStyles } = useStyles();\n const pagerDutyApi = useApi(pagerDutyApiRef);\n const [\n selectedServiceDependencyStrategy,\n setSelectedServiceDependencyStrategy,\n ] = useState('disabled');\n\n useEffect(() => {\n function fetchSetting() {\n pagerDutyApi\n .getSetting(SERVICE_DEPENDENCY_SYNC_STRATEGY)\n .then(result => {\n if (result !== undefined) {\n setSelectedServiceDependencyStrategy(result.value);\n }\n })\n .catch(error => {\n if (error instanceof NotFoundError) {\n // If the setting is not found, set the default value to \"disabled\"\n setSelectedServiceDependencyStrategy('disabled');\n }\n });\n }\n\n fetchSetting();\n }, [pagerDutyApi]);\n\n const handleChange = (value: StoreSettings) => {\n setSelectedServiceDependencyStrategy(value);\n pagerDutyApi.storeSettings([\n {\n id: SERVICE_DEPENDENCY_SYNC_STRATEGY,\n value,\n },\n ]);\n };\n\n return (\n <Page themeId=\"home\">\n <Header title=\"PagerDuty\" subtitle=\"Advanced configurations\" />\n <Content>\n <TabbedLayout>\n <TabbedLayout.Route path=\"/service-mapping\" title=\"Service Mapping\">\n <Grid.Root gap=\"3\" columns=\"1\">\n <Grid.Item>\n <Typography>\n Easily map your existing PagerDuty services to entities in\n Backstage without the need to add anotations to all your\n projects.\n </Typography>\n <Typography>\n <b>Warning: </b>Only 1:1 mapping is allowed at this time.\n </Typography>\n </Grid.Item>\n <Grid.Item>\n <ServiceMappingComponent />\n </Grid.Item>\n </Grid.Root>\n </TabbedLayout.Route>\n <TabbedLayout.Route path=\"/settings\" title=\"Configuration\">\n <>\n <Typography variant=\"h4\">Plugin configuration</Typography>\n <Typography>\n Configure your PagerDuty plugin configuration here\n </Typography>\n\n <Card\n title=\"Service dependency synchronization preferences\"\n className={cardStyles}\n >\n <Typography variant=\"h6\">\n Service dependency synchronization strategy\n </Typography>\n <RadioGroup\n label=\"Select the main source of truth for your service dependencies\"\n value={selectedServiceDependencyStrategy}\n onChange={value => handleChange(value as StoreSettings)}\n >\n <Radio value={StoreSettings.backstage}>Backstage</Radio>\n <Radio value={StoreSettings.pagerduty}>PagerDuty</Radio>\n <Radio value={StoreSettings.both}>Both</Radio>\n <Radio value={StoreSettings.disabled}>Disabled</Radio>\n </RadioGroup>\n\n <div className={textContainerStyles}>\n <Typography>\n <b>Warning: </b>Changing this setting will affect how your\n service dependencies are synchronized and may cause data\n loss. Check the{' '}\n <a\n className={linkStyles}\n href=\"https://pagerduty.github.io/backstage-plugin-docs/index.html\"\n >\n documentation\n </a>{' '}\n for more information.\n </Typography>\n </div>\n </Card>\n </>\n </TabbedLayout.Route>\n </TabbedLayout>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useCallback } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { CardHeader, Typography, Accordion, AccordionSummary, AccordionDetails } from '@material-ui/core';
|
|
4
|
+
import { Card, Flex, Grid } from '@backstage/ui';
|
|
4
5
|
import useAsync from 'react-use/lib/useAsync';
|
|
5
6
|
import { pagerDutyApiRef, UnauthorizedError } from '../../api/client.esm.js';
|
|
6
7
|
import { MissingTokenError } from '../Errors/MissingTokenError.esm.js';
|
|
@@ -27,42 +28,20 @@ const useStyles = makeStyles(
|
|
|
27
28
|
fontWeight: 500,
|
|
28
29
|
color: theme.palette.type === "light" ? "rgba(0, 0, 0, 0.54)" : "rgba(255, 255, 255, 0.7)"
|
|
29
30
|
},
|
|
30
|
-
headerStyle: {
|
|
31
|
-
marginBottom: "0px",
|
|
32
|
-
fontSize: "0px"
|
|
33
|
-
},
|
|
34
|
-
overviewHeaderContainerStyle: {
|
|
35
|
-
display: "flex",
|
|
36
|
-
margin: "0px",
|
|
37
|
-
padding: "15px",
|
|
38
|
-
marginBottom: "5px"
|
|
39
|
-
},
|
|
40
|
-
headerWithSubheaderContainerStyle: {
|
|
41
|
-
display: "flex",
|
|
42
|
-
alignItems: "center"
|
|
43
|
-
},
|
|
44
31
|
subheaderTextStyle: {
|
|
45
32
|
fontSize: "10px",
|
|
46
|
-
|
|
33
|
+
paddingLeft: "5px",
|
|
34
|
+
paddingTop: "3px"
|
|
47
35
|
},
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
margin: "15px",
|
|
51
|
-
marginTop: "-15px"
|
|
36
|
+
accordionStyle: {
|
|
37
|
+
background: "transparent"
|
|
52
38
|
},
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
width: "100%",
|
|
56
|
-
marginTop: "-25px",
|
|
57
|
-
marginBottom: "-15px"
|
|
39
|
+
gridRootStyle: {
|
|
40
|
+
width: "100%"
|
|
58
41
|
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
justifyContent: "center",
|
|
63
|
-
columnSpan: "all",
|
|
64
|
-
margin: "15px",
|
|
65
|
-
marginTop: "-15px"
|
|
42
|
+
cardStyles: {
|
|
43
|
+
paddingLeft: "10px",
|
|
44
|
+
paddingRight: "10px"
|
|
66
45
|
}
|
|
67
46
|
})
|
|
68
47
|
);
|
|
@@ -123,13 +102,12 @@ const PagerDutySmallCard = (props) => {
|
|
|
123
102
|
if (loading) {
|
|
124
103
|
return /* @__PURE__ */ jsx(BasicCard, { children: /* @__PURE__ */ jsx(Progress, {}) });
|
|
125
104
|
}
|
|
126
|
-
return /* @__PURE__ */ jsxs(Card, { "data-testid": "pagerduty-card", children: [
|
|
105
|
+
return /* @__PURE__ */ jsxs(Card, { "data-testid": "pagerduty-card", className: classes.cardStyles, children: [
|
|
127
106
|
/* @__PURE__ */ jsx(
|
|
128
107
|
CardHeader,
|
|
129
108
|
{
|
|
130
|
-
className: classes.headerStyle,
|
|
131
109
|
title: theme.palette.type === "dark" ? /* @__PURE__ */ jsx("img", { src: PDWhiteImage, alt: "PagerDuty", height: "25" }) : /* @__PURE__ */ jsx("img", { src: PDGreenImage, alt: "PagerDuty", height: "25" }),
|
|
132
|
-
action: !readOnly && props.integrationKey ? /* @__PURE__ */ jsxs(
|
|
110
|
+
action: !readOnly && props.integrationKey ? /* @__PURE__ */ jsxs(Flex, { children: [
|
|
133
111
|
/* @__PURE__ */ jsx(
|
|
134
112
|
TriggerIncidentButton,
|
|
135
113
|
{
|
|
@@ -144,13 +122,21 @@ const PagerDutySmallCard = (props) => {
|
|
|
144
122
|
] }) : /* @__PURE__ */ jsx(OpenServiceButton, { compact: true, serviceUrl: service.url })
|
|
145
123
|
}
|
|
146
124
|
),
|
|
147
|
-
/* @__PURE__ */ jsxs(Grid, {
|
|
148
|
-
/* @__PURE__ */ jsx(Grid, {
|
|
149
|
-
/* @__PURE__ */ jsx(Grid, {
|
|
125
|
+
/* @__PURE__ */ jsxs(Grid.Root, { columns: "2", gap: "1", pl: "1", pr: "1", children: [
|
|
126
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(Typography, { className: classes.overviewHeaderTextStyle, children: "STATUS" }) }),
|
|
127
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(Typography, { className: classes.overviewHeaderTextStyle, children: "STANDARDS" }) })
|
|
150
128
|
] }),
|
|
151
|
-
/* @__PURE__ */ jsxs(Grid, {
|
|
152
|
-
/* @__PURE__ */ jsx(Grid, {
|
|
153
|
-
|
|
129
|
+
/* @__PURE__ */ jsxs(Grid.Root, { columns: "2", gap: "1", pl: "1", pr: "1", children: [
|
|
130
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(
|
|
131
|
+
StatusCard,
|
|
132
|
+
{
|
|
133
|
+
compact: true,
|
|
134
|
+
serviceId: service.id,
|
|
135
|
+
refreshStatus,
|
|
136
|
+
account: service.account
|
|
137
|
+
}
|
|
138
|
+
) }),
|
|
139
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(
|
|
154
140
|
ServiceStandardsCard,
|
|
155
141
|
{
|
|
156
142
|
compact: true,
|
|
@@ -160,27 +146,29 @@ const PagerDutySmallCard = (props) => {
|
|
|
160
146
|
}
|
|
161
147
|
) })
|
|
162
148
|
] }),
|
|
163
|
-
disableInsights !== true ? /* @__PURE__ */ jsxs(Accordion, { children: [
|
|
164
|
-
/* @__PURE__ */
|
|
149
|
+
disableInsights !== true ? /* @__PURE__ */ jsxs(Accordion, { className: classes.accordionStyle, children: [
|
|
150
|
+
/* @__PURE__ */ jsxs(
|
|
165
151
|
AccordionSummary,
|
|
166
152
|
{
|
|
167
153
|
expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, {}),
|
|
168
154
|
"aria-controls": "panel1a-content",
|
|
169
155
|
id: "panel1a-header",
|
|
170
|
-
children:
|
|
156
|
+
children: [
|
|
171
157
|
/* @__PURE__ */ jsx(Typography, { className: classes.overviewHeaderTextStyle, children: "INSIGHTS" }),
|
|
172
158
|
/* @__PURE__ */ jsx(Typography, { className: classes.subheaderTextStyle, children: "(last 30 days)" })
|
|
173
|
-
]
|
|
159
|
+
]
|
|
174
160
|
}
|
|
175
161
|
),
|
|
176
162
|
/* @__PURE__ */ jsx(AccordionDetails, { children: /* @__PURE__ */ jsxs(
|
|
177
|
-
Grid,
|
|
163
|
+
Grid.Root,
|
|
178
164
|
{
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
165
|
+
columns: "3",
|
|
166
|
+
gap: "1",
|
|
167
|
+
pl: "1",
|
|
168
|
+
pr: "1",
|
|
169
|
+
className: classes.gridRootStyle,
|
|
182
170
|
children: [
|
|
183
|
-
/* @__PURE__ */ jsx(Grid, {
|
|
171
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(
|
|
184
172
|
IncidentCounterCard,
|
|
185
173
|
{
|
|
186
174
|
compact: true,
|
|
@@ -189,7 +177,7 @@ const PagerDutySmallCard = (props) => {
|
|
|
189
177
|
color: theme.palette.textSubtle
|
|
190
178
|
}
|
|
191
179
|
) }),
|
|
192
|
-
/* @__PURE__ */ jsx(Grid, {
|
|
180
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(
|
|
193
181
|
IncidentCounterCard,
|
|
194
182
|
{
|
|
195
183
|
compact: true,
|
|
@@ -198,7 +186,7 @@ const PagerDutySmallCard = (props) => {
|
|
|
198
186
|
color: theme.palette.warning.main
|
|
199
187
|
}
|
|
200
188
|
) }),
|
|
201
|
-
/* @__PURE__ */ jsx(Grid, {
|
|
189
|
+
/* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(
|
|
202
190
|
IncidentCounterCard,
|
|
203
191
|
{
|
|
204
192
|
compact: true,
|
|
@@ -211,7 +199,7 @@ const PagerDutySmallCard = (props) => {
|
|
|
211
199
|
}
|
|
212
200
|
) })
|
|
213
201
|
] }) : /* @__PURE__ */ jsx(Fragment, {}),
|
|
214
|
-
disableOnCall !== true ? /* @__PURE__ */ jsxs(Accordion, { children: [
|
|
202
|
+
disableOnCall !== true ? /* @__PURE__ */ jsxs(Accordion, { className: classes.accordionStyle, children: [
|
|
215
203
|
/* @__PURE__ */ jsx(
|
|
216
204
|
AccordionSummary,
|
|
217
205
|
{
|
|
@@ -221,7 +209,7 @@ const PagerDutySmallCard = (props) => {
|
|
|
221
209
|
children: /* @__PURE__ */ jsx(Typography, { className: classes.overviewHeaderTextStyle, children: "ON CALL" })
|
|
222
210
|
}
|
|
223
211
|
),
|
|
224
|
-
/* @__PURE__ */ jsx(AccordionDetails, {
|
|
212
|
+
/* @__PURE__ */ jsx(AccordionDetails, { children: /* @__PURE__ */ jsx(
|
|
225
213
|
EscalationPolicy,
|
|
226
214
|
{
|
|
227
215
|
"data-testid": "oncall-card",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutySmallCard/index.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 { 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 props.account\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id,\n props.account\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n name: foundService.name,\n account: props.account,\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} account={service!.account} />\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 account={service!.account}\n />\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n </Card>\n );\n};\n"],"names":["InsightsCard"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutySmallCard/index.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 { ReactNode, useCallback, useState } from 'react';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n CardHeader,\n Typography,\n} from '@material-ui/core';\nimport { Card, Flex, Grid } from '@backstage/ui';\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 subheaderTextStyle: {\n fontSize: '10px',\n paddingLeft: '5px',\n paddingTop: '3px',\n },\n accordionStyle: {\n background: 'transparent',\n },\n gridRootStyle: {\n width: '100%',\n },\n cardStyles: {\n paddingLeft: '10px',\n paddingRight: '10px',\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 props.account,\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id,\n props.account,\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n name: foundService.name,\n account: props.account,\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\" className={classes.cardStyles}>\n <CardHeader\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 <Flex>\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 </Flex>\n ) : (\n <OpenServiceButton compact serviceUrl={service!.url} />\n )\n }\n />\n\n <Grid.Root columns=\"2\" gap=\"1\" pl=\"1\" pr=\"1\">\n <Grid.Item>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid.Item>\n <Grid.Item>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid.Item>\n </Grid.Root>\n\n <Grid.Root columns=\"2\" gap=\"1\" pl=\"1\" pr=\"1\">\n <Grid.Item>\n <StatusCard\n compact\n serviceId={service!.id}\n refreshStatus={refreshStatus}\n account={service!.account}\n />\n </Grid.Item>\n <Grid.Item>\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.Item>\n </Grid.Root>\n\n {disableInsights !== true ? (\n <Accordion className={classes.accordionStyle}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <Typography className={classes.overviewHeaderTextStyle}>\n INSIGHTS\n </Typography>\n <Typography className={classes.subheaderTextStyle}>\n (last 30 days)\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Grid.Root\n columns=\"3\"\n gap=\"1\"\n pl=\"1\"\n pr=\"1\"\n className={classes.gridRootStyle}\n >\n <Grid.Item>\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.Item>\n <Grid.Item>\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.Item>\n <Grid.Item>\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.Item>\n </Grid.Root>\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n\n {disableOnCall !== true ? (\n <Accordion className={classes.accordionStyle}>\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>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n account={service!.account}\n />\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n </Card>\n );\n};\n"],"names":["InsightsCard"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
|
-
import { Dialog, DialogTitle, DialogContent, Typography, TextField, DialogActions,
|
|
3
|
+
import { useTheme, Dialog, DialogTitle, DialogContent, Typography, TextField, DialogActions, CircularProgress } from '@material-ui/core';
|
|
4
4
|
import useAsyncFn from 'react-use/lib/useAsyncFn';
|
|
5
5
|
import { pagerDutyApiRef } from '../../api/client.esm.js';
|
|
6
6
|
import { Alert } from '@material-ui/lab';
|
|
7
7
|
import { useApi, alertApiRef, identityApiRef } from '@backstage/core-plugin-api';
|
|
8
8
|
import { parseEntityRef, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
|
|
9
|
+
import { Button } from '@backstage/ui';
|
|
9
10
|
|
|
10
11
|
const TriggerDialog = ({
|
|
11
12
|
showDialog,
|
|
@@ -18,6 +19,7 @@ const TriggerDialog = ({
|
|
|
18
19
|
const identityApi = useApi(identityApiRef);
|
|
19
20
|
const api = useApi(pagerDutyApiRef);
|
|
20
21
|
const [description, setDescription] = useState("");
|
|
22
|
+
const theme = useTheme();
|
|
21
23
|
const [{ value, loading, error }, handleTriggerAlarm] = useAsyncFn(
|
|
22
24
|
async (descriptions) => {
|
|
23
25
|
const { userEntityRef } = await identityApi.getBackstageIdentity();
|
|
@@ -57,7 +59,8 @@ const TriggerDialog = ({
|
|
|
57
59
|
}
|
|
58
60
|
return /* @__PURE__ */ jsxs(Dialog, { maxWidth: "md", open: showDialog, onClose: handleDialog, fullWidth: true, children: [
|
|
59
61
|
/* @__PURE__ */ jsxs(DialogTitle, { children: [
|
|
60
|
-
"This action will trigger an incident for
|
|
62
|
+
"This action will trigger an incident for",
|
|
63
|
+
" ",
|
|
61
64
|
/* @__PURE__ */ jsxs("strong", { children: [
|
|
62
65
|
'"',
|
|
63
66
|
serviceName,
|
|
@@ -98,15 +101,17 @@ const TriggerDialog = ({
|
|
|
98
101
|
{
|
|
99
102
|
"data-testid": "trigger-button",
|
|
100
103
|
id: "trigger",
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
style: {
|
|
105
|
+
background: !description || loading ? theme.palette.action.disabled : theme.palette.secondary.main
|
|
106
|
+
},
|
|
107
|
+
isDisabled: !description || loading,
|
|
108
|
+
variant: "primary",
|
|
104
109
|
onClick: () => handleTriggerAlarm(description),
|
|
105
|
-
|
|
106
|
-
children: "
|
|
110
|
+
iconEnd: loading ? /* @__PURE__ */ jsx(CircularProgress, { size: 16 }) : /* @__PURE__ */ jsx(Fragment, {}),
|
|
111
|
+
children: "TRIGGER INCIDENT"
|
|
107
112
|
}
|
|
108
113
|
),
|
|
109
|
-
/* @__PURE__ */ jsx(Button, { id: "close",
|
|
114
|
+
/* @__PURE__ */ jsx(Button, { id: "close", onClick: handleDialog, children: "CLOSE" })
|
|
110
115
|
] })
|
|
111
116
|
] });
|
|
112
117
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerDialog.esm.js","sources":["../../../src/components/TriggerDialog/TriggerDialog.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\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport
|
|
1
|
+
{"version":3,"file":"TriggerDialog.esm.js","sources":["../../../src/components/TriggerDialog/TriggerDialog.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\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n TextField,\n DialogActions,\n DialogContent,\n Typography,\n CircularProgress,\n useTheme,\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';\nimport { Button } from '@backstage/ui';\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 const theme = useTheme();\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 // clear description state\n setDescription('');\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{' '}\n <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 style={{\n background:\n !description || loading\n ? theme.palette.action.disabled\n : theme.palette.secondary.main,\n }}\n isDisabled={!description || loading}\n variant=\"primary\"\n onClick={() => handleTriggerAlarm(description)}\n iconEnd={loading ? <CircularProgress size={16} /> : <></>}\n >\n TRIGGER INCIDENT\n </Button>\n <Button id=\"close\" onClick={handleDialog}>\n CLOSE\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagerDutyEntity.esm.js","sources":["../../src/components/pagerDutyEntity.ts"],"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\nimport { Entity } from '@backstage/catalog-model';\nimport { PagerDutyEntity } from '../types';\nimport {
|
|
1
|
+
{"version":3,"file":"pagerDutyEntity.esm.js","sources":["../../src/components/pagerDutyEntity.ts"],"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\nimport { Entity } from '@backstage/catalog-model';\nimport { PagerDutyEntity } from '../types';\nimport {\n PAGERDUTY_INTEGRATION_KEY,\n PAGERDUTY_SERVICE_ID,\n PAGERDUTY_ACCOUNT_NAME,\n} from './constants';\n\nexport function getPagerDutyEntity(entity: Entity): PagerDutyEntity {\n const {\n [PAGERDUTY_INTEGRATION_KEY]: integrationKey,\n [PAGERDUTY_SERVICE_ID]: serviceId,\n [PAGERDUTY_ACCOUNT_NAME]: account,\n } = entity.metadata.annotations || ({} as Record<string, string>);\n const name = entity.metadata.name;\n\n return { integrationKey, serviceId, account, name };\n}\n"],"names":[],"mappings":";;AAwBO,SAAS,mBAAmB,MAAA,EAAiC;AAClE,EAAA,MAAM;AAAA,IACJ,CAAC,yBAAyB,GAAG,cAAA;AAAA,IAC7B,CAAC,oBAAoB,GAAG,SAAA;AAAA,IACxB,CAAC,sBAAsB,GAAG;AAAA,GAC5B,GAAI,MAAA,CAAO,QAAA,CAAS,WAAA,IAAgB,EAAC;AACrC,EAAA,MAAM,IAAA,GAAO,OAAO,QAAA,CAAS,IAAA;AAE7B,EAAA,OAAO,EAAE,cAAA,EAAgB,SAAA,EAAW,OAAA,EAAS,IAAA,EAAK;AACpD;;;;"}
|