@backstage-community/plugin-ilert 0.2.24 → 0.3.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/CHANGELOG.md +12 -0
- package/dist/ILertIcon.esm.js +61 -0
- package/dist/ILertIcon.esm.js.map +1 -0
- package/dist/api/client.esm.js +395 -0
- package/dist/api/client.esm.js.map +1 -0
- package/dist/components/Alert/AlertActionsMenu.esm.js +142 -0
- package/dist/components/Alert/AlertActionsMenu.esm.js.map +1 -0
- package/dist/components/Alert/AlertAssignModal.esm.js +147 -0
- package/dist/components/Alert/AlertAssignModal.esm.js.map +1 -0
- package/dist/components/Alert/AlertLink.esm.js +15 -0
- package/dist/components/Alert/AlertLink.esm.js.map +1 -0
- package/dist/components/Alert/AlertNewModal.esm.js +192 -0
- package/dist/components/Alert/AlertNewModal.esm.js.map +1 -0
- package/dist/components/AlertSource/AlertSourceLink.esm.js +49 -0
- package/dist/components/AlertSource/AlertSourceLink.esm.js.map +1 -0
- package/dist/components/AlertsPage/AlertsPage.esm.js +67 -0
- package/dist/components/AlertsPage/AlertsPage.esm.js.map +1 -0
- package/dist/components/AlertsPage/AlertsTable.esm.js +185 -0
- package/dist/components/AlertsPage/AlertsTable.esm.js.map +1 -0
- package/dist/components/AlertsPage/StatusChip.esm.js +47 -0
- package/dist/components/AlertsPage/StatusChip.esm.js.map +1 -0
- package/dist/components/AlertsPage/TableTitle.esm.js +74 -0
- package/dist/components/AlertsPage/TableTitle.esm.js.map +1 -0
- package/dist/components/Errors/MissingAuthorizationHeaderError.esm.js +24 -0
- package/dist/components/Errors/MissingAuthorizationHeaderError.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCard.esm.js +113 -0
- package/dist/components/ILertCard/ILertCard.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCardActionsHeader.esm.js +138 -0
- package/dist/components/ILertCard/ILertCardActionsHeader.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCardEmptyState.esm.js +57 -0
- package/dist/components/ILertCard/ILertCardEmptyState.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCardHeaderStatus.esm.js +29 -0
- package/dist/components/ILertCard/ILertCardHeaderStatus.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCardMaintenanceModal.esm.js +101 -0
- package/dist/components/ILertCard/ILertCardMaintenanceModal.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCardOnCall.esm.js +78 -0
- package/dist/components/ILertCard/ILertCardOnCall.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCardOnCallEmptyState.esm.js +26 -0
- package/dist/components/ILertCard/ILertCardOnCallEmptyState.esm.js.map +1 -0
- package/dist/components/ILertCard/ILertCardOnCallItem.esm.js +109 -0
- package/dist/components/ILertCard/ILertCardOnCallItem.esm.js.map +1 -0
- package/dist/components/ILertCard/index.esm.js +2 -0
- package/dist/components/ILertCard/index.esm.js.map +1 -0
- package/dist/components/ILertPage/ILertPage.esm.js +48 -0
- package/dist/components/ILertPage/ILertPage.esm.js.map +1 -0
- package/dist/components/OnCallSchedulesPage/OnCallSchedulesGrid.esm.js +135 -0
- package/dist/components/OnCallSchedulesPage/OnCallSchedulesGrid.esm.js.map +1 -0
- package/dist/components/OnCallSchedulesPage/OnCallSchedulesPage.esm.js +27 -0
- package/dist/components/OnCallSchedulesPage/OnCallSchedulesPage.esm.js.map +1 -0
- package/dist/components/OnCallSchedulesPage/OnCallShiftItem.esm.js +63 -0
- package/dist/components/OnCallSchedulesPage/OnCallShiftItem.esm.js.map +1 -0
- package/dist/components/Service/ServiceActionsMenu.esm.js +47 -0
- package/dist/components/Service/ServiceActionsMenu.esm.js.map +1 -0
- package/dist/components/Service/ServiceLink.esm.js +15 -0
- package/dist/components/Service/ServiceLink.esm.js.map +1 -0
- package/dist/components/ServicesPage/ServicesPage.esm.js +32 -0
- package/dist/components/ServicesPage/ServicesPage.esm.js.map +1 -0
- package/dist/components/ServicesPage/ServicesTable.esm.js +99 -0
- package/dist/components/ServicesPage/ServicesTable.esm.js.map +1 -0
- package/dist/components/ServicesPage/StatusChip.esm.js +67 -0
- package/dist/components/ServicesPage/StatusChip.esm.js.map +1 -0
- package/dist/components/Shift/ShiftOverrideModal.esm.js +171 -0
- package/dist/components/Shift/ShiftOverrideModal.esm.js.map +1 -0
- package/dist/components/StatusPage/StatusPageActionsMenu.esm.js +50 -0
- package/dist/components/StatusPage/StatusPageActionsMenu.esm.js.map +1 -0
- package/dist/components/StatusPage/StatusPageLink.esm.js +17 -0
- package/dist/components/StatusPage/StatusPageLink.esm.js.map +1 -0
- package/dist/components/StatusPage/StatusPageURL.esm.js +18 -0
- package/dist/components/StatusPage/StatusPageURL.esm.js.map +1 -0
- package/dist/components/StatusPagePage/StatusChip.esm.js +67 -0
- package/dist/components/StatusPagePage/StatusChip.esm.js.map +1 -0
- package/dist/components/StatusPagePage/StatusPagesPage.esm.js +32 -0
- package/dist/components/StatusPagePage/StatusPagesPage.esm.js.map +1 -0
- package/dist/components/StatusPagePage/StatusPagesTable.esm.js +115 -0
- package/dist/components/StatusPagePage/StatusPagesTable.esm.js.map +1 -0
- package/dist/components/StatusPagePage/VisibilityChip.esm.js +37 -0
- package/dist/components/StatusPagePage/VisibilityChip.esm.js.map +1 -0
- package/dist/components/index.esm.js +3 -0
- package/dist/components/index.esm.js.map +1 -0
- package/dist/constants.esm.js +4 -0
- package/dist/constants.esm.js.map +1 -0
- package/dist/hooks/index.esm.js +13 -0
- package/dist/hooks/index.esm.js.map +1 -0
- package/dist/hooks/useAlertActions.esm.js +43 -0
- package/dist/hooks/useAlertActions.esm.js.map +1 -0
- package/dist/hooks/useAlertSource.esm.js +52 -0
- package/dist/hooks/useAlertSource.esm.js.map +1 -0
- package/dist/hooks/useAlertSourceOnCalls.esm.js +47 -0
- package/dist/hooks/useAlertSourceOnCalls.esm.js.map +1 -0
- package/dist/hooks/useAlerts.esm.js +128 -0
- package/dist/hooks/useAlerts.esm.js.map +1 -0
- package/dist/hooks/useAssignAlert.esm.js +53 -0
- package/dist/hooks/useAssignAlert.esm.js.map +1 -0
- package/dist/hooks/useNewAlert.esm.js +58 -0
- package/dist/hooks/useNewAlert.esm.js.map +1 -0
- package/dist/hooks/useOnCallSchedules.esm.js +42 -0
- package/dist/hooks/useOnCallSchedules.esm.js.map +1 -0
- package/dist/hooks/useServices.esm.js +70 -0
- package/dist/hooks/useServices.esm.js.map +1 -0
- package/dist/hooks/useShiftOverride.esm.js +60 -0
- package/dist/hooks/useShiftOverride.esm.js.map +1 -0
- package/dist/hooks/useStatusPages.esm.js +72 -0
- package/dist/hooks/useStatusPages.esm.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.esm.js +7 -3343
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +39 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/route-refs.esm.js +8 -0
- package/dist/route-refs.esm.js.map +1 -0
- package/dist/types.esm.js +13 -0
- package/dist/types.esm.js.map +1 -0
- package/package.json +12 -8
- package/dist/esm/index-D2_Gjvjx.esm.js +0 -58
- package/dist/esm/index-D2_Gjvjx.esm.js.map +0 -1
- package/dist/esm/index-aory7UQN.esm.js +0 -58
- package/dist/esm/index-aory7UQN.esm.js.map +0 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/api/client.ts","../src/route-refs.tsx","../src/plugin.ts","../src/types.ts","../src/hooks/useAlerts.ts","../src/hooks/useNewAlert.ts","../src/components/Alert/AlertNewModal.tsx","../src/components/Errors/MissingAuthorizationHeaderError.tsx","../src/hooks/useAlertActions.ts","../src/hooks/useAssignAlert.ts","../src/components/Alert/AlertAssignModal.tsx","../src/components/Alert/AlertActionsMenu.tsx","../src/components/Alert/AlertLink.tsx","../src/components/AlertSource/AlertSourceLink.tsx","../src/components/AlertsPage/StatusChip.tsx","../src/components/AlertsPage/TableTitle.tsx","../src/components/AlertsPage/AlertsTable.tsx","../src/components/AlertsPage/AlertsPage.tsx","../src/hooks/useShiftOverride.ts","../src/components/Shift/ShiftOverrideModal.tsx","../src/components/OnCallSchedulesPage/OnCallShiftItem.tsx","../src/components/OnCallSchedulesPage/OnCallSchedulesGrid.tsx","../src/hooks/useOnCallSchedules.ts","../src/components/OnCallSchedulesPage/OnCallSchedulesPage.tsx","../src/hooks/useServices.ts","../src/components/ServicesPage/StatusChip.tsx","../src/components/Service/ServiceActionsMenu.tsx","../src/components/Service/ServiceLink.tsx","../src/components/ServicesPage/ServicesTable.tsx","../src/components/ServicesPage/ServicesPage.tsx","../src/hooks/useStatusPages.ts","../src/components/StatusPagePage/VisibilityChip.tsx","../src/components/StatusPage/StatusPageActionsMenu.tsx","../src/components/StatusPage/StatusPageLink.tsx","../src/components/StatusPage/StatusPageURL.tsx","../src/components/StatusPagePage/StatusChip.tsx","../src/components/StatusPagePage/StatusPagesTable.tsx","../src/components/StatusPagePage/StatusPagesPage.tsx","../src/components/ILertPage/ILertPage.tsx","../src/constants.ts","../src/hooks/index.ts","../src/hooks/useAlertSource.ts","../src/components/ILertCard/ILertCardActionsHeader.tsx","../src/components/ILertCard/ILertCardEmptyState.tsx","../src/components/ILertCard/ILertCardHeaderStatus.tsx","../src/components/ILertCard/ILertCardMaintenanceModal.tsx","../src/hooks/useAlertSourceOnCalls.ts","../src/components/ILertCard/ILertCardOnCallEmptyState.tsx","../src/components/ILertCard/ILertCardOnCallItem.tsx","../src/components/ILertCard/ILertCardOnCall.tsx","../src/components/ILertCard/ILertCard.tsx","../src/ILertIcon.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 */\nimport {\n ConfigApi,\n createApiRef,\n DiscoveryApi,\n} from '@backstage/core-plugin-api';\nimport { AuthenticationError, ResponseError } from '@backstage/errors';\nimport { DateTime as dt } from 'luxon';\nimport {\n Alert,\n AlertAction,\n AlertResponder,\n AlertSource,\n EscalationPolicy,\n OnCall,\n Schedule,\n Service,\n StatusPage,\n User,\n} from '../types';\nimport {\n EventRequest,\n GetAlertsCountOpts,\n GetAlertsOpts,\n GetServicesOpts,\n GetStatusPagesOpts,\n ILertApi,\n} from './types';\n\n/** @public */\nexport const ilertApiRef = createApiRef<ILertApi>({\n id: 'plugin.ilert.service',\n});\n\nconst DEFAULT_PROXY_PATH = '/ilert';\nconst JSON_HEADERS = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n};\n\n/** @public */\nexport class ILertClient implements ILertApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly proxyPath: string;\n private readonly baseUrl: string;\n\n static fromConfig(configApi: ConfigApi, discoveryApi: DiscoveryApi) {\n const baseUrl: string =\n configApi.getOptionalString('ilert.baseUrl') ?? 'https://app.ilert.com';\n\n return new ILertClient({\n discoveryApi: discoveryApi,\n baseUrl,\n proxyPath:\n configApi.getOptionalString('ilert.proxyPath') ?? DEFAULT_PROXY_PATH,\n });\n }\n\n constructor(opts: {\n discoveryApi: DiscoveryApi;\n\n /**\n * URL used by users to access iLert web UI.\n * Example: https://my-org.ilert.com/\n */\n baseUrl: string;\n\n /**\n * Path to use for requests via the proxy, defaults to /ilert/api\n */\n proxyPath: string;\n }) {\n this.discoveryApi = opts.discoveryApi;\n this.baseUrl = opts.baseUrl;\n this.proxyPath = opts.proxyPath;\n }\n\n private async fetch<T = any>(input: string, init?: RequestInit): Promise<T> {\n const apiUrl = await this.apiUrl();\n\n const response = await fetch(`${apiUrl}${input}`, init);\n if (response.status === 401) {\n throw new AuthenticationError(\n 'This request requires HTTP authentication.',\n );\n }\n if (!response.ok || response.status >= 400) {\n throw await ResponseError.fromResponse(response);\n }\n\n return await response.json();\n }\n\n async fetchAlerts(opts?: GetAlertsOpts): Promise<Alert[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n if (opts?.alertSources !== undefined && Array.isArray(opts.alertSources)) {\n opts.alertSources.forEach((a: number) => {\n if (a) {\n query.append('alert-source', String(a));\n }\n });\n }\n\n if (opts?.states !== undefined && Array.isArray(opts.states)) {\n opts.states.forEach(state => {\n query.append('state', state);\n });\n }\n const response = await this.fetch(`/api/alerts?${query.toString()}`, init);\n return response;\n }\n\n async fetchAlertsCount(opts?: GetAlertsCountOpts): Promise<number> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts && opts.states && Array.isArray(opts.states)) {\n opts.states.forEach(state => {\n query.append('state', state);\n });\n }\n const response = await this.fetch(\n `/api/alerts/count?${query.toString()}`,\n init,\n );\n\n return response && response.count ? response.count : 0;\n }\n\n async fetchAlert(id: number): Promise<Alert> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(id)}`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertResponders(alert: Alert): Promise<AlertResponder[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/responders`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertActions(alert: Alert): Promise<AlertAction[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/actions`,\n init,\n );\n\n return response;\n }\n\n async acceptAlert(alert: Alert, userName: string): Promise<Alert> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: alert.alertSource?.integrationKey || '',\n alertKey: alert.alertKey,\n summary: `from ${userName} via Backstage plugin`,\n eventType: 'ACCEPT',\n }),\n };\n\n await this.fetch('/api/events', init);\n return this.fetchAlert(alert.id);\n }\n\n async resolveAlert(alert: Alert, userName: string): Promise<Alert> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: alert.alertSource?.integrationKey || '',\n alertKey: alert.alertKey,\n summary: `from ${userName} via Backstage plugin`,\n eventType: 'RESOLVE',\n }),\n };\n\n await this.fetch('/api/events', init);\n return this.fetchAlert(alert.id);\n }\n\n async assignAlert(alert: Alert, responder: AlertResponder): Promise<Alert> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n };\n\n const query = new URLSearchParams();\n switch (responder.group) {\n case 'ESCALATION_POLICY':\n query.append('policy-id', String(responder.id));\n break;\n case 'ON_CALL_SCHEDULE':\n query.append('schedule-id', String(responder.id));\n break;\n default:\n query.append('user-id', String(responder.id));\n break;\n }\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/assign?${query.toString()}`,\n init,\n );\n\n return response;\n }\n\n async triggerAlertAction(alert: Alert, action: AlertAction): Promise<void> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n webhookId: action.webhookId,\n extensionId: action.extensionId,\n type: action.type,\n name: action.name,\n }),\n };\n\n await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/actions`,\n init,\n );\n }\n\n async createAlert(eventRequest: EventRequest): Promise<boolean> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: eventRequest.integrationKey,\n summary: eventRequest.summary,\n details: eventRequest.details,\n eventType: 'ALERT',\n links: [\n {\n href: eventRequest.source,\n text: 'Backstage Url',\n },\n ],\n customDetails: {\n userName: eventRequest.userName,\n },\n }),\n };\n\n const response = await this.fetch('/api/events', init);\n return response;\n }\n\n async fetchAlertSources(): Promise<AlertSource[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch('/api/alert-sources', init);\n\n return response;\n }\n\n async fetchAlertSource(\n idOrIntegrationKey: number | string,\n ): Promise<AlertSource> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(idOrIntegrationKey)}`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertSourceOnCalls(alertSource: AlertSource): Promise<OnCall[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/on-calls?policies=${encodeURIComponent(\n alertSource.escalationPolicy.id,\n )}&expand=user&expand=escalationPolicy&timezone=${dt.local().zoneName}`,\n init,\n );\n\n return response;\n }\n\n async enableAlertSource(alertSource: AlertSource): Promise<AlertSource> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ ...alertSource, active: true }),\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(alertSource.id)}`,\n init,\n );\n\n return response;\n }\n\n async disableAlertSource(alertSource: AlertSource): Promise<AlertSource> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ ...alertSource, active: false }),\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(alertSource.id)}`,\n init,\n );\n\n return response;\n }\n\n async addImmediateMaintenance(\n alertSourceId: number,\n minutes: number,\n ): Promise<void> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n start: dt.utc().toISO(),\n end: dt.utc().plus({ minutes }).toISO(),\n description: `Immediate maintenance window for ${minutes} minutes. Backstage — iLert plugin.`,\n createdBy: 'Backstage',\n timezone: dt.local().zoneName,\n alertSources: [{ id: alertSourceId }],\n }),\n };\n\n const response = await this.fetch('/api/maintenance-windows', init);\n\n return response;\n }\n\n async fetchOnCallSchedules(): Promise<Schedule[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n '/api/schedules?include=currentShift&include=nextShift',\n init,\n );\n\n return response;\n }\n\n async fetchUsers(): Promise<User[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch('/api/users', init);\n\n return response;\n }\n\n async overrideShift(\n scheduleId: number,\n userId: number,\n start: string,\n end: string,\n ): Promise<Schedule> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ user: { id: userId }, start, end }),\n };\n\n const response = await this.fetch(\n `/api/schedules/${encodeURIComponent(scheduleId)}/overrides`,\n init,\n );\n\n return response;\n }\n\n async fetchServices(opts?: GetServicesOpts): Promise<Service[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n\n query.append('include', 'uptime');\n\n const response = await this.fetch(\n `/api/services?${query.toString()}`,\n init,\n );\n return response;\n }\n\n async fetchStatusPages(opts?: GetStatusPagesOpts): Promise<StatusPage[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n\n query.append('include', 'subscribed');\n\n const response = await this.fetch(\n `/api/status-pages?${query.toString()}`,\n init,\n );\n return response;\n }\n\n getAlertDetailsURL(alert: Alert): string {\n return `${this.baseUrl}/alert/view.jsf?id=${encodeURIComponent(alert.id)}`;\n }\n\n getAlertSourceDetailsURL(alertSource: AlertSource | null): string {\n if (!alertSource) {\n return '';\n }\n return `${this.baseUrl}/source/view.jsf?id=${encodeURIComponent(\n alertSource.id,\n )}`;\n }\n\n getEscalationPolicyDetailsURL(escalationPolicy: EscalationPolicy): string {\n return `${this.baseUrl}/policy/view.jsf?id=${encodeURIComponent(\n escalationPolicy.id,\n )}`;\n }\n\n getScheduleDetailsURL(schedule: Schedule): string {\n return `${this.baseUrl}/schedule/view.jsf?id=${encodeURIComponent(\n schedule.id,\n )}`;\n }\n\n getServiceDetailsURL(service: Service): string {\n return `${this.baseUrl}/service/view.jsf?id=${encodeURIComponent(\n service.id,\n )}`;\n }\n\n getStatusPageDetailsURL(statusPage: StatusPage): string {\n return `${this.baseUrl}/status-page/view.jsf?id=${encodeURIComponent(\n statusPage.id,\n )}`;\n }\n\n getStatusPageURL(statusPage: StatusPage): string {\n return statusPage.domain ? statusPage.domain : statusPage.subdomain;\n }\n\n getUserPhoneNumber(user: User | null) {\n return user?.mobile?.number || user?.landline?.number || '';\n }\n\n getUserInitials(user: User | null) {\n if (!user) {\n return '';\n }\n if (!user.firstName && !user.lastName) {\n return user.username;\n }\n return `${user.firstName} ${user.lastName}`;\n }\n\n private async apiUrl() {\n const proxyUrl = await this.discoveryApi.getBaseUrl('proxy');\n return proxyUrl + this.proxyPath;\n }\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createRouteRef } from '@backstage/core-plugin-api';\n\n/** @public */\nexport const iLertRouteRef = createRouteRef({\n id: 'ilert',\n});\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ILertClient, ilertApiRef } from './api';\nimport { iLertRouteRef } from './route-refs';\nimport {\n configApiRef,\n createApiFactory,\n createPlugin,\n discoveryApiRef,\n identityApiRef,\n createRoutableExtension,\n createComponentExtension,\n} from '@backstage/core-plugin-api';\n\n/** @public */\nexport const ilertPlugin = createPlugin({\n id: 'ilert',\n apis: [\n createApiFactory({\n api: ilertApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n identityApi: identityApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, configApi }) =>\n ILertClient.fromConfig(configApi, discoveryApi),\n }),\n ],\n routes: {\n root: iLertRouteRef,\n },\n});\n\n/** @public */\nexport const ILertPage = ilertPlugin.provide(\n createRoutableExtension({\n name: 'ILertPage',\n component: () => import('./components').then(m => m.ILertPage),\n mountPoint: iLertRouteRef,\n }),\n);\n\n/** @public */\nexport const EntityILertCard = ilertPlugin.provide(\n createComponentExtension({\n name: 'EntityILertCard',\n component: {\n lazy: () => import('./components/ILertCard').then(m => m.ILertCard),\n },\n }),\n);\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @public */\nexport interface Alert {\n id: number;\n summary: string;\n details: string;\n reportTime: string;\n resolvedOn: string;\n status: AlertStatus;\n priority: AlertPriority;\n alertKey: string;\n alertSource: AlertSource | null;\n assignedTo: User | null;\n responders: Responder[];\n logEntries: LogEntry[];\n links: Link[];\n images: Image[];\n subscribers: Subscriber[];\n commentText: string;\n commentPublishToSubscribers: boolean;\n}\n\n/** @public */\nexport const PENDING = 'PENDING';\n/** @public */\nexport const ACCEPTED = 'ACCEPTED';\n/** @public */\nexport const RESOLVED = 'RESOLVED';\n\n/** @public */\nexport type AlertStatus = typeof PENDING | typeof ACCEPTED | typeof RESOLVED;\n\n/** @public */\nexport type AlertPriority = 'HIGH' | 'LOW';\n\n/** @public */\nexport interface Link {\n href: string;\n text: string;\n}\n\n/** @public */\nexport interface Image {\n src: string;\n href: string;\n alt: string;\n}\n\n/** @public */\nexport type SubscriberType = 'TEAM' | 'USER';\n\n/** @public */\nexport interface Subscriber {\n id: number;\n name: string;\n type: SubscriberType;\n}\n\n/** @public */\nexport interface LogEntry {\n id: number;\n timestamp: string;\n logEntryType: string;\n text: string;\n alertId?: number;\n iconName?: string;\n iconClass?: string;\n filterTypes?: string[];\n}\n\n/** @public */\nexport interface User {\n id: number;\n username: string;\n firstName: string;\n lastName: string;\n email: string;\n mobile: Phone;\n landline: Phone;\n timezone?: string;\n language?: Language;\n role?: UserRole;\n notificationPreferences?: any[];\n position: string;\n department: string;\n}\n\n/** @public */\nexport interface Responder {\n acceptedAt?: string;\n status: string;\n user: User;\n}\n\n/** @public */\nexport type UserRole =\n | 'USER'\n | 'ADMIN'\n | 'STAKEHOLDER'\n | 'ACCOUNT_OWNER'\n | 'RESPONDER';\n/** @public */\nexport type Language = 'de' | 'en';\n/** @public */\nexport interface Phone {\n regionCode: string;\n number: string;\n}\n\n/** @public */\nexport interface AlertSource {\n id: number;\n name: string;\n status: AlertSourceStatus;\n escalationPolicy: EscalationPolicy;\n integrationType: AlertSourceIntegrationType;\n integrationKey?: string;\n iconUrl?: string;\n lightIconUrl?: string;\n darkIconUrl?: string;\n alertCreation?: AlertSourceAlertCreation;\n alertPriorityRule?: AlertSourceAlertPriorityRule;\n emailFiltered?: boolean;\n emailResolveFiltered?: boolean;\n active?: boolean;\n emailPredicates?: AlertSourceEmailPredicate[];\n emailResolvePredicates?: AlertSourceEmailPredicate[];\n filterOperator?: AlertSourceFilterOperator;\n resolveFilterOperator?: AlertSourceFilterOperator;\n supportHours?: AlertSourceSupportHours;\n heartbeat?: AlertSourceHeartbeat;\n autotaskMetadata?: AlertSourceAutotaskMetadata;\n autoResolutionTimeout?: string;\n teams: TeamShort[];\n}\n\n/** @public */\nexport interface TeamShort {\n id: number;\n name: string;\n}\n\n/** @public */\nexport interface TeamMember {\n user: User;\n role: 'STAKEHOLDER' | 'RESPONDER' | 'USER' | 'ADMIN';\n}\n\n/** @public */\nexport type AlertSourceStatus =\n | 'PENDING'\n | 'ALL_ACCEPTED'\n | 'ALL_RESOLVED'\n | 'IN_MAINTENANCE'\n | 'DISABLED';\n/** @public */\nexport type AlertSourceIntegrationType =\n | 'NAGIOS'\n | 'ICINGA'\n | 'EMAIL'\n | 'SMS'\n | 'API'\n | 'CRN'\n | 'HEARTBEAT'\n | 'PRTG'\n | 'PINGDOM'\n | 'CLOUDWATCH'\n | 'AWSPHD'\n | 'STACKDRIVER'\n | 'INSTANA'\n | 'ZABBIX'\n | 'SOLARWINDS'\n | 'PROMETHEUS'\n | 'NEWRELIC'\n | 'GRAFANA'\n | 'GITHUB'\n | 'DATADOG'\n | 'UPTIMEROBOT'\n | 'APPDYNAMICS'\n | 'DYNATRACE'\n | 'TOPDESK'\n | 'STATUSCAKE'\n | 'MONITOR'\n | 'TOOL'\n | 'CHECKMK'\n | 'AUTOTASK'\n | 'AWSBUDGET'\n | 'KENTIXAM'\n | 'CONSUL'\n | 'ZAMMAD'\n | 'SIGNALFX'\n | 'SPLUNK'\n | 'KUBERNETES'\n | 'SEMATEXT'\n | 'SENTRY'\n | 'SUMOLOGIC'\n | 'RAYGUN'\n | 'MXTOOLBOX'\n | 'ESWATCHER'\n | 'AMAZONSNS'\n | 'KAPACITOR'\n | 'CORTEXXSOAR'\n | string;\n/** @public */\nexport type AlertSourceAlertCreation =\n | 'ONE_ALERT_PER_EMAIL'\n | 'ONE_ALERT_PER_EMAIL_SUBJECT'\n | 'ONE_PENDING_ALERT_ALLOWED'\n | 'ONE_OPEN_ALERT_ALLOWED'\n | 'OPEN_RESOLVE_ON_EXTRACTION';\n/** @public */\nexport type AlertSourceFilterOperator = 'AND' | 'OR';\n/** @public */\nexport type AlertSourceAlertPriorityRule =\n | 'HIGH'\n | 'LOW'\n | 'HIGH_DURING_SUPPORT_HOURS'\n | 'LOW_DURING_SUPPORT_HOURS';\n\n/** @public */\nexport const OPERATIONAL = 'OPERATIONAL';\n/** @public */\nexport const UNDER_MAINTENANCE = 'UNDER_MAINTENANCE';\n/** @public */\nexport const DEGRADED = 'DEGRADED';\n/** @public */\nexport const PARTIAL_OUTAGE = 'PARTIAL_OUTAGE';\n/** @public */\nexport const MAJOR_OUTAGE = 'MAJOR_OUTAGE';\n\n/** @public */\nexport type ServiceStatus =\n | typeof OPERATIONAL\n | typeof UNDER_MAINTENANCE\n | typeof DEGRADED\n | typeof PARTIAL_OUTAGE\n | typeof MAJOR_OUTAGE;\n\n/** @public */\nexport const PRIVATE = 'PRIVATE';\n/** @public */\nexport const PUBLIC = 'PUBLIC';\n\n/** @public */\nexport type StatusPageVisibility = typeof PRIVATE | typeof PUBLIC;\n\n/** @public */\nexport interface AlertSourceEmailPredicate {\n field: 'EMAIL_FROM' | 'EMAIL_SUBJECT' | 'EMAIL_BODY';\n criteria:\n | 'CONTAINS_ANY_WORDS'\n | 'CONTAINS_NOT_WORDS'\n | 'CONTAINS_STRING'\n | 'CONTAINS_NOT_STRING'\n | 'IS_STRING'\n | 'IS_NOT_STRING'\n | 'MATCHES_REGEX'\n | 'MATCHES_NOT_REGEX';\n value: string;\n}\n/** @public */\nexport type AlertSourceTimeZone =\n | 'Europe/Berlin'\n | 'America/New_York'\n | 'America/Los_Angeles'\n | 'Asia/Istanbul';\n/** @public */\nexport interface AlertSourceSupportDay {\n start: string;\n end: string;\n}\n/** @public */\nexport interface AlertSourceSupportHours {\n timezone: AlertSourceTimeZone;\n autoRaiseAlerts: boolean;\n supportDays: {\n MONDAY: AlertSourceSupportDay;\n TUESDAY: AlertSourceSupportDay;\n WEDNESDAY: AlertSourceSupportDay;\n THURSDAY: AlertSourceSupportDay;\n FRIDAY: AlertSourceSupportDay;\n SATURDAY: AlertSourceSupportDay;\n SUNDAY: AlertSourceSupportDay;\n };\n}\n/** @public */\nexport interface AlertSourceHeartbeat {\n summary: string;\n intervalSec: number;\n status: 'OVERDUE' | 'ON_TIME' | 'NEVER_RECEIVED';\n}\n\n/** @public */\nexport interface AlertSourceAutotaskMetadata {\n userName: string;\n secret: string;\n apiIntegrationCode: string;\n webServer: string;\n}\n\n/** @public */\nexport interface EscalationPolicy {\n id: number;\n name: string;\n escalationRules: EscalationRule[];\n newEscalationRule: EscalationRule;\n repeating?: boolean;\n frequency?: number;\n teams: TeamShort[];\n}\n\n/** @public */\nexport interface EscalationRule {\n user: User | null;\n schedule: Schedule | null;\n escalationTimeout: number;\n}\n\n/** @public */\nexport interface Schedule {\n id: number;\n name: string;\n timezone: string;\n startsOn: string;\n currentShift: Shift;\n nextShift: Shift;\n shifts: Shift[];\n overrides: Shift[];\n teams: TeamShort[];\n}\n\n/** @public */\nexport interface Shift {\n user: User;\n start: string;\n end: string;\n}\n\n/** @public */\nexport interface AlertResponder {\n group: 'SUGGESTED' | 'USER' | 'ESCALATION_POLICY' | 'ON_CALL_SCHEDULE';\n id: number;\n name: string;\n disabled: boolean;\n}\n\n/** @public */\nexport interface AlertAction {\n name: string;\n type: string;\n webhookId: string;\n extensionId?: string;\n history?: AlertActionHistory[];\n}\n\n/** @public */\nexport interface AlertActionHistory {\n id: string;\n webhookId: string;\n alertId: number;\n actor: User;\n success: boolean;\n}\n\n/** @public */\nexport interface OnCall {\n user: User;\n escalationPolicy: EscalationPolicy;\n schedule?: Schedule;\n start: string;\n end: string;\n escalationLevel: number;\n}\n\n/** @public */\nexport interface Service {\n id: number;\n name: string;\n status: ServiceStatus;\n uptime: Uptime;\n}\n\n/** @public */\nexport interface Uptime {\n uptimePercentage: UptimePercentage;\n}\n\n/** @public */\nexport interface UptimePercentage {\n p90: number;\n}\n\n/** @public */\nexport interface StatusPage {\n id: number;\n name: string;\n domain: string;\n subdomain: string;\n visibility: StatusPageVisibility;\n status: ServiceStatus;\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { GetAlertsOpts, ilertApiRef, TableState } from '../api';\nimport { ACCEPTED, Alert, AlertSource, AlertStatus, PENDING } from '../types';\n\nexport const useAlerts = (\n paging: boolean,\n singleSource?: boolean,\n alertSource?: AlertSource | null,\n) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [tableState, setTableState] = React.useState<TableState>({\n page: 0,\n pageSize: 10,\n });\n const [states, setStates] = React.useState<AlertStatus[]>([\n ACCEPTED,\n PENDING,\n ]);\n const [alertsList, setAlertsList] = React.useState<Alert[]>([]);\n const [alertsCount, setAlertsCount] = React.useState(0);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const fetchAlertsCall = async () => {\n try {\n if (singleSource && !alertSource) {\n return;\n }\n setIsLoading(true);\n const opts: GetAlertsOpts = {\n states,\n alertSources: alertSource ? [alertSource.id] : [],\n };\n if (paging) {\n opts.maxResults = tableState.pageSize;\n opts.startIndex = tableState.page * tableState.pageSize;\n }\n const data = await ilertApi.fetchAlerts(opts);\n setAlertsList(data || []);\n setIsLoading(false);\n } catch (e) {\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n setIsLoading(false);\n throw e;\n }\n };\n\n const fetchAlertsCountCall = async () => {\n try {\n const count = await ilertApi.fetchAlertsCount({ states });\n setAlertsCount(count || 0);\n } catch (e) {\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n };\n const fetchAlerts = useAsyncRetry(fetchAlertsCall, [\n tableState,\n states,\n singleSource,\n alertSource,\n ]);\n\n const refetchAlerts = () => {\n setTableState({ ...tableState, page: 0 });\n Promise.all([fetchAlertsCall(), fetchAlertsCountCall()]);\n };\n\n const fetchAlertsCount = useAsyncRetry(fetchAlertsCountCall, [states]);\n\n const error = fetchAlerts.error || fetchAlertsCount.error;\n const retry = () => {\n fetchAlerts.retry();\n fetchAlertsCount.retry();\n };\n\n const onAlertChanged = (newAlert: Alert) => {\n let shouldRefetchAlerts = false;\n setAlertsList(\n alertsList.reduce((acc: Alert[], alert: Alert) => {\n if (newAlert.id === alert.id) {\n if (states.includes(newAlert.status)) {\n acc.push(newAlert);\n } else {\n shouldRefetchAlerts = true;\n }\n return acc;\n }\n acc.push(alert);\n return acc;\n }, []),\n );\n if (shouldRefetchAlerts) {\n refetchAlerts();\n }\n };\n\n const onChangePage = (page: number) => {\n setTableState({ ...tableState, page });\n };\n const onChangeRowsPerPage = (p: number) => {\n setTableState({ ...tableState, pageSize: p });\n };\n const onAlertStatesChange = (s: AlertStatus[]) => {\n setStates(s);\n };\n\n return [\n {\n tableState,\n states,\n alerts: alertsList,\n alertsCount,\n error,\n isLoading,\n },\n {\n setTableState,\n setStates,\n setAlertsList,\n setIsLoading,\n retry,\n onAlertChanged,\n refetchAlerts,\n onChangePage,\n onChangeRowsPerPage,\n onAlertStatesChange,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { ilertApiRef } from '../api';\nimport { AlertSource } from '../types';\n\nexport const useNewAlert = (\n open: boolean,\n initialAlertSource?: AlertSource | null,\n) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [alertSourcesList, setAlertSourcesList] = React.useState<AlertSource[]>(\n [],\n );\n const [alertSource, setAlertSource] = React.useState<AlertSource | null>(\n null,\n );\n const [summary, setSummary] = React.useState('');\n const [details, setDetails] = React.useState('');\n const [isLoading, setIsLoading] = React.useState(false);\n\n const fetchAlertSources = useAsyncRetry(async () => {\n try {\n if (!open || initialAlertSource) {\n return;\n }\n const count = await ilertApi.fetchAlertSources();\n setAlertSourcesList(count || 0);\n } catch (e) {\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n }, [open]);\n\n const error = fetchAlertSources.error;\n const retry = () => {\n fetchAlertSources.retry();\n };\n\n return [\n {\n alertSources: alertSourcesList,\n alertSource: initialAlertSource ? initialAlertSource : alertSource,\n summary,\n details,\n error,\n isLoading,\n },\n {\n setAlertSourcesList,\n setAlertSource,\n setSummary,\n setDetails,\n setIsLoading,\n retry,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\nimport {\n alertApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport Alert from '@material-ui/lab/Alert';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { useNewAlert } from '../../hooks/useNewAlert';\nimport { AlertSource } from '../../types';\n\nconst useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n minWidth: 120,\n width: '100%',\n },\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n optionWrapper: {\n display: 'flex',\n width: '100%',\n },\n sourceImage: {\n height: 22,\n paddingRight: 4,\n },\n}));\n\nexport const AlertNewModal = ({\n isModalOpened,\n setIsModalOpened,\n refetchAlerts,\n initialAlertSource,\n entityName,\n}: {\n isModalOpened: boolean;\n setIsModalOpened: (open: boolean) => void;\n refetchAlerts: () => void;\n initialAlertSource?: AlertSource | null;\n entityName?: string;\n}) => {\n const [\n { alertSources, alertSource, summary, details, isLoading },\n { setAlertSource, setSummary, setDetails, setIsLoading },\n ] = useNewAlert(isModalOpened, initialAlertSource);\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(alertApiRef);\n const identityApi = useApi(identityApiRef);\n const source = window.location.toString();\n const classes = useStyles();\n const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\n\n const handleClose = () => {\n setIsModalOpened(false);\n };\n\n let integrationKey = '';\n if (initialAlertSource && initialAlertSource.integrationKey) {\n integrationKey = initialAlertSource.integrationKey;\n } else if (alertSource && alertSource.integrationKey) {\n integrationKey = alertSource.integrationKey;\n }\n const handleCreate = () => {\n if (!integrationKey) {\n return;\n }\n setIsLoading(true);\n setTimeout(async () => {\n try {\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n await ilertApi.createAlert({\n integrationKey,\n summary,\n details,\n userName,\n source,\n });\n alertApi.post({ message: 'Alert created.' });\n refetchAlerts();\n } catch (err) {\n alertApi.post({ message: err, severity: 'error' });\n }\n setIsModalOpened(false);\n }, 250);\n };\n\n const canCreate = !!integrationKey && !!summary;\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"create-alert-form-title\"\n >\n <DialogTitle id=\"create-alert-form-title\">\n {entityName ? (\n <div>\n This action will trigger an alert for{' '}\n <strong>\"{entityName}\"</strong>.\n </div>\n ) : (\n 'New alert'\n )}\n </DialogTitle>\n <DialogContent>\n <Alert severity=\"info\">\n <Typography variant=\"body1\" gutterBottom align=\"justify\">\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\n will automatically be amended to the alarm so that the receiver can\n reach out to you if necessary.\n </Typography>\n </Alert>\n {!initialAlertSource ? (\n <Autocomplete\n disabled={isLoading}\n options={alertSources}\n value={alertSource}\n classes={{\n root: classes.formControl,\n option: classes.option,\n }}\n onChange={(_event: any, newValue: any) => {\n setAlertSource(newValue);\n }}\n autoHighlight\n getOptionLabel={a => a.name}\n renderOption={a => (\n <div className={classes.optionWrapper}>\n <img\n src={prefersDarkMode ? a.lightIconUrl : a.iconUrl}\n alt={a.name}\n className={classes.sourceImage}\n />\n <Typography noWrap>{a.name}</Typography>\n </div>\n )}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Alert Source\"\n variant=\"outlined\"\n margin=\"normal\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n ) : null}\n <TextField\n disabled={isLoading}\n label=\"Summary\"\n fullWidth\n margin=\"normal\"\n variant=\"outlined\"\n classes={{\n root: classes.formControl,\n }}\n value={summary}\n onChange={event => {\n setSummary(event.target.value);\n }}\n />\n <TextField\n disabled={isLoading}\n label=\"Details\"\n fullWidth\n multiline\n rows={4}\n margin=\"normal\"\n variant=\"outlined\"\n classes={{\n root: classes.formControl,\n }}\n value={details}\n onChange={event => {\n setDetails(event.target.value);\n }}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!canCreate}\n onClick={handleCreate}\n color=\"secondary\"\n variant=\"contained\"\n >\n Create\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport Button from '@material-ui/core/Button';\nimport { EmptyState } from '@backstage/core-components';\n\nexport const MissingAuthorizationHeaderError = () => (\n <EmptyState\n missing=\"info\"\n title=\"Missing or invalid iLert authorization header\"\n description=\"The request to fetch data needs a valid authorization header. See README for more details.\"\n action={\n <Button\n color=\"primary\"\n variant=\"contained\"\n href=\"https://github.com/backstage/backstage/blob/master/plugins/ilert/README.md\"\n >\n Read More\n </Button>\n }\n />\n);\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { ilertApiRef } from '../api';\nimport { Alert, AlertAction } from '../types';\n\nexport const useAlertActions = (alert: Alert | null, open: boolean) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [alertActionsList, setAlertActionsList] = React.useState<AlertAction[]>(\n [],\n );\n const [isLoading, setIsLoading] = React.useState(false);\n\n const { error, retry } = useAsyncRetry(async () => {\n try {\n if (!alert || !open) {\n return;\n }\n const data = await ilertApi.fetchAlertActions(alert);\n setAlertActionsList(data);\n } catch (e) {\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n }, [alert, open]);\n\n return [\n {\n alertActions: alertActionsList,\n error,\n isLoading,\n },\n {\n setAlertActionsList,\n setIsLoading,\n retry,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { ilertApiRef } from '../api';\nimport { Alert, AlertResponder } from '../types';\n\nexport const useAssignAlert = (alert: Alert | null, open: boolean) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [alertRespondersList, setAlertRespondersList] = React.useState<\n AlertResponder[]\n >([]);\n const [alertResponder, setAlertResponder] =\n React.useState<AlertResponder | null>(null);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const { error, retry } = useAsyncRetry(async () => {\n try {\n if (!alert || !open) {\n return;\n }\n const data = await ilertApi.fetchAlertResponders(alert);\n if (data && Array.isArray(data)) {\n const groups = [\n 'SUGGESTED',\n 'USER',\n 'ESCALATION_POLICY',\n 'ON_CALL_SCHEDULE',\n ];\n data.sort((a, b) => groups.indexOf(a.group) - groups.indexOf(b.group));\n setAlertRespondersList(data);\n }\n } catch (e) {\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n }, [alert, open]);\n\n return [\n {\n alertRespondersList,\n alertResponder,\n error,\n isLoading,\n },\n {\n setAlertRespondersList,\n setAlertResponder,\n setIsLoading,\n retry,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport MUIAlert from '@material-ui/lab/Alert';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { useAssignAlert } from '../../hooks/useAssignAlert';\nimport { Alert } from '../../types';\n\nconst useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n minWidth: 120,\n width: '100%',\n },\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n optionWrapper: {\n display: 'flex',\n width: '100%',\n },\n sourceImage: {\n height: 22,\n paddingRight: 4,\n },\n}));\n\nexport const AlertAssignModal = ({\n alert,\n isModalOpened,\n setIsModalOpened,\n onAlertChanged,\n}: {\n alert: Alert | null;\n isModalOpened: boolean;\n setIsModalOpened: (open: boolean) => void;\n onAlertChanged?: (alert: Alert) => void;\n}) => {\n const [\n { alertRespondersList, alertResponder, isLoading },\n { setIsLoading, setAlertResponder, setAlertRespondersList },\n ] = useAssignAlert(alert, isModalOpened);\n const callback = onAlertChanged || ((_: Alert): void => {});\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(alertApiRef);\n const classes = useStyles();\n\n const handleClose = () => {\n setAlertRespondersList([]);\n setIsModalOpened(false);\n };\n\n const handleAssign = () => {\n if (!alert || !alertResponder) {\n return;\n }\n setIsLoading(true);\n setAlertRespondersList([]);\n setTimeout(async () => {\n try {\n const newAlert = await ilertApi.assignAlert(alert, alertResponder);\n callback(newAlert);\n alertApi.post({ message: 'Alert assigned.' });\n } catch (err) {\n alertApi.post({ message: err, severity: 'error' });\n }\n setIsLoading(false);\n setIsModalOpened(false);\n }, 250);\n };\n\n const canAssign = !!alertResponder;\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"assign-alert-form-title\"\n >\n <DialogTitle id=\"assign-alert-form-title\">\n Select responder to assign\n </DialogTitle>\n <DialogContent>\n <MUIAlert severity=\"info\">\n <Typography variant=\"body1\" gutterBottom align=\"justify\">\n This action will assign the alert to the selected responder.\n </Typography>\n </MUIAlert>\n <Autocomplete\n disabled={isLoading}\n options={alertRespondersList}\n value={alertResponder}\n classes={{\n root: classes.formControl,\n option: classes.option,\n }}\n onChange={(_event: any, newValue: any) => {\n setAlertResponder(newValue);\n }}\n autoHighlight\n groupBy={option => {\n switch (option.group) {\n case 'SUGGESTED':\n return 'Suggested responders';\n case 'USER':\n return 'Users';\n case 'ESCALATION_POLICY':\n return 'Escalation policies';\n case 'ON_CALL_SCHEDULE':\n return 'Schedules';\n default:\n return '';\n }\n }}\n getOptionLabel={a => a.name}\n renderOption={a => (\n <div className={classes.optionWrapper}>\n <Typography noWrap>{a.name}</Typography>\n </div>\n )}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Responder\"\n variant=\"outlined\"\n margin=\"normal\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!canAssign}\n onClick={handleAssign}\n color=\"primary\"\n variant=\"contained\"\n >\n Assign\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Typography from '@material-ui/core/Typography';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { useAlertActions } from '../../hooks/useAlertActions';\nimport { Alert, AlertAction } from '../../types';\nimport { AlertAssignModal } from './AlertAssignModal';\n\nimport { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\nimport { Link, Progress } from '@backstage/core-components';\nimport {\n alertApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\n\nexport const AlertActionsMenu = ({\n alert,\n onAlertChanged,\n setIsLoading,\n}: {\n alert: Alert;\n onAlertChanged?: (alert: Alert) => void;\n setIsLoading?: (isLoading: boolean) => void;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(alertApiRef);\n const identityApi = useApi(identityApiRef);\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const callback = onAlertChanged || ((_: Alert): void => {});\n const setProcessing = setIsLoading || ((_: boolean): void => {});\n const [isAssignAlertModalOpened, setIsAssignAlertModalOpened] =\n React.useState(false);\n\n const [{ alertActions, isLoading }] = useAlertActions(\n alert,\n Boolean(anchorEl),\n );\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleCloseMenu = () => {\n setAnchorEl(null);\n };\n\n const handleAccept = async (): Promise<void> => {\n try {\n handleCloseMenu();\n setProcessing(true);\n\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n const newAlert = await ilertApi.acceptAlert(alert, userName);\n alertApi.post({ message: 'Alert accepted.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ message: err, severity: 'error' });\n }\n };\n\n const handleResolve = async (): Promise<void> => {\n try {\n handleCloseMenu();\n setProcessing(true);\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n const newAlert = await ilertApi.resolveAlert(alert, userName);\n alertApi.post({ message: 'Alert resolved.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ message: err, severity: 'error' });\n }\n };\n\n const handleAssign = () => {\n handleCloseMenu();\n setIsAssignAlertModalOpened(true);\n };\n\n const handleTriggerAction = (action: AlertAction) => async () => {\n try {\n handleCloseMenu();\n setProcessing(true);\n await ilertApi.triggerAlertAction(alert, action);\n alertApi.post({ message: 'Alert action triggered.' });\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ message: err, severity: 'error' });\n }\n };\n\n const actions: React.ReactNode[] = alertActions.map(a => {\n const successTrigger = a.history\n ? a.history.find(h => h.success)\n : undefined;\n const triggeredBy =\n successTrigger && successTrigger.actor\n ? `${successTrigger.actor.firstName} ${successTrigger.actor.lastName}`\n : '';\n return (\n <MenuItem\n key={a.webhookId}\n onClick={handleTriggerAction(a)}\n disabled={!!successTrigger}\n >\n <Typography variant=\"inherit\" noWrap>\n {triggeredBy ? `${a.name} (by ${triggeredBy})` : a.name}\n </Typography>\n </MenuItem>\n );\n });\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n size=\"small\"\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id={`alert-actions-menu-${alert.id}`}\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleCloseMenu}\n PaperProps={{\n style: { maxHeight: 48 * 5.5 },\n }}\n >\n {alert.status === 'PENDING' ? (\n <MenuItem key=\"ack\" onClick={handleAccept}>\n <Typography variant=\"inherit\" noWrap>\n Accept\n </Typography>\n </MenuItem>\n ) : null}\n\n {alert.status !== 'RESOLVED' ? (\n <MenuItem key=\"close\" onClick={handleResolve}>\n <Typography variant=\"inherit\" noWrap>\n Resolve\n </Typography>\n </MenuItem>\n ) : null}\n\n {alert.status !== 'RESOLVED' ? (\n <MenuItem key=\"assign\" onClick={handleAssign}>\n <Typography variant=\"inherit\" noWrap>\n Assign\n </Typography>\n </MenuItem>\n ) : null}\n\n {isLoading ? (\n <MenuItem key=\"loading\">\n <Progress style={{ width: '100%' }} />\n </MenuItem>\n ) : (\n actions\n )}\n\n <MenuItem key=\"details\" onClick={handleCloseMenu}>\n <Typography variant=\"inherit\" noWrap>\n <Link to={ilertApi.getAlertDetailsURL(alert)}>View in iLert</Link>\n </Typography>\n </MenuItem>\n </Menu>\n <AlertAssignModal\n alert={alert}\n setIsModalOpened={setIsAssignAlertModalOpened}\n isModalOpened={isAssignAlertModalOpened}\n onAlertChanged={onAlertChanged}\n />\n </>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { Alert } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const AlertLink = ({ alert }: { alert: Alert | null }) => {\n const ilertApi = useApi(ilertApiRef);\n\n if (!alert) {\n return null;\n }\n\n return <Link to={ilertApi.getAlertDetailsURL(alert)}>#{alert.id}</Link>;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport { AlertSource } from '../../types';\nimport { ilertApiRef } from '../../api';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n root: {\n display: 'flex',\n maxWidth: '100%',\n },\n image: {\n height: 22,\n paddingRight: 4,\n },\n link: {\n lineHeight: '22px',\n },\n});\n\nexport const AlertSourceLink = ({\n alertSource,\n}: {\n alertSource: AlertSource | null;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const classes = useStyles();\n const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\n\n if (!alertSource) {\n return null;\n }\n\n return (\n <Grid container spacing={0}>\n <Grid item xs={2}>\n <img\n src={prefersDarkMode ? alertSource.lightIconUrl : alertSource.iconUrl}\n alt={alertSource.name}\n className={classes.image}\n />\n </Grid>\n <Grid item xs={10}>\n <Link\n className={classes.link}\n to={ilertApi.getAlertSourceDetailsURL(alertSource)}\n >\n {alertSource.name}\n </Link>\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Chip from '@material-ui/core/Chip';\nimport { withStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport { ACCEPTED, Alert, PENDING, RESOLVED } from '../../types';\n\nconst ResolvedChip = withStyles(theme => ({\n root: {\n backgroundColor: '#4caf50',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nconst AcceptedChip = withStyles(theme => ({\n root: {\n backgroundColor: '#ffb74d',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\nconst PendingChip = withStyles(theme => ({\n root: {\n backgroundColor: '#d32f2f',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nexport const alertStatusLabels = {\n [RESOLVED]: 'Resolved',\n [ACCEPTED]: 'Accepted',\n [PENDING]: 'Pending',\n} as Record<string, string>;\n\nexport const StatusChip = ({ alert }: { alert: Alert }) => {\n const label = `${alertStatusLabels[alert.status]}`;\n\n switch (alert.status) {\n case RESOLVED:\n return <ResolvedChip label={label} size=\"small\" />;\n case ACCEPTED:\n return <AcceptedChip label={label} size=\"small\" />;\n case PENDING:\n return <PendingChip label={label} size=\"small\" />;\n default:\n return <Chip label={label} size=\"small\" />;\n }\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormControl from '@material-ui/core/FormControl';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport React from 'react';\nimport { ACCEPTED, AlertStatus, PENDING, RESOLVED } from '../../types';\nimport { alertStatusLabels } from './StatusChip';\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n width: 250,\n },\n },\n};\n\nconst useStyles = makeStyles({\n root: {\n display: 'flex',\n },\n label: {\n marginTop: 8,\n marginRight: 4,\n },\n formControl: {\n minWidth: 120,\n maxWidth: 300,\n },\n grow: {\n flexGrow: 1,\n },\n});\n\nexport const TableTitle = ({\n alertStates,\n onAlertStatesChange,\n}: {\n alertStates: AlertStatus[];\n onAlertStatesChange: (states: AlertStatus[]) => void;\n}) => {\n const classes = useStyles();\n const handleAlertStatusSelectChange = (event: any) => {\n onAlertStatesChange(event.target.value);\n };\n\n return (\n <div className={classes.root}>\n <Typography noWrap className={classes.label}>\n Status:\n </Typography>\n <FormControl\n className={classes.formControl}\n variant=\"outlined\"\n size=\"small\"\n >\n <Select\n id=\"alerts-status-select\"\n multiple\n value={alertStates}\n onChange={handleAlertStatusSelectChange}\n renderValue={(selected: any) => selected.join(', ')}\n MenuProps={MenuProps}\n >\n {[PENDING, ACCEPTED, RESOLVED].map(state => (\n <MenuItem key={state} value={state}>\n <Checkbox\n checked={alertStates.indexOf(state as AlertStatus) > -1}\n />\n <ListItemText primary={alertStatusLabels[state]} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </div>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport humanizeDuration from 'humanize-duration';\nimport { DateTime as dt, Interval } from 'luxon';\nimport React from 'react';\nimport { ilertApiRef, TableState } from '../../api';\nimport { Alert, AlertStatus } from '../../types';\nimport { AlertActionsMenu } from '../Alert/AlertActionsMenu';\nimport { AlertLink } from '../Alert/AlertLink';\nimport { AlertSourceLink } from '../AlertSource/AlertSourceLink';\nimport { StatusChip } from './StatusChip';\nimport { TableTitle } from './TableTitle';\n\nimport { Table, TableColumn } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles(theme => ({\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n}));\n\nexport const AlertsTable = ({\n alerts,\n alertsCount,\n tableState,\n states,\n isLoading,\n onAlertChanged,\n setIsLoading,\n onAlertStatesChange,\n onChangePage,\n onChangeRowsPerPage,\n compact,\n}: {\n alerts: Alert[];\n alertsCount: number;\n tableState: TableState;\n states: AlertStatus[];\n isLoading: boolean;\n onAlertChanged: (alert: Alert) => void;\n setIsLoading: (isLoading: boolean) => void;\n onAlertStatesChange: (states: AlertStatus[]) => void;\n onChangePage: (page: number) => void;\n onChangeRowsPerPage: (pageSize: number) => void;\n compact?: boolean;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const classes = useStyles();\n\n const xsColumnStyle = {\n width: '5%',\n maxWidth: '5%',\n };\n const smColumnStyle = {\n width: '10%',\n maxWidth: '10%',\n };\n const mdColumnStyle = {\n width: '15%',\n maxWidth: '15%',\n };\n const lgColumnStyle = {\n width: '20%',\n maxWidth: '20%',\n };\n const xlColumnStyle = {\n width: '30%',\n maxWidth: '30%',\n };\n\n const idColumn: TableColumn<Alert> = {\n title: 'ID',\n field: 'id',\n highlight: true,\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <AlertLink alert={rowData} />,\n };\n const summaryColumn: TableColumn<Alert> = {\n title: 'Summary',\n field: 'summary',\n cellStyle: !compact ? xlColumnStyle : undefined,\n headerStyle: !compact ? xlColumnStyle : undefined,\n render: rowData => <Typography>{rowData.summary}</Typography>,\n };\n const sourceColumn: TableColumn<Alert> = {\n title: 'Source',\n field: 'source',\n cellStyle: mdColumnStyle,\n headerStyle: mdColumnStyle,\n render: rowData => <AlertSourceLink alertSource={rowData.alertSource} />,\n };\n const durationColumn: TableColumn<Alert> = {\n title: 'Duration',\n field: 'reportTime',\n type: 'datetime',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => (\n <Typography noWrap>\n {rowData.status !== 'RESOLVED'\n ? humanizeDuration(\n Interval.fromDateTimes(dt.fromISO(rowData.reportTime), dt.now())\n .toDuration()\n .valueOf(),\n { units: ['h', 'm', 's'], largest: 2, round: true },\n )\n : humanizeDuration(\n Interval.fromDateTimes(\n dt.fromISO(rowData.reportTime),\n dt.fromISO(rowData.resolvedOn),\n )\n .toDuration()\n .valueOf(),\n { units: ['h', 'm', 's'], largest: 2, round: true },\n )}\n </Typography>\n ),\n };\n const respondersColumn: TableColumn<Alert> = {\n title: 'Responders',\n field: 'responders',\n cellStyle: !compact ? mdColumnStyle : lgColumnStyle,\n headerStyle: !compact ? mdColumnStyle : lgColumnStyle,\n render: rowData => (\n <Typography>\n {rowData.responders.map((value, i, arr) => {\n return (\n ilertApi.getUserInitials(value.user) +\n (arr.length - 1 !== i ? ', ' : '')\n );\n })}\n </Typography>\n ),\n };\n const priorityColumn: TableColumn<Alert> = {\n title: 'Priority',\n field: 'priority',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => (\n <Typography noWrap>\n {rowData.priority === 'HIGH' ? 'High' : 'Low'}\n </Typography>\n ),\n };\n const statusColumn: TableColumn<Alert> = {\n title: 'Status',\n field: 'status',\n cellStyle: xsColumnStyle,\n headerStyle: xsColumnStyle,\n render: rowData => <StatusChip alert={rowData} />,\n };\n const actionsColumn: TableColumn<Alert> = {\n title: '',\n field: '',\n cellStyle: xsColumnStyle,\n headerStyle: xsColumnStyle,\n render: rowData => (\n <AlertActionsMenu\n alert={rowData}\n onAlertChanged={onAlertChanged}\n setIsLoading={setIsLoading}\n />\n ),\n };\n\n const columns: TableColumn<Alert>[] = compact\n ? [\n summaryColumn,\n durationColumn,\n respondersColumn,\n statusColumn,\n actionsColumn,\n ]\n : [\n idColumn,\n summaryColumn,\n sourceColumn,\n durationColumn,\n respondersColumn,\n priorityColumn,\n statusColumn,\n actionsColumn,\n ];\n\n return (\n <Table\n options={{\n sorting: false,\n search: !compact,\n paging: !compact,\n actionsColumnIndex: -1,\n pageSize: tableState.pageSize,\n pageSizeOptions: !compact ? [10, 20, 50, 100] : [3, 10, 20, 50, 100],\n padding: 'dense',\n loadingType: 'overlay',\n showEmptyDataSourceMessage: !isLoading,\n showTitle: true,\n toolbar: true,\n }}\n emptyContent={\n <Typography color=\"textSecondary\" className={classes.empty}>\n No alerts right now\n </Typography>\n }\n title={\n !compact ? (\n <TableTitle\n alertStates={states}\n onAlertStatesChange={onAlertStatesChange}\n />\n ) : (\n <Typography variant=\"button\" color=\"textSecondary\">\n ALERTS\n </Typography>\n )\n }\n page={tableState.page}\n totalCount={alertsCount}\n onPageChange={onChangePage}\n onRowsPerPageChange={onChangeRowsPerPage}\n columns={columns}\n data={alerts}\n isLoading={isLoading}\n />\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Content,\n ContentHeader,\n ResponseErrorPanel,\n SupportButton,\n} from '@backstage/core-components';\nimport Button from '@material-ui/core/Button';\nimport AddIcon from '@material-ui/icons/Add';\nimport React from 'react';\nimport { useAlerts } from '../../hooks/useAlerts';\nimport { AlertNewModal } from '../Alert/AlertNewModal';\nimport { MissingAuthorizationHeaderError } from '../Errors';\nimport { AlertsTable } from './AlertsTable';\n\nexport const AlertsPage = () => {\n const [\n { tableState, states, alerts, alertsCount, isLoading, error },\n {\n onAlertStatesChange,\n onChangePage,\n onChangeRowsPerPage,\n onAlertChanged,\n refetchAlerts,\n setIsLoading,\n },\n ] = useAlerts(true);\n\n const [isModalOpened, setIsModalOpened] = React.useState(false);\n\n const handleCreateNewAlertClick = () => {\n setIsModalOpened(true);\n };\n\n if (error) {\n if (error.name === 'AuthenticationError') {\n return (\n <Content>\n <MissingAuthorizationHeaderError />\n </Content>\n );\n }\n\n return (\n <Content>\n <ResponseErrorPanel error={error} />\n </Content>\n );\n }\n\n return (\n <Content>\n <ContentHeader title=\"Alerts\">\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n startIcon={<AddIcon />}\n onClick={handleCreateNewAlertClick}\n >\n Create Alert\n </Button>\n <AlertNewModal\n isModalOpened={isModalOpened}\n setIsModalOpened={setIsModalOpened}\n refetchAlerts={refetchAlerts}\n />\n <SupportButton>\n This helps you to bring iLert into your developer portal.\n </SupportButton>\n </ContentHeader>\n <AlertsTable\n alerts={alerts}\n alertsCount={alertsCount}\n tableState={tableState}\n states={states}\n onAlertChanged={onAlertChanged}\n onAlertStatesChange={onAlertStatesChange}\n onChangePage={onChangePage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n isLoading={isLoading}\n setIsLoading={setIsLoading}\n />\n </Content>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { ilertApiRef } from '../api';\nimport { AuthenticationError } from '@backstage/errors';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { User, Shift } from '../types';\nimport { useApi, errorApiRef } from '@backstage/core-plugin-api';\n\nexport const useShiftOverride = (s: Shift, isModalOpened: boolean) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [shift, setShift] = React.useState<Shift>(s);\n const [usersList, setUsersList] = React.useState<User[]>([]);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const { error, retry } = useAsyncRetry(async () => {\n try {\n if (!isModalOpened) {\n return;\n }\n setIsLoading(true);\n const data = await ilertApi.fetchUsers();\n setUsersList(data || []);\n setIsLoading(false);\n } catch (e) {\n setIsLoading(false);\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n }, [isModalOpened]);\n\n const setUser = (user: User) => {\n setShift({ ...shift, user });\n };\n\n const setStart = (start: string) => {\n setShift({ ...shift, start });\n };\n\n const setEnd = (end: string) => {\n setShift({ ...shift, end });\n };\n\n return [\n {\n shift,\n users: usersList,\n user: shift.user,\n start: shift.start,\n end: shift.end,\n error,\n isLoading,\n },\n {\n retry,\n setIsLoading,\n setUser,\n setStart,\n setEnd,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport Typography from '@material-ui/core/Typography';\nimport { ilertApiRef } from '../../api';\nimport { useShiftOverride } from '../../hooks/useShiftOverride';\nimport { Shift } from '../../types';\nimport { DateTimePicker } from '@material-ui/pickers/DateTimePicker';\nimport MuiPickersUtilsProvider from '@material-ui/pickers/MuiPickersUtilsProvider';\nimport LuxonUtils from '@date-io/luxon';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n minWidth: 120,\n width: '100%',\n },\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n optionWrapper: {\n display: 'flex',\n width: '100%',\n },\n sourceImage: {\n height: 22,\n paddingRight: 4,\n },\n grow: {\n flexGrow: 1,\n },\n}));\n\nexport const ShiftOverrideModal = ({\n scheduleId,\n shift,\n refetchOnCallSchedules,\n isModalOpened,\n setIsModalOpened,\n}: {\n scheduleId: number;\n shift: Shift;\n refetchOnCallSchedules: () => void;\n isModalOpened: boolean;\n setIsModalOpened: (isModalOpened: boolean) => void;\n}) => {\n const [\n { isLoading, users, user, start, end },\n { setUser, setStart, setEnd, setIsLoading },\n ] = useShiftOverride(shift, isModalOpened);\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(alertApiRef);\n const classes = useStyles();\n\n const handleClose = () => {\n setIsModalOpened(false);\n };\n\n const handleOverride = () => {\n if (!shift || !shift.user) {\n return;\n }\n setIsLoading(true);\n setTimeout(async () => {\n try {\n const success = await ilertApi.overrideShift(\n scheduleId,\n user.id,\n start,\n end,\n );\n if (success) {\n alertApi.post({ message: 'Shift overridden.' });\n refetchOnCallSchedules();\n }\n } catch (err) {\n alertApi.post({ message: err, severity: 'error' });\n }\n setIsModalOpened(false);\n }, 250);\n };\n\n if (!shift) {\n return null;\n }\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"override-shift-form-title\"\n >\n <DialogTitle id=\"override-shift-form-title\">Shift override</DialogTitle>\n <DialogContent>\n <MuiPickersUtilsProvider utils={LuxonUtils}>\n <Autocomplete\n disabled={isLoading}\n options={users}\n value={user}\n classes={{\n root: classes.formControl,\n option: classes.option,\n }}\n onChange={(_event: any, newValue: any) => {\n setUser(newValue);\n }}\n autoHighlight\n getOptionLabel={a => ilertApi.getUserInitials(a)}\n renderOption={a => (\n <div className={classes.optionWrapper}>\n <Typography noWrap>{ilertApi.getUserInitials(a)}</Typography>\n </div>\n )}\n renderInput={params => (\n <TextField\n {...params}\n label=\"User\"\n variant=\"outlined\"\n fullWidth\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n <DateTimePicker\n label=\"Start\"\n inputVariant=\"outlined\"\n fullWidth\n margin=\"normal\"\n ampm={false}\n value={start}\n className={classes.formControl}\n onChange={date => {\n setStart(date?.toISO() ?? '');\n }}\n />\n <DateTimePicker\n label=\"End\"\n inputVariant=\"outlined\"\n fullWidth\n margin=\"normal\"\n ampm={false}\n value={end}\n className={classes.formControl}\n onChange={date => {\n setEnd(date?.toISO() ?? '');\n }}\n />\n </MuiPickersUtilsProvider>\n </DialogContent>\n <DialogActions>\n <Button\n disabled={isLoading}\n onClick={handleOverride}\n color=\"primary\"\n variant=\"contained\"\n >\n Override\n </Button>\n <Button disabled={isLoading} onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useApi } from '@backstage/core-plugin-api';\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport RepeatIcon from '@material-ui/icons/Repeat';\nimport { DateTime as dt } from 'luxon';\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { Shift } from '../../types';\nimport { ShiftOverrideModal } from '../Shift/ShiftOverrideModal';\n\nconst useStyles = makeStyles({\n button: {\n marginTop: 4,\n padding: 0,\n lineHeight: 1.8,\n '& span': {\n lineHeight: 1.8,\n fontSize: '0.65rem',\n },\n '& svg': {\n fontSize: '0.85rem !important',\n },\n },\n});\n\nexport const OnCallShiftItem = ({\n scheduleId,\n shift,\n refetchOnCallSchedules,\n}: {\n scheduleId: number;\n shift: Shift;\n refetchOnCallSchedules: () => void;\n}) => {\n const classes = useStyles();\n const ilertApi = useApi(ilertApiRef);\n const [isModalOpened, setIsModalOpened] = React.useState(false);\n\n const handleOverride = () => {\n setIsModalOpened(true);\n };\n\n if (!shift || !shift.start) {\n return (\n <Grid container spacing={0}>\n <Grid item sm={12}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\">\n Nobody\n </Typography>\n </Grid>\n </Grid>\n );\n }\n\n return (\n <Grid container spacing={0}>\n {shift && shift.user ? (\n <Grid item sm={12}>\n <Typography variant=\"subtitle1\" noWrap>\n {ilertApi.getUserInitials(shift.user)}\n </Typography>\n </Grid>\n ) : null}\n <Grid item sm={12}>\n <Typography variant=\"subtitle2\" color=\"textSecondary\">\n {`${dt.fromISO(shift.start).toFormat('D MMM, HH:mm')} - ${dt\n .fromISO(shift.end)\n .toFormat('D MMM, HH:mm')}`}\n </Typography>\n </Grid>\n <Grid item sm={12}>\n <Button\n color=\"primary\"\n size=\"small\"\n className={classes.button}\n startIcon={<RepeatIcon />}\n onClick={handleOverride}\n >\n <Typography variant=\"overline\">Override shift</Typography>\n </Button>\n <ShiftOverrideModal\n scheduleId={scheduleId}\n shift={shift}\n refetchOnCallSchedules={refetchOnCallSchedules}\n isModalOpened={isModalOpened}\n setIsModalOpened={setIsModalOpened}\n />\n </Grid>\n </Grid>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Typography from '@material-ui/core/Typography';\nimport { Schedule } from '../../types';\nimport { ilertApiRef } from '../../api';\nimport { OnCallShiftItem } from './OnCallShiftItem';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { ItemCardGrid, Progress, Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles(() => ({\n card: {\n margin: 16,\n width: 'calc(100% - 32px)',\n },\n\n cardHeader: {\n maxWidth: '100%',\n },\n\n cardContent: {\n marginLeft: 80,\n borderLeft: '1px #808289 solid',\n position: 'relative',\n },\n\n indicatorNext: {\n position: 'absolute',\n top: 'calc(40% - 10px)',\n left: -6,\n width: 12,\n height: 12,\n background: '#92949c !important',\n borderRadius: '50%',\n },\n\n indicatorCurrent: {\n position: 'absolute',\n top: 'calc(40% - 10px)',\n left: -6,\n width: 12,\n height: 12,\n background: '#ffb74d !important',\n color: '#ffb74d !important',\n borderRadius: '50%',\n '&::after': {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n animation: '$ripple 1.2s infinite ease-in-out',\n border: '1px solid currentColor',\n content: '\"\"',\n },\n },\n '@keyframes ripple': {\n '0%': {\n transform: 'scale(.8)',\n opacity: 1,\n },\n '100%': {\n transform: 'scale(2.4)',\n opacity: 0,\n },\n },\n\n beforeText: {\n position: 'absolute',\n top: 'calc(31% - 10px)',\n left: -78,\n width: 65,\n height: 20,\n textAlign: 'center',\n color: '#808289',\n },\n\n marginBottom: {\n marginBottom: 16,\n },\n\n link: {\n fontSize: '1.5rem',\n fontWeight: 700,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n display: 'block',\n },\n}));\n\nexport const OnCallSchedulesGrid = ({\n onCallSchedules,\n isLoading,\n refetchOnCallSchedules,\n}: {\n onCallSchedules: Schedule[];\n isLoading: boolean;\n refetchOnCallSchedules: () => void;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const classes = useStyles();\n\n if (isLoading) {\n return <Progress />;\n }\n return (\n <ItemCardGrid data-testid=\"docs-explore\">\n {!onCallSchedules?.length\n ? null\n : onCallSchedules.map((schedule, index) => (\n <Card key={index}>\n <CardHeader\n classes={{ content: classes.cardHeader }}\n title={\n <Link\n to={ilertApi.getScheduleDetailsURL(schedule)}\n className={classes.link}\n >\n {schedule.name}\n </Link>\n }\n />\n\n <CardContent className={classes.cardContent}>\n <div className={classes.indicatorCurrent} />\n <OnCallShiftItem\n shift={schedule.currentShift}\n scheduleId={schedule.id}\n refetchOnCallSchedules={refetchOnCallSchedules}\n />\n <Typography className={classes.beforeText} variant=\"body2\">\n On call now\n </Typography>\n </CardContent>\n\n <CardContent\n className={`${classes.cardContent} ${classes.marginBottom}`}\n >\n <div className={classes.indicatorNext} />\n <OnCallShiftItem\n shift={schedule.nextShift}\n scheduleId={schedule.id}\n refetchOnCallSchedules={refetchOnCallSchedules}\n />\n <Typography className={classes.beforeText} variant=\"body2\">\n Next on call\n </Typography>\n </CardContent>\n </Card>\n ))}\n </ItemCardGrid>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { ilertApiRef } from '../api';\nimport { AuthenticationError } from '@backstage/errors';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { Schedule } from '../types';\nimport { useApi, errorApiRef } from '@backstage/core-plugin-api';\n\nexport const useOnCallSchedules = () => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [onCallSchedulesList, setOnCallSchedulesList] = React.useState<\n Schedule[]\n >([]);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const fetchOnCallSchedulesCall = async () => {\n try {\n setIsLoading(true);\n const data = await ilertApi.fetchOnCallSchedules();\n setOnCallSchedulesList(data || []);\n setIsLoading(false);\n } catch (e) {\n setIsLoading(false);\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n };\n\n const { error, retry } = useAsyncRetry(fetchOnCallSchedulesCall, []);\n\n return [\n {\n onCallSchedules: onCallSchedulesList,\n error,\n isLoading,\n },\n {\n retry,\n setIsLoading,\n refetchOnCallSchedules: fetchOnCallSchedulesCall,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { AuthenticationError } from '@backstage/errors';\nimport { OnCallSchedulesGrid } from './OnCallSchedulesGrid';\nimport { MissingAuthorizationHeaderError } from '../Errors';\nimport { useOnCallSchedules } from '../../hooks/useOnCallSchedules';\nimport {\n Content,\n ContentHeader,\n SupportButton,\n ResponseErrorPanel,\n} from '@backstage/core-components';\n\nexport const OnCallSchedulesPage = () => {\n const [{ onCallSchedules, isLoading, error }, { refetchOnCallSchedules }] =\n useOnCallSchedules();\n\n if (error) {\n if (error instanceof AuthenticationError) {\n return (\n <Content>\n <MissingAuthorizationHeaderError />\n </Content>\n );\n }\n\n return (\n <Content>\n <ResponseErrorPanel error={error} />\n </Content>\n );\n }\n\n return (\n <Content>\n <ContentHeader title=\"Who is on call?\">\n <SupportButton>\n This helps you to bring iLert into your developer portal.\n </SupportButton>\n </ContentHeader>\n <OnCallSchedulesGrid\n onCallSchedules={onCallSchedules}\n isLoading={isLoading}\n refetchOnCallSchedules={refetchOnCallSchedules}\n />\n </Content>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { GetServicesOpts, ilertApiRef, TableState } from '../api';\nimport { Service } from '../types';\n\nexport const useServices = (paging: boolean) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [tableState, setTableState] = React.useState<TableState>({\n page: 0,\n pageSize: 10,\n });\n\n const [servicesList, setServicesList] = React.useState<Service[]>([]);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const fetchServicesCall = async () => {\n try {\n setIsLoading(true);\n const opts: GetServicesOpts = {};\n if (paging) {\n opts.maxResults = tableState.pageSize;\n opts.startIndex = tableState.page * tableState.pageSize;\n }\n const data = await ilertApi.fetchServices(opts);\n setServicesList(data || []);\n setIsLoading(false);\n } catch (e) {\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n setIsLoading(false);\n throw e;\n }\n };\n\n const fetchServices = useAsyncRetry(fetchServicesCall, [tableState]);\n\n const refetchServices = () => {\n setTableState({ ...tableState, page: 0 });\n Promise.all([fetchServicesCall()]);\n };\n\n const error = fetchServices.error;\n const retry = () => {\n fetchServices.retry();\n };\n\n const onChangePage = (page: number) => {\n setTableState({ ...tableState, page });\n };\n const onChangeRowsPerPage = (p: number) => {\n setTableState({ ...tableState, pageSize: p });\n };\n\n return [\n {\n tableState,\n services: servicesList,\n isLoading,\n error,\n },\n {\n setTableState,\n setServicesList,\n setIsLoading,\n retry,\n refetchServices,\n onChangePage,\n onChangeRowsPerPage,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Chip from '@material-ui/core/Chip';\nimport { withStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport {\n DEGRADED,\n MAJOR_OUTAGE,\n OPERATIONAL,\n PARTIAL_OUTAGE,\n Service,\n UNDER_MAINTENANCE,\n} from '../../types';\n\nconst OperationalChip = withStyles(theme => ({\n root: {\n backgroundColor: '#388E3D',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nconst UnderMaintenanceChip = withStyles(theme => ({\n root: {\n backgroundColor: '#616161',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\nconst DegradedChip = withStyles(theme => ({\n root: {\n backgroundColor: '#FBC02D',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\nconst PartialOutageChip = withStyles(theme => ({\n root: {\n backgroundColor: '#F57C02',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\nconst MajorOutageChip = withStyles(theme => ({\n root: {\n backgroundColor: '#D22F2E',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nconst serviceStatusLabels = {\n [OPERATIONAL]: 'Operational',\n [UNDER_MAINTENANCE]: 'Under maintenance',\n [DEGRADED]: 'Degraded',\n [PARTIAL_OUTAGE]: 'Partial outage',\n [MAJOR_OUTAGE]: 'Major outage',\n} as Record<string, string>;\n\nexport const StatusChip = ({ service }: { service: Service }) => {\n const label = `${serviceStatusLabels[service.status]}`;\n\n switch (service.status) {\n case OPERATIONAL:\n return <OperationalChip label={label} size=\"small\" />;\n case UNDER_MAINTENANCE:\n return <UnderMaintenanceChip label={label} size=\"small\" />;\n case DEGRADED:\n return <DegradedChip label={label} size=\"small\" />;\n case PARTIAL_OUTAGE:\n return <PartialOutageChip label={label} size=\"small\" />;\n case MAJOR_OUTAGE:\n return <MajorOutageChip label={label} size=\"small\" />;\n default:\n return <Chip label={label} size=\"small\" />;\n }\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Typography from '@material-ui/core/Typography';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { Service } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const ServiceActionsMenu = ({ service }: { service: Service }) => {\n const ilertApi = useApi(ilertApiRef);\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleCloseMenu = () => {\n setAnchorEl(null);\n };\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n size=\"small\"\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id={`service-actions-menu-${service.id}`}\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleCloseMenu}\n PaperProps={{\n style: { maxHeight: 48 * 5.5 },\n }}\n >\n <MenuItem key=\"details\" onClick={handleCloseMenu}>\n <Typography variant=\"inherit\" noWrap>\n <Link to={ilertApi.getServiceDetailsURL(service)}>\n View in iLert\n </Link>\n </Typography>\n </MenuItem>\n </Menu>\n </>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { Service } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const ServiceLink = ({ service }: { service: Service | null }) => {\n const ilertApi = useApi(ilertApiRef);\n\n if (!service) {\n return null;\n }\n\n return <Link to={ilertApi.getServiceDetailsURL(service)}>#{service.id}</Link>;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport React from 'react';\nimport { TableState } from '../../api';\nimport { Service } from '../../types';\nimport { StatusChip } from './StatusChip';\n\nimport { Table, TableColumn } from '@backstage/core-components';\nimport { ServiceActionsMenu } from '../Service/ServiceActionsMenu';\nimport { ServiceLink } from '../Service/ServiceLink';\n\nconst useStyles = makeStyles(theme => ({\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n}));\n\nexport const ServicesTable = ({\n services,\n tableState,\n isLoading,\n onChangePage,\n onChangeRowsPerPage,\n compact,\n}: {\n services: Service[];\n tableState: TableState;\n isLoading: boolean;\n setIsLoading: (isLoading: boolean) => void;\n onChangePage: (page: number) => void;\n onChangeRowsPerPage: (pageSize: number) => void;\n compact?: boolean;\n}) => {\n const classes = useStyles();\n\n const smColumnStyle = {\n width: '10%',\n maxWidth: '10%',\n };\n const xlColumnStyle = {\n width: '30%',\n maxWidth: '30%',\n };\n const idColumn: TableColumn<Service> = {\n title: 'ID',\n field: 'id',\n highlight: true,\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <ServiceLink service={rowData} />,\n };\n const nameColumn: TableColumn<Service> = {\n title: 'Name',\n field: 'name',\n cellStyle: !compact ? xlColumnStyle : undefined,\n headerStyle: !compact ? xlColumnStyle : undefined,\n render: rowData => <Typography>{rowData.name}</Typography>,\n };\n const statusColumn: TableColumn<Service> = {\n title: 'Status',\n field: 'status',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <StatusChip service={rowData} />,\n };\n const uptimeColumn: TableColumn<Service> = {\n title: 'Uptime in the last 90 days',\n field: 'uptimePercentage',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => (\n <Typography>{rowData.uptime?.uptimePercentage?.p90 || ''}</Typography>\n ),\n };\n const actionsColumn: TableColumn<Service> = {\n title: '',\n field: '',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <ServiceActionsMenu service={rowData} />,\n };\n\n const columns: TableColumn<Service>[] = compact\n ? [nameColumn, statusColumn, uptimeColumn, actionsColumn]\n : [idColumn, nameColumn, statusColumn, uptimeColumn, actionsColumn];\n\n return (\n <Table\n options={{\n sorting: false,\n search: !compact,\n paging: !compact,\n actionsColumnIndex: -1,\n pageSize: tableState.pageSize,\n pageSizeOptions: !compact ? [10, 20, 50, 100] : [3, 10, 20, 50, 100],\n padding: 'dense',\n loadingType: 'overlay',\n showEmptyDataSourceMessage: !isLoading,\n showTitle: true,\n toolbar: true,\n }}\n emptyContent={\n <Typography color=\"textSecondary\" className={classes.empty}>\n No services\n </Typography>\n }\n title={\n <Typography variant=\"button\" color=\"textSecondary\">\n SERVICES\n </Typography>\n }\n page={tableState.page}\n onPageChange={onChangePage}\n onRowsPerPageChange={onChangeRowsPerPage}\n columns={columns}\n data={services}\n isLoading={isLoading}\n />\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Content,\n ContentHeader,\n ResponseErrorPanel,\n SupportButton,\n} from '@backstage/core-components';\nimport React from 'react';\nimport { useServices } from '../../hooks/useServices';\nimport { MissingAuthorizationHeaderError } from '../Errors';\nimport { ServicesTable } from './ServicesTable';\n\nexport const ServicesPage = () => {\n const [\n { tableState, services, isLoading, error },\n { onChangePage, onChangeRowsPerPage, setIsLoading },\n ] = useServices(true);\n\n if (error) {\n if (error.name === 'AuthenticationError') {\n return (\n <Content>\n <MissingAuthorizationHeaderError />\n </Content>\n );\n }\n\n return (\n <Content>\n <ResponseErrorPanel error={error} />\n </Content>\n );\n }\n\n return (\n <Content>\n <ContentHeader title=\"Services\">\n <SupportButton>\n This helps you to bring iLert into your developer portal.\n </SupportButton>\n </ContentHeader>\n <ServicesTable\n services={services}\n tableState={tableState}\n onChangePage={onChangePage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n isLoading={isLoading}\n setIsLoading={setIsLoading}\n />\n </Content>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { GetStatusPagesOpts, ilertApiRef, TableState } from '../api';\nimport { StatusPage } from '../types';\n\nexport const useStatusPages = (paging: boolean) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [tableState, setTableState] = React.useState<TableState>({\n page: 0,\n pageSize: 10,\n });\n\n const [statusPagesList, setStatusPagesList] = React.useState<StatusPage[]>(\n [],\n );\n const [isLoading, setIsLoading] = React.useState(false);\n\n const fetchStatusPagesCall = async () => {\n try {\n setIsLoading(true);\n const opts: GetStatusPagesOpts = {};\n if (paging) {\n opts.maxResults = tableState.pageSize;\n opts.startIndex = tableState.page * tableState.pageSize;\n }\n const data = await ilertApi.fetchStatusPages(opts);\n setStatusPagesList(data || []);\n setIsLoading(false);\n } catch (e) {\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n setIsLoading(false);\n throw e;\n }\n };\n\n const fetchStatusPages = useAsyncRetry(fetchStatusPagesCall, [tableState]);\n\n const refetchStatusPages = () => {\n setTableState({ ...tableState, page: 0 });\n Promise.all([fetchStatusPagesCall()]);\n };\n\n const error = fetchStatusPages.error;\n const retry = () => {\n fetchStatusPages.retry();\n };\n\n const onChangePage = (page: number) => {\n setTableState({ ...tableState, page });\n };\n const onChangeRowsPerPage = (p: number) => {\n setTableState({ ...tableState, pageSize: p });\n };\n\n return [\n {\n tableState,\n statusPages: statusPagesList,\n isLoading,\n error,\n },\n {\n setTableState,\n setStatusPagesList,\n setIsLoading,\n retry,\n refetchStatusPages,\n onChangePage,\n onChangeRowsPerPage,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Chip from '@material-ui/core/Chip';\nimport { withStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport { PRIVATE, PUBLIC, StatusPage } from '../../types';\n\nconst PrivateChip = withStyles(theme => ({\n root: {\n backgroundColor: '#4caf50',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nconst PublicChip = withStyles(theme => ({\n root: {\n backgroundColor: '#ffb74d',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nconst statusPageVisibilityLabels = {\n [PUBLIC]: 'Public',\n [PRIVATE]: 'Private',\n} as Record<string, string>;\n\nexport const VisibilityChip = ({ statusPage }: { statusPage: StatusPage }) => {\n const label = `${statusPageVisibilityLabels[statusPage.visibility]}`;\n\n switch (statusPage.visibility) {\n case PRIVATE:\n return <PrivateChip label={label} size=\"small\" />;\n case PUBLIC:\n return <PublicChip label={label} size=\"small\" />;\n default:\n return <Chip label={label} size=\"small\" />;\n }\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Typography from '@material-ui/core/Typography';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { StatusPage } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const StatusPageActionsMenu = ({\n statusPage,\n}: {\n statusPage: StatusPage;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleCloseMenu = () => {\n setAnchorEl(null);\n };\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n size=\"small\"\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id={`statusPage-actions-menu-${statusPage.id}`}\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleCloseMenu}\n PaperProps={{\n style: { maxHeight: 48 * 5.5 },\n }}\n >\n <MenuItem key=\"details\" onClick={handleCloseMenu}>\n <Typography variant=\"inherit\" noWrap>\n <Link to={ilertApi.getStatusPageDetailsURL(statusPage)}>\n View in iLert\n </Link>\n </Typography>\n </MenuItem>\n <MenuItem>\n <Typography variant=\"inherit\" noWrap>\n <Link to={`https://${ilertApi.getStatusPageURL(statusPage)}`}>\n View status page\n </Link>\n </Typography>\n </MenuItem>\n </Menu>\n </>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { StatusPage } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const StatusPageLink = ({\n statusPage,\n}: {\n statusPage: StatusPage | null;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n\n if (!statusPage) {\n return null;\n }\n\n return (\n <Link to={ilertApi.getStatusPageDetailsURL(statusPage)}>\n #{statusPage.id}\n </Link>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { StatusPage } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const StatusPageURL = ({\n statusPage,\n}: {\n statusPage: StatusPage | null;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n\n if (!statusPage) {\n return null;\n }\n\n const url = ilertApi.getStatusPageURL(statusPage);\n\n return <Link to={`https://${url}`}>{url}</Link>;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Chip from '@material-ui/core/Chip';\nimport { withStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport {\n DEGRADED,\n MAJOR_OUTAGE,\n OPERATIONAL,\n PARTIAL_OUTAGE,\n StatusPage,\n UNDER_MAINTENANCE,\n} from '../../types';\n\nconst OperationalChip = withStyles(theme => ({\n root: {\n backgroundColor: '#388E3D',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nconst UnderMaintenanceChip = withStyles(theme => ({\n root: {\n backgroundColor: '#616161',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\nconst DegradedChip = withStyles(theme => ({\n root: {\n backgroundColor: '#FBC02D',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\nconst PartialOutageChip = withStyles(theme => ({\n root: {\n backgroundColor: '#F57C02',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\nconst MajorOutageChip = withStyles(theme => ({\n root: {\n backgroundColor: '#D22F2E',\n color: theme.palette.common.white,\n margin: 0,\n },\n}))(Chip);\n\nconst statusPageStatusLabels = {\n [OPERATIONAL]: 'Operational',\n [UNDER_MAINTENANCE]: 'Under maintenance',\n [DEGRADED]: 'Degraded',\n [PARTIAL_OUTAGE]: 'Partial outage',\n [MAJOR_OUTAGE]: 'Major outage',\n} as Record<string, string>;\n\nexport const StatusChip = ({ statusPage }: { statusPage: StatusPage }) => {\n const label = `${statusPageStatusLabels[statusPage.status]}`;\n\n switch (statusPage.status) {\n case OPERATIONAL:\n return <OperationalChip label={label} size=\"small\" />;\n case UNDER_MAINTENANCE:\n return <UnderMaintenanceChip label={label} size=\"small\" />;\n case DEGRADED:\n return <DegradedChip label={label} size=\"small\" />;\n case PARTIAL_OUTAGE:\n return <PartialOutageChip label={label} size=\"small\" />;\n case MAJOR_OUTAGE:\n return <MajorOutageChip label={label} size=\"small\" />;\n default:\n return <Chip label={label} size=\"small\" />;\n }\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport React from 'react';\nimport { TableState } from '../../api';\nimport { StatusPage } from '../../types';\nimport { VisibilityChip } from './VisibilityChip';\n\nimport { Table, TableColumn } from '@backstage/core-components';\nimport { StatusPageActionsMenu } from '../StatusPage/StatusPageActionsMenu';\nimport { StatusPageLink } from '../StatusPage/StatusPageLink';\nimport { StatusPageURL } from '../StatusPage/StatusPageURL';\nimport { StatusChip } from './StatusChip';\n\nconst useStyles = makeStyles(theme => ({\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n}));\n\nexport const StatusPagesTable = ({\n statusPages,\n tableState,\n isLoading,\n onChangePage,\n onChangeRowsPerPage,\n compact,\n}: {\n statusPages: StatusPage[];\n tableState: TableState;\n isLoading: boolean;\n setIsLoading: (isLoading: boolean) => void;\n onChangePage: (page: number) => void;\n onChangeRowsPerPage: (pageSize: number) => void;\n compact?: boolean;\n}) => {\n const classes = useStyles();\n\n const smColumnStyle = {\n width: '10%',\n maxWidth: '10%',\n };\n const xlColumnStyle = {\n width: '30%',\n maxWidth: '30%',\n };\n\n const idColumn: TableColumn<StatusPage> = {\n title: 'ID',\n field: 'id',\n highlight: true,\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <StatusPageLink statusPage={rowData} />,\n };\n const nameColumn: TableColumn<StatusPage> = {\n title: 'Name',\n field: 'name',\n cellStyle: !compact ? xlColumnStyle : undefined,\n headerStyle: !compact ? xlColumnStyle : undefined,\n render: rowData => <Typography>{rowData.name}</Typography>,\n };\n const urlColumn: TableColumn<StatusPage> = {\n title: 'URL',\n field: 'url',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <StatusPageURL statusPage={rowData} />,\n };\n const visibilityColumn: TableColumn<StatusPage> = {\n title: 'Visibility',\n field: 'visibility',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <VisibilityChip statusPage={rowData} />,\n };\n const statusColumn: TableColumn<StatusPage> = {\n title: 'Status',\n field: 'status',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <StatusChip statusPage={rowData} />,\n };\n const actionsColumn: TableColumn<StatusPage> = {\n title: '',\n field: '',\n cellStyle: smColumnStyle,\n headerStyle: smColumnStyle,\n render: rowData => <StatusPageActionsMenu statusPage={rowData} />,\n };\n\n const columns: TableColumn<StatusPage>[] = compact\n ? [nameColumn, statusColumn, urlColumn, actionsColumn]\n : [\n idColumn,\n nameColumn,\n statusColumn,\n urlColumn,\n visibilityColumn,\n actionsColumn,\n ];\n\n return (\n <Table\n options={{\n sorting: false,\n search: !compact,\n paging: !compact,\n actionsColumnIndex: -1,\n pageSize: tableState.pageSize,\n pageSizeOptions: !compact ? [10, 20, 50, 100] : [3, 10, 20, 50, 100],\n padding: 'dense',\n loadingType: 'overlay',\n showEmptyDataSourceMessage: !isLoading,\n showTitle: true,\n toolbar: true,\n }}\n emptyContent={\n <Typography color=\"textSecondary\" className={classes.empty}>\n No status pages\n </Typography>\n }\n title={\n <Typography variant=\"button\" color=\"textSecondary\">\n STATUS PAGES\n </Typography>\n }\n page={tableState.page}\n onPageChange={onChangePage}\n onRowsPerPageChange={onChangeRowsPerPage}\n columns={columns}\n data={statusPages}\n isLoading={isLoading}\n />\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Content,\n ContentHeader,\n ResponseErrorPanel,\n SupportButton,\n} from '@backstage/core-components';\nimport React from 'react';\nimport { useStatusPages } from '../../hooks/useStatusPages';\nimport { MissingAuthorizationHeaderError } from '../Errors';\nimport { StatusPagesTable } from './StatusPagesTable';\n\nexport const StatusPagesPage = () => {\n const [\n { tableState, statusPages, isLoading, error },\n { onChangePage, onChangeRowsPerPage, setIsLoading },\n ] = useStatusPages(true);\n\n if (error) {\n if (error.name === 'AuthenticationError') {\n return (\n <Content>\n <MissingAuthorizationHeaderError />\n </Content>\n );\n }\n\n return (\n <Content>\n <ResponseErrorPanel error={error} />\n </Content>\n );\n }\n\n return (\n <Content>\n <ContentHeader title=\"Status pages\">\n <SupportButton>\n This helps you to bring iLert into your developer portal.\n </SupportButton>\n </ContentHeader>\n <StatusPagesTable\n statusPages={statusPages}\n tableState={tableState}\n onChangePage={onChangePage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n isLoading={isLoading}\n setIsLoading={setIsLoading}\n />\n </Content>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Content,\n Header,\n HeaderLabel,\n HeaderTabs,\n Page,\n} from '@backstage/core-components';\nimport React from 'react';\nimport { AlertsPage } from '../AlertsPage';\nimport { OnCallSchedulesPage } from '../OnCallSchedulesPage';\nimport { ServicesPage } from '../ServicesPage';\nimport { StatusPagesPage } from '../StatusPagePage';\n\n/** @public */\nexport const ILertPage = () => {\n const [selectedTab, setSelectedTab] = React.useState<number>(0);\n const tabs = [\n { label: 'Who is on call?' },\n { label: 'Alerts' },\n { label: 'Services' },\n { label: 'Status pages' },\n ];\n const renderTab = () => {\n switch (selectedTab) {\n case 0:\n return <OnCallSchedulesPage />;\n case 1:\n return <AlertsPage />;\n case 2:\n return <ServicesPage />;\n case 3:\n return <StatusPagesPage />;\n default:\n return null;\n }\n };\n\n return (\n <Page themeId=\"website\">\n <Header title=\"iLert\" type=\"tool\">\n <HeaderLabel label=\"Owner\" value=\"iLert\" />\n <HeaderLabel label=\"Lifecycle\" value=\"Alpha\" />\n </Header>\n <HeaderTabs\n selectedIndex={selectedTab}\n onChange={index => setSelectedTab(index)}\n tabs={tabs.map(({ label }, index) => ({\n id: index.toString(),\n label,\n }))}\n />\n\n <Content noPadding>{renderTab()}</Content>\n </Page>\n );\n};\n\nexport default ILertPage;\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const ILERT_INTEGRATION_KEY_ANNOTATION = 'ilert.com/integration-key';\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nimport { ILERT_INTEGRATION_KEY_ANNOTATION } from '../constants';\n\nexport function useILertEntity() {\n const { entity } = useEntity();\n const integrationKey =\n entity.metadata.annotations?.[ILERT_INTEGRATION_KEY_ANNOTATION] || '';\n const name = entity.metadata.name;\n const identifier = `${entity.kind}:${\n entity.metadata.namespace || 'default'\n }/${entity.metadata.name}`;\n\n return { integrationKey, name, identifier };\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { ilertApiRef } from '../api';\nimport { AlertSource } from '../types';\n\nexport const useAlertSource = (integrationKey: string) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [alertSource, setAlertSource] = React.useState<AlertSource | null>(\n null,\n );\n const [isAlertSourceLoading, setIsAlertSourceLoading] = React.useState(false);\n\n const fetchAlertSourceCall = async () => {\n try {\n if (!integrationKey) {\n return;\n }\n setIsAlertSourceLoading(true);\n const data = await ilertApi.fetchAlertSource(integrationKey);\n setAlertSource(data || null);\n setIsAlertSourceLoading(false);\n } catch (e) {\n setIsAlertSourceLoading(false);\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n };\n\n const { error: alertSourceError, retry: alertSourceRetry } = useAsyncRetry(\n fetchAlertSourceCall,\n [integrationKey],\n );\n\n const retry = () => alertSourceRetry();\n\n return [\n {\n alertSource,\n error: alertSourceError,\n isLoading: isAlertSourceLoading,\n },\n {\n retry,\n setIsLoading: setIsAlertSourceLoading,\n refetchAlertSource: fetchAlertSourceCall,\n setAlertSource,\n },\n ] as const;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Typography from '@material-ui/core/Typography';\nimport AlarmAddIcon from '@material-ui/icons/AlarmAdd';\nimport BuildIcon from '@material-ui/icons/Build';\nimport PauseIcon from '@material-ui/icons/Pause';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport WebIcon from '@material-ui/icons/Web';\nimport Alert from '@material-ui/lab/Alert';\nimport React from 'react';\nimport { ilertApiRef } from '../../api';\nimport { AlertSource } from '../../types';\n\nimport {\n HeaderIconLinkRow,\n IconLinkVerticalProps,\n} from '@backstage/core-components';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nexport const ILertCardActionsHeader = ({\n alertSource,\n setAlertSource,\n setIsNewAlertModalOpened,\n setIsMaintenanceModalOpened,\n}: {\n alertSource: AlertSource | null;\n setAlertSource: (alertSource: AlertSource) => void;\n setIsNewAlertModalOpened: (isOpen: boolean) => void;\n setIsMaintenanceModalOpened: (isOpen: boolean) => void;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(alertApiRef);\n const [isLoading, setIsLoading] = React.useState(false);\n const [isDisableModalOpened, setIsDisableModalOpened] = React.useState(false);\n\n const handleCreateNewAlert = () => {\n setIsNewAlertModalOpened(true);\n };\n\n const handleEnableAlertSource = async () => {\n try {\n if (!alertSource) {\n return;\n }\n setIsLoading(true);\n const newAlertSource = await ilertApi.enableAlertSource(alertSource);\n alertApi.post({ message: 'Alert source enabled.' });\n setIsLoading(false);\n setAlertSource(newAlertSource);\n } catch (err) {\n setIsLoading(false);\n alertApi.post({ message: err, severity: 'error' });\n }\n };\n const handleDisableAlertSource = async () => {\n try {\n if (!alertSource) {\n return;\n }\n setIsDisableModalOpened(false);\n setIsLoading(true);\n const newAlertSource = await ilertApi.disableAlertSource(alertSource);\n alertApi.post({ message: 'Alert source disabled.' });\n setIsLoading(false);\n setAlertSource(newAlertSource);\n } catch (err) {\n setIsLoading(false);\n alertApi.post({ message: err, severity: 'error' });\n }\n };\n\n const handleDisableAlertSourceWarningOpen = () => {\n setIsDisableModalOpened(true);\n };\n\n const handleDisableAlertSourceWarningClose = () => {\n setIsDisableModalOpened(false);\n };\n\n const handleMaintenanceAlertSource = () => {\n setIsMaintenanceModalOpened(true);\n };\n\n const alertSourceLink: IconLinkVerticalProps = {\n label: 'Alert Source',\n href: ilertApi.getAlertSourceDetailsURL(alertSource),\n icon: <WebIcon />,\n };\n\n const createAlertLink: IconLinkVerticalProps = {\n label: 'Create Alert',\n onClick: handleCreateNewAlert,\n icon: <AlarmAddIcon />,\n color: 'secondary',\n disabled:\n !alertSource ||\n alertSource.status === 'DISABLED' ||\n alertSource.status === 'IN_MAINTENANCE',\n };\n\n const enableAlertSourceLink: IconLinkVerticalProps = {\n label: 'Enable',\n onClick: handleEnableAlertSource,\n icon: <PlayArrowIcon />,\n disabled: !alertSource || isLoading,\n };\n\n const disableAlertSourceLink: IconLinkVerticalProps = {\n label: 'Disable',\n onClick: handleDisableAlertSourceWarningOpen,\n icon: <PauseIcon />,\n disabled: !alertSource || isLoading,\n };\n\n const maintenanceAlertSourceLink: IconLinkVerticalProps = {\n label: 'Immediate maintenance',\n onClick: handleMaintenanceAlertSource,\n icon: <BuildIcon />,\n disabled: !alertSource || isLoading,\n };\n\n const links: IconLinkVerticalProps[] = [\n alertSourceLink,\n createAlertLink,\n alertSource && alertSource.active\n ? disableAlertSourceLink\n : enableAlertSourceLink,\n ];\n\n if (alertSource && alertSource.status !== 'IN_MAINTENANCE') {\n links.push(maintenanceAlertSourceLink);\n }\n\n return (\n <>\n <HeaderIconLinkRow links={links} />\n <Dialog\n open={isDisableModalOpened}\n onClose={handleDisableAlertSourceWarningClose}\n aria-labelledby=\"alert-source-disable-form-title\"\n >\n <DialogTitle id=\"alert-source-disable-form-title\">\n Disable alert source\n </DialogTitle>\n <DialogContent>\n <Alert severity=\"info\">\n <Typography variant=\"body1\" align=\"justify\">\n Do you really want to disable this alert source? A disabled alert\n source cannot create new alerts.\n </Typography>\n </Alert>\n </DialogContent>\n <DialogActions>\n <Button\n onClick={handleDisableAlertSource}\n color=\"secondary\"\n variant=\"contained\"\n >\n Disable\n </Button>\n <Button\n onClick={handleDisableAlertSourceWarningClose}\n color=\"primary\"\n >\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Button from '@material-ui/core/Button';\nimport Divider from '@material-ui/core/Divider';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport { CodeSnippet } from '@backstage/core-components';\n\nconst ENTITY_YAML = `apiVersion: backstage.io/v1alpha1\nkind: Component\nmetadata:\n name: example\n description: example.com\n annotations:\n ilert.com/integration-key: [INTEGRATION_KEY]\nspec:\n type: website\n lifecycle: production\n owner: guest`;\n\nconst useStyles = makeStyles(theme => ({\n code: {\n borderRadius: 6,\n margin: theme.spacing(2, 0),\n background:\n theme.palette.type === 'dark' ? '#444' : theme.palette.common.white,\n },\n header: {\n display: 'inline-block',\n padding: theme.spacing(2, 2, 2, 2.5),\n },\n}));\n\nexport const ILertCardEmptyState = () => {\n const classes = useStyles();\n\n return (\n <Card data-testid=\"ilert-empty-card\">\n <CardHeader title=\"iLert\" className={classes.header} />\n <Divider />\n <CardContent>\n <Typography variant=\"body1\">\n No integration key defined for this entity. You can add integration\n key to your entity YAML as shown in the highlighted example below:\n </Typography>\n <div className={classes.code}>\n <CodeSnippet\n text={ENTITY_YAML}\n language=\"yaml\"\n showLineNumbers\n highlightedNumbers={[6, 7]}\n customStyle={{ background: 'inherit', fontSize: '115%' }}\n />\n </div>\n <Button\n variant=\"contained\"\n color=\"primary\"\n target=\"_blank\"\n href=\"https://github.com/backstage/backstage/blob/master/plugins/ilert/README.md\"\n >\n Read more\n </Button>\n </CardContent>\n </Card>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport { withStyles } from '@material-ui/core/styles';\nimport { AlertSource } from '../../types';\n\nconst MaintenanceChip = withStyles(theme => ({\n root: {\n backgroundColor: '#92949c',\n color: theme.palette.common.white,\n marginTop: 8,\n },\n}))(Chip);\n\nexport const ILertCardHeaderStatus = ({\n alertSource,\n}: {\n alertSource: AlertSource | null;\n}) => {\n if (!alertSource) {\n return null;\n }\n\n switch (alertSource.status) {\n case 'IN_MAINTENANCE':\n return <MaintenanceChip label=\"MAINTENANCE\" size=\"small\" />;\n case 'DISABLED':\n return <MaintenanceChip label=\"INACTIVE\" size=\"small\" />;\n default:\n return null;\n }\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport TextField from '@material-ui/core/TextField';\nimport { ilertApiRef } from '../../api';\nimport { AlertSource } from '../../types';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nexport const ILertCardMaintenanceModal = ({\n alertSource,\n refetchAlertSource,\n isModalOpened,\n setIsModalOpened,\n}: {\n alertSource: AlertSource | null;\n refetchAlertSource: () => void;\n isModalOpened: boolean;\n setIsModalOpened: (isModalOpened: boolean) => void;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(alertApiRef);\n const [minutes, setMinutes] = React.useState(5);\n\n const handleClose = () => {\n setIsModalOpened(false);\n };\n\n const handleImmediateMaintenance = () => {\n if (!alertSource) {\n return;\n }\n setIsModalOpened(false);\n setTimeout(async () => {\n try {\n await ilertApi.addImmediateMaintenance(alertSource.id, minutes);\n alertApi.post({ message: 'Maintenance started.' });\n refetchAlertSource();\n } catch (err) {\n alertApi.post({ message: err, severity: 'error' });\n }\n }, 250);\n };\n\n const handleMinutesChange = (event: any) => {\n setMinutes(event.target.value);\n };\n\n const minuteOptions = [\n {\n value: 5,\n label: '5 minutes',\n },\n {\n value: 10,\n label: '10 minutes',\n },\n {\n value: 15,\n label: '15 minutes',\n },\n {\n value: 30,\n label: '30 minutes',\n },\n {\n value: 60,\n label: '60 minutes',\n },\n ];\n\n if (!alertSource) {\n return null;\n }\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"maintenance-form-title\"\n >\n <DialogTitle id=\"maintenance-form-title\">\n New maintenance window\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n Keep your alert sources quiet, when your systems are under\n maintenance.\n </DialogContentText>\n <TextField\n select\n label=\"Duration\"\n value={minutes}\n onChange={handleMinutesChange}\n variant=\"outlined\"\n fullWidth\n >\n {minuteOptions.map(option => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n </DialogContent>\n <DialogActions>\n <Button\n onClick={handleImmediateMaintenance}\n color=\"primary\"\n variant=\"contained\"\n >\n Create\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AuthenticationError } from '@backstage/errors';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { ilertApiRef } from '../api';\nimport { AlertSource, OnCall } from '../types';\n\nexport const useAlertSourceOnCalls = (alertSource?: AlertSource | null) => {\n const ilertApi = useApi(ilertApiRef);\n const errorApi = useApi(errorApiRef);\n\n const [onCallsList, setOnCallsList] = React.useState<OnCall[]>([]);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const fetchAlertSourceOnCallsCall = async () => {\n try {\n if (!alertSource) {\n return;\n }\n setIsLoading(true);\n const data = await ilertApi.fetchAlertSourceOnCalls(alertSource);\n setOnCallsList(data || []);\n setIsLoading(false);\n } catch (e) {\n setIsLoading(false);\n if (!(e instanceof AuthenticationError)) {\n errorApi.post(e);\n }\n throw e;\n }\n };\n\n const { error, retry } = useAsyncRetry(fetchAlertSourceOnCallsCall, [\n alertSource,\n ]);\n\n return [\n {\n onCalls: onCallsList,\n error,\n isLoading,\n },\n {\n retry,\n setIsLoading,\n refetchAlertSourceOnCalls: fetchAlertSourceOnCallsCall,\n },\n ] as const;\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Typography from '@material-ui/core/Typography';\n\nconst useStyles = makeStyles({\n text: {\n fontStyle: 'italic',\n },\n});\n\nexport const ILertCardOnCallEmptyState = () => {\n const classes = useStyles();\n\n return (\n <ListItem>\n <ListItemText>\n <Typography\n variant=\"subtitle1\"\n color=\"textSecondary\"\n className={classes.text}\n >\n Nobody\n </Typography>\n </ListItemText>\n </ListItem>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport Divider from '@material-ui/core/Divider';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Avatar from '@material-ui/core/Avatar';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport Typography from '@material-ui/core/Typography';\nimport EmailIcon from '@material-ui/icons/Email';\nimport PhoneIcon from '@material-ui/icons/Phone';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { OnCall } from '../../types';\nimport { ilertApiRef } from '../../api';\nimport { DateTime as dt } from 'luxon';\nimport { useApi } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles({\n listItemPrimary: {\n fontWeight: 'bold',\n },\n fistItemLine: {\n position: 'absolute',\n bottom: 0,\n height: '50%',\n left: 36,\n },\n lastItemLine: {\n position: 'absolute',\n top: 0,\n height: '50%',\n left: 36,\n },\n itemLine: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n height: '100%',\n left: 36,\n },\n});\n\nexport const ILertCardOnCallItem = ({\n onCall,\n fistItem = false,\n lastItem = false,\n}: {\n onCall: OnCall;\n fistItem?: boolean;\n lastItem?: boolean;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const classes = useStyles();\n\n if (!onCall || !onCall.user) {\n return null;\n }\n\n const phoneNumber = ilertApi.getUserPhoneNumber(onCall.user);\n const escalationRepeating = onCall.escalationPolicy.repeating;\n const escalationSeconds =\n onCall.escalationPolicy.escalationRules[onCall.escalationLevel - 1]\n .escalationTimeout;\n const escalationHoursOnly = Math.floor(escalationSeconds / 60);\n const escalationMinutesOnly = escalationSeconds % 60;\n\n let escalationText = '';\n if (!lastItem || (lastItem && escalationRepeating)) {\n escalationText = 'escalate';\n if (escalationSeconds === 0) {\n escalationText += ' immediately';\n } else {\n escalationText += ' after';\n if (escalationHoursOnly > 0) {\n escalationText += ` ${escalationHoursOnly} ${\n escalationHoursOnly === 1 ? 'hour' : 'hours'\n }`;\n }\n if (escalationMinutesOnly > 0 || escalationSeconds === 0) {\n escalationText += ` ${escalationMinutesOnly} ${\n escalationMinutesOnly === 1 ? 'minute' : 'minutes'\n }`;\n }\n }\n }\n\n return (\n <ListItem>\n {fistItem ? (\n <Divider orientation=\"vertical\" className={classes.fistItemLine} />\n ) : null}\n {lastItem ? (\n <Divider orientation=\"vertical\" className={classes.lastItemLine} />\n ) : null}\n {!fistItem && !lastItem ? (\n <Divider orientation=\"vertical\" className={classes.itemLine} />\n ) : null}\n <ListItemIcon>\n <Tooltip\n title={`Escalation level #${onCall.escalationLevel}`}\n placement=\"top\"\n >\n <Avatar>{onCall.escalationLevel}</Avatar>\n </Tooltip>\n </ListItemIcon>\n {onCall.schedule ? (\n <Tooltip\n title={\n 'On call shift ' +\n `${dt.fromISO(onCall.start).toFormat('D MMM, HH:mm')} - ` +\n `${dt.fromISO(onCall.end).toFormat('D MMM, HH:mm')}`\n }\n placement=\"top-start\"\n >\n <ListItemText\n primary={\n <Typography className={classes.listItemPrimary}>\n {ilertApi.getUserInitials(onCall.user)}\n </Typography>\n }\n secondary={escalationText}\n />\n </Tooltip>\n ) : (\n <ListItemText\n primary={\n <Typography className={classes.listItemPrimary}>\n {ilertApi.getUserInitials(onCall.user)}\n </Typography>\n }\n secondary={escalationText}\n />\n )}\n <ListItemSecondaryAction>\n {phoneNumber ? (\n <Tooltip title=\"Call to user\" placement=\"top\">\n <IconButton href={`tel:${phoneNumber}`}>\n <PhoneIcon color=\"secondary\" />\n </IconButton>\n </Tooltip>\n ) : null}\n <Tooltip\n title={`Send e-mail to user ${onCall.user.email}`}\n placement=\"top\"\n >\n <IconButton href={`mailto:${onCall.user.email}`}>\n <EmailIcon color=\"primary\" />\n </IconButton>\n </Tooltip>\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport Typography from '@material-ui/core/Typography';\nimport ReplayIcon from '@material-ui/icons/Replay';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { AlertSource } from '../../types';\nimport { useAlertSourceOnCalls } from '../../hooks/useAlertSourceOnCalls';\nimport { ILertCardOnCallEmptyState } from './ILertCardOnCallEmptyState';\nimport { ILertCardOnCallItem } from './ILertCardOnCallItem';\nimport { Progress } from '@backstage/core-components';\n\nconst useStyles = makeStyles(theme => ({\n repeatText: {\n fontStyle: 'italic',\n },\n repeatIcon: {\n marginLeft: theme.spacing(1),\n },\n}));\n\nexport const ILertCardOnCall = ({\n alertSource,\n}: {\n alertSource: AlertSource | null;\n}) => {\n const classes = useStyles();\n const [{ onCalls, isLoading }, {}] = useAlertSourceOnCalls(alertSource);\n\n if (isLoading) {\n return <Progress />;\n }\n\n if (!alertSource || !onCalls) {\n return null;\n }\n\n const repeatInfo = () => {\n if (\n !alertSource ||\n !alertSource.escalationPolicy ||\n !alertSource.escalationPolicy.repeating ||\n !alertSource.escalationPolicy.frequency\n ) {\n return null;\n }\n\n return (\n <ListItem key=\"repeat\">\n <ListItemIcon>\n <ReplayIcon className={classes.repeatIcon} fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n className={classes.repeatText}\n >\n {`Repeat ${alertSource.escalationPolicy.frequency} times`}\n </Typography>\n }\n />\n </ListItem>\n );\n };\n\n if (!onCalls.length) {\n return (\n <List dense subheader={<ListSubheader>ON CALL</ListSubheader>}>\n <ILertCardOnCallEmptyState />\n </List>\n );\n }\n\n if (onCalls.length === 1) {\n <List dense subheader={<ListSubheader>ON CALL</ListSubheader>}>\n <ILertCardOnCallItem\n onCall={onCalls[0]}\n fistItem={false}\n lastItem={false}\n />\n </List>;\n }\n\n return (\n <List dense subheader={<ListSubheader>ON CALL</ListSubheader>}>\n {onCalls.map((onCall, index) => (\n <ILertCardOnCallItem\n key={index}\n onCall={onCall}\n fistItem={index === 0}\n lastItem={index === onCalls.length - 1}\n />\n ))}\n {repeatInfo()}\n </List>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Entity } from '@backstage/catalog-model';\nimport { ResponseErrorPanel } from '@backstage/core-components';\nimport { AuthenticationError } from '@backstage/errors';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport { ILERT_INTEGRATION_KEY_ANNOTATION } from '../../constants';\nimport { useILertEntity } from '../../hooks';\nimport { useAlerts } from '../../hooks/useAlerts';\nimport { useAlertSource } from '../../hooks/useAlertSource';\nimport { AlertNewModal } from '../Alert/AlertNewModal';\nimport { AlertsTable } from '../AlertsPage';\nimport { MissingAuthorizationHeaderError } from '../Errors';\nimport { ILertCardActionsHeader } from './ILertCardActionsHeader';\nimport { ILertCardEmptyState } from './ILertCardEmptyState';\nimport { ILertCardHeaderStatus } from './ILertCardHeaderStatus';\nimport { ILertCardMaintenanceModal } from './ILertCardMaintenanceModal';\nimport { ILertCardOnCall } from './ILertCardOnCall';\n\n/** @public */\nexport const isPluginApplicableToEntity = (entity: Entity) =>\n Boolean(entity.metadata.annotations?.[ILERT_INTEGRATION_KEY_ANNOTATION]);\n\nconst useStyles = makeStyles({\n content: {\n paddingLeft: '0 !important',\n paddingRight: '0 !important',\n paddingBottom: '0 !important',\n paddingTop: '0 !important',\n '& div div': {\n boxShadow: 'none !important',\n },\n },\n});\n\n/** @public */\nexport const ILertCard = () => {\n const classes = useStyles();\n const { integrationKey, name } = useILertEntity();\n const [{ alertSource }, { setAlertSource, refetchAlertSource }] =\n useAlertSource(integrationKey);\n const [\n { tableState, states, alerts, alertsCount, isLoading, error },\n {\n onAlertStatesChange,\n onChangePage,\n onChangeRowsPerPage,\n onAlertChanged,\n refetchAlerts,\n setIsLoading,\n },\n ] = useAlerts(false, true, alertSource);\n\n const [isNewAlertModalOpened, setIsNewAlertModalOpened] =\n React.useState(false);\n const [isMaintenanceModalOpened, setIsMaintenanceModalOpened] =\n React.useState(false);\n\n if (error) {\n if (error instanceof AuthenticationError) {\n return <MissingAuthorizationHeaderError />;\n }\n\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!integrationKey) {\n return <ILertCardEmptyState />;\n }\n\n return (\n <>\n <Card data-testid=\"ilert-card\">\n <CardHeader\n title=\"iLert\"\n subheader={\n <ILertCardActionsHeader\n alertSource={alertSource}\n setAlertSource={setAlertSource}\n setIsNewAlertModalOpened={setIsNewAlertModalOpened}\n setIsMaintenanceModalOpened={setIsMaintenanceModalOpened}\n />\n }\n action={<ILertCardHeaderStatus alertSource={alertSource} />}\n />\n <Divider />\n <CardContent className={classes.content}>\n <ILertCardOnCall alertSource={alertSource} />\n <AlertsTable\n alerts={alerts}\n alertsCount={alertsCount}\n tableState={tableState}\n states={states}\n onAlertChanged={onAlertChanged}\n onAlertStatesChange={onAlertStatesChange}\n onChangePage={onChangePage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n isLoading={isLoading}\n setIsLoading={setIsLoading}\n compact\n />\n </CardContent>\n </Card>\n <AlertNewModal\n isModalOpened={isNewAlertModalOpened}\n setIsModalOpened={setIsNewAlertModalOpened}\n refetchAlerts={refetchAlerts}\n initialAlertSource={alertSource}\n entityName={name}\n />\n <ILertCardMaintenanceModal\n alertSource={alertSource}\n refetchAlertSource={refetchAlertSource}\n isModalOpened={isMaintenanceModalOpened}\n setIsModalOpened={setIsMaintenanceModalOpened}\n />\n </>\n );\n};\n","/*\n * Copyright 2022 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 React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\nimport { IconComponent } from '@backstage/core-plugin-api';\n\n/**\n * @public\n */\nexport const ILertIcon: IconComponent = () => (\n <SvgIcon>\n <g>\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 0 9.277344 L 0 18.574219 C 0 20.832031 1.847656 22.679688 4.105469 22.679688 L 12.582031 22.679688 C 6.21875 21.007812 1.277344 15.792969 0 9.277344 Z M 0 9.277344\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 19.527344 22.5625 C 21.328125 22.128906 22.679688 20.503906 22.679688 18.574219 L 22.679688 16.273438 C 21.691406 16.820312 20.632812 17.222656 19.527344 17.46875 Z M 19.527344 22.5625\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 14.417969 17.46875 C 9.136719 16.296875 5.171875 11.578125 5.171875 5.945312 C 5.167969 3.855469 5.726562 1.804688 6.785156 0 L 4.105469 0 C 1.847656 0 0 1.847656 0 4.105469 L 0 6.882812 C 0.433594 14.816406 6.335938 21.316406 13.992188 22.679688 L 14.421875 22.679688 Z M 14.417969 17.46875\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 19.527344 12.375 L 19.527344 17.160156 C 20.632812 16.910156 21.695312 16.496094 22.679688 15.929688 L 22.679688 9.855469 C 21.902344 10.988281 20.804688 11.863281 19.527344 12.375 Z M 19.527344 12.375\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 14.417969 17.160156 L 14.417969 12.375 C 11.863281 11.355469 10.054688 8.859375 10.054688 5.945312 C 10.054688 3.503906 11.34375 1.246094 13.441406 0 L 7.128906 0 C 6.039062 1.792969 5.464844 3.847656 5.46875 5.945312 C 5.46875 11.410156 9.300781 15.996094 14.417969 17.160156 Z M 14.417969 17.160156\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 10.355469 5.945312 C 10.355469 8.613281 11.957031 11.019531 14.417969 12.050781 L 14.417969 9.917969 C 15.972656 10.925781 17.972656 10.925781 19.527344 9.917969 L 19.527344 12.050781 C 20.847656 11.496094 21.953125 10.53125 22.679688 9.300781 L 22.679688 4.105469 C 22.679688 1.847656 20.832031 0 18.574219 0 L 14.066406 0 C 11.796875 1.113281 10.355469 3.417969 10.355469 5.945312 Z M 16.972656 2.5625 C 18.84375 2.5625 20.355469 4.078125 20.355469 5.945312 C 20.355469 7.8125 18.84375 9.328125 16.972656 9.328125 C 15.105469 9.328125 13.589844 7.8125 13.589844 5.945312 C 13.59375 4.078125 15.105469 2.566406 16.972656 2.5625 Z M 16.972656 2.5625\"\n />\n </g>\n </SvgIcon>\n);\n"],"names":["dt","ILertPage","useStyles","MUIAlert","StatusChip","OperationalChip","UnderMaintenanceChip","DegradedChip","PartialOutageChip","MajorOutageChip"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|