@pagerduty/backstage-plugin 0.12.1-next.98 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/client.esm.js +151 -0
- package/dist/api/client.esm.js.map +1 -0
- package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js +17 -0
- package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js.map +1 -0
- package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js +17 -0
- package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js.map +1 -0
- package/dist/components/ChangeEvents/ChangeEventListItem.esm.js +70 -0
- package/dist/components/ChangeEvents/ChangeEventListItem.esm.js.map +1 -0
- package/dist/components/ChangeEvents/ChangeEvents.esm.js +45 -0
- package/dist/components/ChangeEvents/ChangeEvents.esm.js.map +1 -0
- package/dist/components/EntityPagerDutyCard/index.esm.js +29 -0
- package/dist/components/EntityPagerDutyCard/index.esm.js.map +1 -0
- package/dist/components/EntityPagerDutySmallCard/index.esm.js +29 -0
- package/dist/components/EntityPagerDutySmallCard/index.esm.js.map +1 -0
- package/dist/components/Errors/ForbiddenError.esm.js +24 -0
- package/dist/components/Errors/ForbiddenError.esm.js.map +1 -0
- package/dist/components/Errors/MissingTokenError.esm.js +24 -0
- package/dist/components/Errors/MissingTokenError.esm.js.map +1 -0
- package/dist/components/Errors/ServiceNotFoundError.esm.js +24 -0
- package/dist/components/Errors/ServiceNotFoundError.esm.js.map +1 -0
- package/dist/components/Escalation/EscalationPolicy.esm.js +64 -0
- package/dist/components/Escalation/EscalationPolicy.esm.js.map +1 -0
- package/dist/components/Escalation/EscalationUser.esm.js +98 -0
- package/dist/components/Escalation/EscalationUser.esm.js.map +1 -0
- package/dist/components/Escalation/EscalationUsersEmptyState.esm.js +20 -0
- package/dist/components/Escalation/EscalationUsersEmptyState.esm.js.map +1 -0
- package/dist/components/Escalation/EscalationUsersForbiddenState.esm.js +20 -0
- package/dist/components/Escalation/EscalationUsersForbiddenState.esm.js.map +1 -0
- package/dist/components/HomePagePagerDutyCard/Content.esm.js +9 -0
- package/dist/components/HomePagePagerDutyCard/Content.esm.js.map +1 -0
- package/dist/components/HomePagePagerDutyCard/index.esm.js +2 -0
- package/dist/components/HomePagePagerDutyCard/index.esm.js.map +1 -0
- package/dist/components/Incident/IncidentEmptyState.esm.js +27 -0
- package/dist/components/Incident/IncidentEmptyState.esm.js.map +1 -0
- package/dist/components/Incident/IncidentForbiddenState.esm.js +17 -0
- package/dist/components/Incident/IncidentForbiddenState.esm.js.map +1 -0
- package/dist/components/Incident/IncidentListItem.esm.js +114 -0
- package/dist/components/Incident/IncidentListItem.esm.js.map +1 -0
- package/dist/components/Incident/Incidents.esm.js +41 -0
- package/dist/components/Incident/Incidents.esm.js.map +1 -0
- package/dist/components/PagerDutyCard/index.esm.js +193 -0
- package/dist/components/PagerDutyCard/index.esm.js.map +1 -0
- package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js +35 -0
- package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js.map +1 -0
- package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js +42 -0
- package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js.map +1 -0
- package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js +95 -0
- package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js.map +1 -0
- package/dist/components/PagerDutyCardCommon/StatusCard.esm.js +102 -0
- package/dist/components/PagerDutyCardCommon/StatusCard.esm.js.map +1 -0
- package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js +59 -0
- package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js.map +1 -0
- package/dist/components/PagerDutySmallCard/index.esm.js +209 -0
- package/dist/components/PagerDutySmallCard/index.esm.js.map +1 -0
- package/dist/components/TriggerButton/index.esm.js +48 -0
- package/dist/components/TriggerButton/index.esm.js.map +1 -0
- package/dist/components/TriggerDialog/TriggerDialog.esm.js +94 -0
- package/dist/components/TriggerDialog/TriggerDialog.esm.js.map +1 -0
- package/dist/components/constants.esm.js +5 -0
- package/dist/components/constants.esm.js.map +1 -0
- package/dist/components/pagerDutyEntity.esm.js +13 -0
- package/dist/components/pagerDutyEntity.esm.js.map +1 -0
- package/dist/deprecated.esm.js +10 -0
- package/dist/deprecated.esm.js.map +1 -0
- package/dist/hooks/index.esm.js +10 -0
- package/dist/hooks/index.esm.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.esm.js +6 -30
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +71 -0
- package/dist/plugin.esm.js.map +1 -0
- package/package.json +12 -10
- package/dist/esm/index-b1b65bd2.esm.js +0 -37
- package/dist/esm/index-b1b65bd2.esm.js.map +0 -1
- package/dist/esm/index-b56f9c4b.esm.js +0 -1595
- package/dist/esm/index-b56f9c4b.esm.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutyCard/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 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"],"names":["InsightsCard"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { makeStyles, Card, Typography } from '@material-ui/core';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import validateColor from 'validate-color';
|
|
4
|
+
|
|
5
|
+
function IncidentCounterCard({ count, label, color, compact }) {
|
|
6
|
+
const textColor = color && validateColor(color) ? color : "black";
|
|
7
|
+
const useStyles = makeStyles(() => ({
|
|
8
|
+
cardStyle: {
|
|
9
|
+
marginRight: "10px",
|
|
10
|
+
height: compact !== true ? "120px" : "80px",
|
|
11
|
+
display: "flex",
|
|
12
|
+
alignItems: "center",
|
|
13
|
+
justifyContent: "center",
|
|
14
|
+
backgroundColor: "rgba(0, 0, 0, 0.03)"
|
|
15
|
+
},
|
|
16
|
+
largeTextStyle: {
|
|
17
|
+
color: textColor,
|
|
18
|
+
fontSize: "30px",
|
|
19
|
+
marginTop: "-10px"
|
|
20
|
+
},
|
|
21
|
+
smallTextStyle: {
|
|
22
|
+
color: textColor,
|
|
23
|
+
fontWeight: "bold",
|
|
24
|
+
fontSize: "10px",
|
|
25
|
+
marginTop: "-5px",
|
|
26
|
+
textTransform: "uppercase",
|
|
27
|
+
flexWrap: "wrap"
|
|
28
|
+
}
|
|
29
|
+
}));
|
|
30
|
+
const { cardStyle, largeTextStyle, smallTextStyle } = useStyles();
|
|
31
|
+
return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, count !== void 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, count), /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, label)) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, "-"), /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, label)));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { IncidentCounterCard as default };
|
|
35
|
+
//# sourceMappingURL=InsightsCard.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsightsCard.esm.js","sources":["../../../src/components/PagerDutyCardCommon/InsightsCard.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;AAYA,SAAS,oBAAoB,EAAE,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,SAAkB,EAAA;AAEpE,EAAA,MAAM,SAAY,GAAA,KAAA,IAAS,aAAc,CAAA,KAAK,IAAI,KAAQ,GAAA,OAAA,CAAA;AAE1D,EAAM,MAAA,SAAA,GAAY,WAA2B,OAAO;AAAA,IAClD,SAAW,EAAA;AAAA,MACT,WAAa,EAAA,MAAA;AAAA,MACb,MAAA,EAAQ,OAAY,KAAA,IAAA,GAAO,OAAU,GAAA,MAAA;AAAA,MACrC,OAAS,EAAA,MAAA;AAAA,MACT,UAAY,EAAA,QAAA;AAAA,MACZ,cAAgB,EAAA,QAAA;AAAA,MAChB,eAAiB,EAAA,qBAAA;AAAA,KACnB;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA,MAAA;AAAA,MACV,SAAW,EAAA,OAAA;AAAA,KACb;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA,SAAA;AAAA,MACP,UAAY,EAAA,MAAA;AAAA,MACZ,QAAU,EAAA,MAAA;AAAA,MACV,SAAW,EAAA,MAAA;AAAA,MACX,aAAe,EAAA,WAAA;AAAA,MACf,QAAU,EAAA,MAAA;AAAA,KACZ;AAAA,GACA,CAAA,CAAA,CAAA;AAEF,EAAA,MAAM,EAAE,SAAA,EAAW,cAAgB,EAAA,cAAA,KAAmB,SAAU,EAAA,CAAA;AAEhE,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAW,EAAA,SAAA,EAAA,EACb,UAAU,KACV,CAAA,mBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,SAAW,EAAA,cAAA,EAAA,EAAiB,KAAM,CAAA,sCAC7C,UAAW,EAAA,EAAA,SAAA,EAAW,cAAiB,EAAA,EAAA,KAAM,CAChD,CAAA,mBAGE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,cAAA,EAAA,EAAgB,GAAC,CAAA,sCACvC,UAAW,EAAA,EAAA,SAAA,EAAW,cAAiB,EAAA,EAAA,KAAM,CAChD,CAEJ,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { makeStyles, IconButton } from '@material-ui/core';
|
|
3
|
+
import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';
|
|
4
|
+
|
|
5
|
+
function OpenServiceButton({ serviceUrl, compact }) {
|
|
6
|
+
const useStyles = makeStyles((theme) => ({
|
|
7
|
+
buttonStyle: {
|
|
8
|
+
color: theme.palette.text.primary,
|
|
9
|
+
"&:hover": {
|
|
10
|
+
backgroundColor: "transparent",
|
|
11
|
+
textDecoration: "underline"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
containerStyle: {
|
|
15
|
+
fontSize: compact !== true ? "12px" : "10px",
|
|
16
|
+
width: compact !== true ? "85px" : "70px"
|
|
17
|
+
},
|
|
18
|
+
iconStyle: {
|
|
19
|
+
fontSize: "30px",
|
|
20
|
+
marginBottom: "-10px"
|
|
21
|
+
},
|
|
22
|
+
textStyle: {
|
|
23
|
+
marginBottom: "-10px"
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();
|
|
27
|
+
function navigateToService() {
|
|
28
|
+
window.open(serviceUrl, "_blank");
|
|
29
|
+
}
|
|
30
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
31
|
+
IconButton,
|
|
32
|
+
{
|
|
33
|
+
"aria-label": "open-service-in-browser",
|
|
34
|
+
onClick: navigateToService,
|
|
35
|
+
className: buttonStyle
|
|
36
|
+
},
|
|
37
|
+
/* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(OpenInBrowserIcon, { className: iconStyle }), /* @__PURE__ */ React.createElement("p", { className: textStyle }, "Open service in PagerDuty"))
|
|
38
|
+
));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { OpenServiceButton };
|
|
42
|
+
//# sourceMappingURL=OpenServiceButton.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenServiceButton.esm.js","sources":["../../../src/components/PagerDutyCardCommon/OpenServiceButton.tsx"],"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 */\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"],"names":["OpenInBrowser"],"mappings":";;;;AA6BO,SAAS,iBAAkB,CAAA,EAAE,UAAY,EAAA,OAAA,EAAmC,EAAA;AACjF,EAAM,MAAA,SAAA,GAAY,UAA2B,CAAA,CAAC,KAAW,MAAA;AAAA,IACvD,WAAa,EAAA;AAAA,MACX,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,MAC1B,SAAW,EAAA;AAAA,QACT,eAAiB,EAAA,aAAA;AAAA,QACjB,cAAgB,EAAA,WAAA;AAAA,OAClB;AAAA,KACF;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,QAAA,EAAU,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,MACtC,KAAA,EAAO,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,KACrC;AAAA,IACA,SAAW,EAAA;AAAA,MACT,QAAU,EAAA,MAAA;AAAA,MACV,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,GACA,CAAA,CAAA,CAAA;AAEF,EAAA,MAAM,EAAE,WAAa,EAAA,cAAA,EAAgB,SAAW,EAAA,SAAA,KAAc,SAAU,EAAA,CAAA;AAExE,EAAA,SAAS,iBAAoB,GAAA;AAC3B,IAAO,MAAA,CAAA,IAAA,CAAK,YAAY,QAAQ,CAAA,CAAA;AAAA,GAClC;AAEA,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,yBAAA;AAAA,MACX,OAAS,EAAA,iBAAA;AAAA,MACT,SAAW,EAAA,WAAA;AAAA,KAAA;AAAA,oBAEV,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,cAAA,EAAA,sCACbA,iBAAc,EAAA,EAAA,SAAA,EAAW,SAAW,EAAA,CAAA,kBACpC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAE,SAAW,EAAA,SAAA,EAAA,EAAW,2BAAyB,CACpD,CAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { makeStyles, withStyles, LinearProgress, Card, Typography, IconButton, Tooltip } from '@material-ui/core';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import InfoIcon from '@material-ui/icons/Info';
|
|
4
|
+
import CheckCircle from '@material-ui/icons/CheckCircle';
|
|
5
|
+
import RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';
|
|
6
|
+
|
|
7
|
+
function colorFromPercentage(theme, percentage) {
|
|
8
|
+
if (percentage < 0.5) {
|
|
9
|
+
return theme.palette.error.main;
|
|
10
|
+
} else if (percentage < 0.8) {
|
|
11
|
+
return theme.palette.warning.main;
|
|
12
|
+
}
|
|
13
|
+
return theme.palette.success.main;
|
|
14
|
+
}
|
|
15
|
+
function ServiceStandardsCard({ total, completed, standards, compact }) {
|
|
16
|
+
const useStyles = makeStyles((theme) => ({
|
|
17
|
+
cardStyle: {
|
|
18
|
+
height: compact !== true ? "120px" : "80px",
|
|
19
|
+
display: "grid",
|
|
20
|
+
gridTemplateRows: "1fr auto auto",
|
|
21
|
+
backgroundColor: "rgba(0, 0, 0, 0.03)"
|
|
22
|
+
},
|
|
23
|
+
containerStyle: {
|
|
24
|
+
display: "flex",
|
|
25
|
+
justifyContent: "center",
|
|
26
|
+
marginTop: compact !== true ? "-100px" : "-50px"
|
|
27
|
+
},
|
|
28
|
+
largeTextStyle: {
|
|
29
|
+
fontSize: compact !== true ? "50px" : "40px",
|
|
30
|
+
color: completed !== void 0 && total !== void 0 ? colorFromPercentage(theme, completed / total) : colorFromPercentage(theme, 0),
|
|
31
|
+
alignSelf: "center",
|
|
32
|
+
justifyContent: "center"
|
|
33
|
+
},
|
|
34
|
+
smallTextStyle: {
|
|
35
|
+
color: theme.palette.textSubtle,
|
|
36
|
+
fontSize: compact !== true ? "14px" : "12px",
|
|
37
|
+
fontWeight: "bold",
|
|
38
|
+
alignSelf: "center",
|
|
39
|
+
justifyContent: "center",
|
|
40
|
+
marginLeft: "-2px",
|
|
41
|
+
marginTop: compact !== true ? "25px" : "20px"
|
|
42
|
+
},
|
|
43
|
+
tooltipContainer: {},
|
|
44
|
+
tooltipIcon: {
|
|
45
|
+
marginRight: "5px"
|
|
46
|
+
},
|
|
47
|
+
standardItem: {
|
|
48
|
+
display: "flex",
|
|
49
|
+
alignItems: "center"
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
const BorderLinearProgress = withStyles((theme) => ({
|
|
53
|
+
root: {
|
|
54
|
+
height: 10,
|
|
55
|
+
borderRadius: 5,
|
|
56
|
+
margin: 5
|
|
57
|
+
},
|
|
58
|
+
colorPrimary: {
|
|
59
|
+
backgroundColor: theme.palette.grey[theme.palette.type === "light" ? 200 : 700]
|
|
60
|
+
},
|
|
61
|
+
bar: {
|
|
62
|
+
borderRadius: 5,
|
|
63
|
+
backgroundColor: completed !== void 0 && total !== void 0 ? colorFromPercentage(theme, completed / total) : colorFromPercentage(theme, 0)
|
|
64
|
+
}
|
|
65
|
+
}))(LinearProgress);
|
|
66
|
+
const {
|
|
67
|
+
cardStyle,
|
|
68
|
+
containerStyle,
|
|
69
|
+
largeTextStyle,
|
|
70
|
+
smallTextStyle,
|
|
71
|
+
tooltipContainer,
|
|
72
|
+
tooltipIcon,
|
|
73
|
+
standardItem
|
|
74
|
+
} = useStyles();
|
|
75
|
+
if (standards === void 0 || completed === void 0 || total === void 0) {
|
|
76
|
+
return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, "Unable to retrieve Scores")));
|
|
77
|
+
}
|
|
78
|
+
return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, completed !== void 0 && total !== void 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: tooltipContainer }, /* @__PURE__ */ React.createElement(IconButton, null, /* @__PURE__ */ React.createElement(
|
|
79
|
+
Tooltip,
|
|
80
|
+
{
|
|
81
|
+
interactive: true,
|
|
82
|
+
title: /* @__PURE__ */ React.createElement(React.Fragment, null, standards == null ? void 0 : standards.map((standard, key) => /* @__PURE__ */ React.createElement("p", { key }, standard.pass ? /* @__PURE__ */ React.createElement("span", { className: standardItem }, /* @__PURE__ */ React.createElement(CheckCircle, { className: tooltipIcon }), " ", standard.name) : /* @__PURE__ */ React.createElement("span", { className: standardItem }, /* @__PURE__ */ React.createElement(RadioButtonUncheckedIcon, { className: tooltipIcon }), " ", standard.name))))
|
|
83
|
+
},
|
|
84
|
+
/* @__PURE__ */ React.createElement(InfoIcon, null)
|
|
85
|
+
))), /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, completed), /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, "/", total)), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
|
|
86
|
+
BorderLinearProgress,
|
|
87
|
+
{
|
|
88
|
+
variant: "determinate",
|
|
89
|
+
value: completed / total * 100
|
|
90
|
+
}
|
|
91
|
+
))) : /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, "Unable to retrieve Scores")));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { ServiceStandardsCard as default };
|
|
95
|
+
//# sourceMappingURL=ServiceStandardsCard.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceStandardsCard.esm.js","sources":["../../../src/components/PagerDutyCardCommon/ServiceStandardsCard.tsx"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Card, Typography } from '@material-ui/core';
|
|
2
|
+
import React, { useEffect } from 'react';
|
|
3
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
4
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
5
|
+
import { pagerDutyApiRef } from '../../api/client.esm.js';
|
|
6
|
+
import { useAsyncFn } from 'react-use';
|
|
7
|
+
import Alert from '@material-ui/lab/Alert/Alert';
|
|
8
|
+
import { Progress } from '@backstage/core-components';
|
|
9
|
+
|
|
10
|
+
function labelFromStatus(status) {
|
|
11
|
+
let label;
|
|
12
|
+
switch (status) {
|
|
13
|
+
case "active":
|
|
14
|
+
label = "OK";
|
|
15
|
+
break;
|
|
16
|
+
case "warning":
|
|
17
|
+
label = "ACTIVE";
|
|
18
|
+
break;
|
|
19
|
+
case "critical":
|
|
20
|
+
label = "ALARM";
|
|
21
|
+
break;
|
|
22
|
+
case "maintenance":
|
|
23
|
+
label = "MAINTENANCE";
|
|
24
|
+
break;
|
|
25
|
+
case "disabled":
|
|
26
|
+
label = "DISABLED";
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
label = "OK";
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
return label;
|
|
33
|
+
}
|
|
34
|
+
function colorFromStatus(theme, status) {
|
|
35
|
+
let color;
|
|
36
|
+
switch (status) {
|
|
37
|
+
case "active":
|
|
38
|
+
color = theme.palette.success.main;
|
|
39
|
+
break;
|
|
40
|
+
case "warning":
|
|
41
|
+
color = theme.palette.warningBackground;
|
|
42
|
+
break;
|
|
43
|
+
case "critical":
|
|
44
|
+
color = theme.palette.error.main;
|
|
45
|
+
break;
|
|
46
|
+
case "maintenance":
|
|
47
|
+
color = "#ebdc00";
|
|
48
|
+
break;
|
|
49
|
+
case "disabled":
|
|
50
|
+
color = "#A9A9A9";
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
color = theme.palette.success.main;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
return color;
|
|
57
|
+
}
|
|
58
|
+
function StatusCard({ serviceId, refreshStatus, compact }) {
|
|
59
|
+
const api = useApi(pagerDutyApiRef);
|
|
60
|
+
const [{ value: status, loading, error }, getStatus] = useAsyncFn(
|
|
61
|
+
async () => {
|
|
62
|
+
const { service: foundService } = await api.getServiceById(serviceId);
|
|
63
|
+
return foundService.status;
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
const useStyles = makeStyles((theme) => ({
|
|
67
|
+
cardStyle: {
|
|
68
|
+
height: compact !== true ? "120px" : "80px",
|
|
69
|
+
display: "flex",
|
|
70
|
+
alignItems: "center",
|
|
71
|
+
justifyContent: "center",
|
|
72
|
+
backgroundColor: status !== void 0 ? colorFromStatus(theme, status) : colorFromStatus(theme, "active"),
|
|
73
|
+
marginRight: "10px"
|
|
74
|
+
},
|
|
75
|
+
largeTextStyle: {
|
|
76
|
+
color: "white",
|
|
77
|
+
fontWeight: "bold",
|
|
78
|
+
fontSize: "20px",
|
|
79
|
+
wordWrap: "break-word"
|
|
80
|
+
}
|
|
81
|
+
}));
|
|
82
|
+
const { cardStyle, largeTextStyle } = useStyles();
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
getStatus();
|
|
85
|
+
}, [refreshStatus, getStatus]);
|
|
86
|
+
if (error) {
|
|
87
|
+
if (error.message.includes("Forbidden")) {
|
|
88
|
+
return /* @__PURE__ */ React.createElement("p", null, "forbidden");
|
|
89
|
+
}
|
|
90
|
+
return /* @__PURE__ */ React.createElement(Alert, { severity: "error" }, "Error encountered while fetching information. ", error.message);
|
|
91
|
+
}
|
|
92
|
+
if (loading) {
|
|
93
|
+
return /* @__PURE__ */ React.createElement(Progress, null);
|
|
94
|
+
}
|
|
95
|
+
if (!status) {
|
|
96
|
+
return /* @__PURE__ */ React.createElement("p", null, "not found");
|
|
97
|
+
}
|
|
98
|
+
return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, status !== void 0 ? /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, labelFromStatus(status)) : /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, "Unable to get status"));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export { StatusCard as default };
|
|
102
|
+
//# sourceMappingURL=StatusCard.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusCard.esm.js","sources":["../../../src/components/PagerDutyCardCommon/StatusCard.tsx"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React, { useState, useCallback } from 'react';
|
|
2
|
+
import { makeStyles, IconButton } from '@material-ui/core';
|
|
3
|
+
import { TriggerDialog } from '../TriggerDialog/TriggerDialog.esm.js';
|
|
4
|
+
import AddAlert from '@material-ui/icons/AddAlert';
|
|
5
|
+
|
|
6
|
+
function TriggerIncidentButton({ integrationKey, entityName, compact, handleRefresh }) {
|
|
7
|
+
const useStyles = makeStyles((theme) => ({
|
|
8
|
+
buttonStyle: {
|
|
9
|
+
color: theme.palette.text.primary,
|
|
10
|
+
"&:hover": {
|
|
11
|
+
backgroundColor: "transparent",
|
|
12
|
+
textDecoration: "underline"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
containerStyle: {
|
|
16
|
+
fontSize: compact !== true ? "12px" : "10px",
|
|
17
|
+
width: compact !== true ? "80px" : "60px",
|
|
18
|
+
marginRight: "-10px"
|
|
19
|
+
},
|
|
20
|
+
iconStyle: {
|
|
21
|
+
fontSize: "30px",
|
|
22
|
+
marginBottom: "-10px"
|
|
23
|
+
},
|
|
24
|
+
textStyle: {
|
|
25
|
+
marginBottom: "-10px"
|
|
26
|
+
}
|
|
27
|
+
}));
|
|
28
|
+
const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();
|
|
29
|
+
const [dialogShown, setDialogShown] = useState(false);
|
|
30
|
+
const showDialog = useCallback(() => {
|
|
31
|
+
setDialogShown(true);
|
|
32
|
+
}, [setDialogShown]);
|
|
33
|
+
const hideDialog = useCallback(() => {
|
|
34
|
+
setDialogShown(false);
|
|
35
|
+
}, [setDialogShown]);
|
|
36
|
+
const disabled = !integrationKey;
|
|
37
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
38
|
+
IconButton,
|
|
39
|
+
{
|
|
40
|
+
"aria-label": "create-incident",
|
|
41
|
+
onClick: showDialog,
|
|
42
|
+
className: disabled ? "" : buttonStyle,
|
|
43
|
+
disabled
|
|
44
|
+
},
|
|
45
|
+
/* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(AddAlert, { className: iconStyle }), /* @__PURE__ */ React.createElement("p", { className: textStyle }, "Create new incident"))
|
|
46
|
+
), integrationKey && /* @__PURE__ */ React.createElement(
|
|
47
|
+
TriggerDialog,
|
|
48
|
+
{
|
|
49
|
+
showDialog: dialogShown,
|
|
50
|
+
handleDialog: hideDialog,
|
|
51
|
+
integrationKey,
|
|
52
|
+
serviceName: entityName,
|
|
53
|
+
onIncidentCreated: handleRefresh
|
|
54
|
+
}
|
|
55
|
+
));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { TriggerIncidentButton };
|
|
59
|
+
//# sourceMappingURL=TriggerIncidentButton.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerIncidentButton.esm.js","sources":["../../../src/components/PagerDutyCardCommon/TriggerIncidentButton.tsx"],"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 */\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"],"names":[],"mappings":";;;;;AAiCO,SAAS,sBAAsB,EAAE,cAAA,EAAgB,UAAY,EAAA,OAAA,EAAS,eAA8C,EAAA;AACzH,EAAM,MAAA,SAAA,GAAY,UAA2B,CAAA,CAAC,KAAW,MAAA;AAAA,IACvD,WAAa,EAAA;AAAA,MACX,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,MAC1B,SAAW,EAAA;AAAA,QACT,eAAiB,EAAA,aAAA;AAAA,QACjB,cAAgB,EAAA,WAAA;AAAA,OAClB;AAAA,KACF;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,QAAA,EAAU,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,MACtC,KAAA,EAAO,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,MACnC,WAAa,EAAA,OAAA;AAAA,KACf;AAAA,IACA,SAAW,EAAA;AAAA,MACT,QAAU,EAAA,MAAA;AAAA,MACV,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,GACA,CAAA,CAAA,CAAA;AAEF,EAAA,MAAM,EAAE,WAAa,EAAA,cAAA,EAAgB,SAAW,EAAA,SAAA,KAAc,SAAU,EAAA,CAAA;AACxE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAE7D,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AAAA,GACrB,EAAG,CAAC,cAAc,CAAC,CAAA,CAAA;AACnB,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AAAA,GACtB,EAAG,CAAC,cAAc,CAAC,CAAA,CAAA;AAEnB,EAAA,MAAM,WAAW,CAAC,cAAA,CAAA;AAElB,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,iBAAA;AAAA,MACX,OAAS,EAAA,UAAA;AAAA,MACT,SAAA,EAAW,WAAW,EAAK,GAAA,WAAA;AAAA,MAC3B,QAAA;AAAA,KAAA;AAAA,oBAEC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,cAAA,EAAA,sCACb,QAAS,EAAA,EAAA,SAAA,EAAW,SAAW,EAAA,CAAA,kBAC/B,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAE,SAAW,EAAA,SAAA,EAAA,EAAW,qBAAmB,CAC9C,CAAA;AAAA,KAED,cACC,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA,WAAA;AAAA,MACZ,YAAc,EAAA,UAAA;AAAA,MACd,cAAA;AAAA,MACA,WAAa,EAAA,UAAA;AAAA,MACb,iBAAmB,EAAA,aAAA;AAAA,KAAA;AAAA,GAGzB,CAAA,CAAA;AAEJ;;;;"}
|