@pagerduty/backstage-plugin-entity-processor 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,8 +9,10 @@ var fetch__default = /*#__PURE__*/_interopDefaultCompat(fetch);
9
9
  class PagerDutyClient {
10
10
  discovery;
11
11
  logger;
12
+ auth;
12
13
  baseUrl = "";
13
- constructor({ discovery, logger }) {
14
+ constructor({ auth, discovery, logger }) {
15
+ this.auth = auth;
14
16
  this.discovery = discovery;
15
17
  this.logger = logger;
16
18
  }
@@ -23,7 +25,8 @@ class PagerDutyClient {
23
25
  method: "POST",
24
26
  headers: {
25
27
  "Content-Type": "application/json; charset=UTF-8",
26
- Accept: "application/json, text/plain, */*"
28
+ Accept: "application/json, text/plain, */*",
29
+ Authorization: await this.generatePluginToPluginToken()
27
30
  },
28
31
  body: JSON.stringify(relations)
29
32
  };
@@ -54,7 +57,8 @@ class PagerDutyClient {
54
57
  method: "DELETE",
55
58
  headers: {
56
59
  "Content-Type": "application/json; charset=UTF-8",
57
- Accept: "application/json, text/plain, */*"
60
+ Accept: "application/json, text/plain, */*",
61
+ Authorization: await this.generatePluginToPluginToken()
58
62
  },
59
63
  body: JSON.stringify(relations)
60
64
  };
@@ -93,7 +97,8 @@ class PagerDutyClient {
93
97
  method: "GET",
94
98
  headers: {
95
99
  "Content-Type": "application/json; charset=UTF-8",
96
- Accept: "application/json, text/plain, */*"
100
+ Accept: "application/json, text/plain, */*",
101
+ Authorization: await this.generatePluginToPluginToken()
97
102
  }
98
103
  };
99
104
  const url = `${await this.discovery.getBaseUrl(
@@ -136,7 +141,8 @@ class PagerDutyClient {
136
141
  method: "GET",
137
142
  headers: {
138
143
  "Content-Type": "application/json; charset=UTF-8",
139
- Accept: "application/json, text/plain, */*"
144
+ Accept: "application/json, text/plain, */*",
145
+ Authorization: await this.generatePluginToPluginToken()
140
146
  }
141
147
  };
142
148
  const url = `${await this.discovery.getBaseUrl(
@@ -186,7 +192,8 @@ class PagerDutyClient {
186
192
  method: "GET",
187
193
  headers: {
188
194
  "Content-Type": "application/json; charset=UTF-8",
189
- Accept: "application/json, text/plain, */*"
195
+ Accept: "application/json, text/plain, */*",
196
+ Authorization: await this.generatePluginToPluginToken()
190
197
  }
191
198
  };
192
199
  const url = `${await this.discovery.getBaseUrl(
@@ -236,7 +243,8 @@ class PagerDutyClient {
236
243
  method: "POST",
237
244
  headers: {
238
245
  "Content-Type": "application/json; charset=UTF-8",
239
- Accept: "application/json, text/plain, */*"
246
+ Accept: "application/json, text/plain, */*",
247
+ Authorization: await this.generatePluginToPluginToken()
240
248
  },
241
249
  body: JSON.stringify(mapping)
242
250
  };
@@ -271,7 +279,8 @@ class PagerDutyClient {
271
279
  method: "GET",
272
280
  headers: {
273
281
  "Content-Type": "application/json; charset=UTF-8",
274
- Accept: "application/json, text/plain, */*"
282
+ Accept: "application/json, text/plain, */*",
283
+ Authorization: await this.generatePluginToPluginToken()
275
284
  }
276
285
  };
277
286
  let url = `${await this.discovery.getBaseUrl(
@@ -312,7 +321,8 @@ class PagerDutyClient {
312
321
  method: "GET",
313
322
  headers: {
314
323
  "Content-Type": "application/json; charset=UTF-8",
315
- Accept: "application/json, text/plain, */*"
324
+ Accept: "application/json, text/plain, */*",
325
+ Authorization: await this.generatePluginToPluginToken()
316
326
  }
317
327
  };
318
328
  const [type, rest] = entityRef.split(":");
@@ -354,7 +364,8 @@ class PagerDutyClient {
354
364
  method: "GET",
355
365
  headers: {
356
366
  "Content-Type": "application/json; charset=UTF-8",
357
- Accept: "application/json, text/plain, */*"
367
+ Accept: "application/json, text/plain, */*",
368
+ Authorization: await this.generatePluginToPluginToken()
358
369
  }
359
370
  };
360
371
  let url = `${await this.discovery.getBaseUrl(
@@ -397,7 +408,8 @@ class PagerDutyClient {
397
408
  method: "GET",
398
409
  headers: {
399
410
  "Content-Type": "application/json; charset=UTF-8",
400
- Accept: "application/json, text/plain, */*"
411
+ Accept: "application/json, text/plain, */*",
412
+ Authorization: await this.generatePluginToPluginToken()
401
413
  }
402
414
  };
403
415
  let url = `${await this.discovery.getBaseUrl(
@@ -447,7 +459,8 @@ class PagerDutyClient {
447
459
  method: "GET",
448
460
  headers: {
449
461
  "Content-Type": "application/json; charset=UTF-8",
450
- Accept: "application/json, text/plain, */*"
462
+ Accept: "application/json, text/plain, */*",
463
+ Authorization: await this.generatePluginToPluginToken()
451
464
  }
452
465
  };
453
466
  const url = `${await this.discovery.getBaseUrl(
@@ -475,6 +488,14 @@ class PagerDutyClient {
475
488
  throw new Error(`Error getting value for setting: ${error}`);
476
489
  }
477
490
  }
491
+ async generatePluginToPluginToken() {
492
+ this.logger.debug("Generating plugin to plugin token for pagerduty");
493
+ const { token } = await this.auth.getPluginRequestToken({
494
+ onBehalfOf: await this.auth.getOwnServiceCredentials(),
495
+ targetPluginId: "pagerduty"
496
+ });
497
+ return `Bearer ${token}`;
498
+ }
478
499
  }
479
500
  async function fetchWithRetries(url, options) {
480
501
  let response;
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs.js","sources":["../../src/apis/client.ts"],"sourcesContent":["import fetch from 'node-fetch';\nimport type { RequestInit, Response } from 'node-fetch';\nimport type { EntityMapping } from '../types';\nimport { DiscoveryService, LoggerService } from '@backstage/backend-plugin-api';\nimport {\n PagerDutyEntityMapping,\n PagerDutyEntityMappingResponse,\n PagerDutyServiceResponse,\n PagerDutyServiceDependency,\n PagerDutyServiceDependencyResponse,\n PagerDutySetting,\n PagerDutyEntityMappingsResponse,\n} from '@pagerduty/backstage-plugin-common';\n\nexport interface PagerDutyClientOptions {\n discovery: DiscoveryService;\n logger: LoggerService;\n}\n\nexport type BackstageEntityRef = {\n type: string;\n namespace: string;\n name: string;\n};\n\nexport class PagerDutyClient {\n private discovery: DiscoveryService;\n private logger: LoggerService;\n private baseUrl: string = '';\n\n constructor({ discovery, logger }: PagerDutyClientOptions) {\n this.discovery = discovery;\n this.logger = logger;\n }\n\n async addServiceRelationToService(\n serviceId: string,\n relations: string[],\n ): Promise<void> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n body: JSON.stringify(relations),\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/dependencies/service/${serviceId}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to add service relation to service ${serviceId}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n } catch (error) {\n this.logger.error(`Failed to add dependencies: ${error}`);\n throw new Error(`Failed to add dependencies: ${error}`);\n }\n }\n\n async removeServiceRelationFromService(\n serviceId: string,\n relations: string[],\n ): Promise<void> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n body: JSON.stringify(relations),\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/dependencies/service/${serviceId}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to remove service relation from service ${serviceId}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n if (response.status === 404) {\n throw new Error(`Service ${serviceId} or dependencies not found.`);\n }\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n } catch (error) {\n this.logger.error(\n `Failed to remove dependencies from ${serviceId}: ${error}`,\n );\n throw new Error(\n `Failed to remove dependencies from ${serviceId}: ${error}`,\n );\n }\n }\n\n async getAllServiceMappings(): Promise<Record<string, string>> {\n let response: Response;\n const mappings: Record<string, string> = {};\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get all service mappings. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundMappings: PagerDutyEntityMappingsResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return mappings;\n default: // 200\n foundMappings.mappings.forEach(mapping => {\n mappings[mapping.serviceId] = mapping.entityRef;\n });\n\n return mappings;\n }\n } catch (error) {\n this.logger.error(`Failed to retrieve mappings: ${error}`);\n throw new Error(`Failed to retrieve mappings: ${error}`);\n }\n }\n\n async findServiceMapping({\n type,\n namespace,\n name,\n }: BackstageEntityRef): Promise<EntityMapping | undefined> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity/${type}/${namespace}/${name}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to find service mapping. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundMapping: PagerDutyEntityMappingResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return undefined;\n default: // 200\n this.logger.debug(\n `Found mapping for ${type}:${namespace}/${name}: ${JSON.stringify(\n foundMapping.mapping,\n )}`,\n );\n\n return {\n serviceId: foundMapping.mapping.serviceId,\n integrationKey: foundMapping.mapping.integrationKey,\n entityRef: foundMapping.mapping.entityRef,\n account: foundMapping.mapping.account,\n };\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`,\n );\n }\n }\n\n async findServiceMappingById(\n serviceId: string,\n ): Promise<EntityMapping | undefined> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity/service/${serviceId}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to find service mapping by id. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundMapping: PagerDutyEntityMappingResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return undefined;\n default: // 200\n this.logger.debug(\n `Found mapping for serviceId ${serviceId}: ${JSON.stringify(\n foundMapping.mapping,\n )}`,\n );\n\n return {\n serviceId: foundMapping.mapping.serviceId,\n integrationKey: foundMapping.mapping.integrationKey,\n entityRef: foundMapping.mapping.entityRef,\n account: foundMapping.mapping.account,\n };\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve mapping for serviceId ${serviceId}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve mapping for serviceId ${serviceId}: ${error}`,\n );\n }\n }\n\n async insertServiceMapping(mapping: PagerDutyEntityMapping): Promise<void> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n body: JSON.stringify(mapping),\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to add service mapping. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n } catch (error) {\n this.logger.error(\n `Failed to add mapping for ${mapping.entityRef}: ${error}`,\n );\n throw new Error(\n `Failed to add mapping for ${mapping.entityRef}: ${error}`,\n );\n }\n }\n\n async getServiceDependencies(\n serviceId: string,\n account?: string,\n ): Promise<PagerDutyServiceDependency[]> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n let url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/dependencies/service/${serviceId}`;\n\n if (account) {\n url = url.concat(`?account=${account}`);\n }\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service depedencies. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundDependencies: PagerDutyServiceDependencyResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return [];\n default: // 200\n return foundDependencies.relationships;\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve mapping for ${serviceId}: ${error}`,\n );\n throw new Error(`Failed to retrieve mapping for ${serviceId}: ${error}`);\n }\n }\n\n async getServiceIdAnnotationFromCatalog(entityRef: string): Promise<string> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n // extract type, namespace and name from type:namespace/name\n const [type, rest] = entityRef.split(':');\n const [namespace, name] = rest.split('/');\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/catalog/entity/${type}/${namespace}/${name}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service id annotation from catalog. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundServiceId: string = await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return '';\n default: // 200\n return foundServiceId;\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve a PagerDuty service id for ${entityRef}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve a PagerDuty service id for ${entityRef}: ${error}`,\n );\n }\n }\n\n async getServiceIdFromIntegrationKey(\n integrationKey: string,\n account?: string,\n ): Promise<string> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n let url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/services?integration_key=${integrationKey}`;\n\n if (account) {\n url = url.concat(`&account=${account}`);\n }\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service id from integration key ${integrationKey}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundService: PagerDutyServiceResponse = await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return '';\n default: // 200\n return foundService.service.id;\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve a PagerDuty service id for integration key ${integrationKey}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve a PagerDuty service id for integration key ${integrationKey}: ${error}`,\n );\n }\n }\n\n async getIntegrationKeyFromServiceId(\n serviceId: string,\n account?: string,\n ): Promise<string | undefined> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n let url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}`;\n\n if (account) {\n url = url.concat(`?account=${account}`);\n }\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get integration key from service id ${serviceId}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundService: PagerDutyServiceResponse = await response.json();\n const backstageIntegration = foundService.service.integrations?.find(\n integration => integration.vendor?.id === 'PRO19CT',\n );\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return '';\n default: // 200\n if (!backstageIntegration) {\n return undefined;\n }\n\n return backstageIntegration.integration_key;\n }\n } catch (error) {\n this.logger.error(\n `No Backstage integration found for service id ${serviceId}: ${error}`,\n );\n throw new Error(\n `No Backstage integration found for service id ${serviceId}: ${error}`,\n );\n }\n }\n\n async getServiceDependencyStrategySetting(): Promise<string> {\n const SERVICE_DEPENDENCY_SYNC_STRATEGY =\n 'settings::service-dependency-sync-strategy';\n\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/settings/${SERVICE_DEPENDENCY_SYNC_STRATEGY}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service depedency strategy. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const setting: PagerDutySetting = await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return 'disabled'; // if setting does not exist in the database, default to disabled\n default: // 200\n return setting.value;\n }\n } catch (error) {\n this.logger.error(`Error getting value for setting: ${error}`);\n throw new Error(`Error getting value for setting: ${error}`);\n }\n }\n}\n\nexport async function fetchWithRetries(\n url: string,\n options: RequestInit,\n): Promise<Response> {\n let response: Response;\n let error: Error = new Error();\n\n // set retry parameters\n const maxRetries = 5;\n const delay = 1000;\n let factor = 2;\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n response = await fetch(url, options);\n return response;\n } catch (e) {\n error = e as Error;\n }\n\n const timeout = delay * factor;\n await new Promise(resolve => setTimeout(resolve, timeout));\n factor *= 2;\n }\n\n throw new Error(\n `Failed to fetch data after ${maxRetries} retries. Last error: ${error}`,\n );\n}\n"],"names":["fetch"],"mappings":"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"}
1
+ {"version":3,"file":"client.cjs.js","sources":["../../src/apis/client.ts"],"sourcesContent":["import fetch from 'node-fetch';\nimport type { RequestInit, Response } from 'node-fetch';\nimport type { EntityMapping } from '../types';\nimport { AuthService, DiscoveryService, LoggerService } from '@backstage/backend-plugin-api';\nimport {\n PagerDutyEntityMapping,\n PagerDutyEntityMappingResponse,\n PagerDutyServiceResponse,\n PagerDutyServiceDependency,\n PagerDutyServiceDependencyResponse,\n PagerDutySetting,\n PagerDutyEntityMappingsResponse,\n} from '@pagerduty/backstage-plugin-common';\n\nexport interface PagerDutyClientOptions {\n auth: AuthService;\n discovery: DiscoveryService;\n logger: LoggerService;\n}\n\nexport type BackstageEntityRef = {\n type: string;\n namespace: string;\n name: string;\n};\n\nexport class PagerDutyClient {\n private discovery: DiscoveryService;\n private logger: LoggerService;\n private auth: AuthService;\n private baseUrl: string = '';\n\n constructor({ auth, discovery, logger }: PagerDutyClientOptions) {\n this.auth = auth;\n this.discovery = discovery;\n this.logger = logger;\n }\n\n async addServiceRelationToService(\n serviceId: string,\n relations: string[],\n ): Promise<void> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n body: JSON.stringify(relations),\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/dependencies/service/${serviceId}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to add service relation to service ${serviceId}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n } catch (error) {\n this.logger.error(`Failed to add dependencies: ${error}`);\n throw new Error(`Failed to add dependencies: ${error}`);\n }\n }\n\n async removeServiceRelationFromService(\n serviceId: string,\n relations: string[],\n ): Promise<void> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n body: JSON.stringify(relations),\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/dependencies/service/${serviceId}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to remove service relation from service ${serviceId}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n if (response.status === 404) {\n throw new Error(`Service ${serviceId} or dependencies not found.`);\n }\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n } catch (error) {\n this.logger.error(\n `Failed to remove dependencies from ${serviceId}: ${error}`,\n );\n throw new Error(\n `Failed to remove dependencies from ${serviceId}: ${error}`,\n );\n }\n }\n\n async getAllServiceMappings(): Promise<Record<string, string>> {\n let response: Response;\n const mappings: Record<string, string> = {};\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get all service mappings. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundMappings: PagerDutyEntityMappingsResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return mappings;\n default: // 200\n foundMappings.mappings.forEach(mapping => {\n mappings[mapping.serviceId] = mapping.entityRef;\n });\n\n return mappings;\n }\n } catch (error) {\n this.logger.error(`Failed to retrieve mappings: ${error}`);\n throw new Error(`Failed to retrieve mappings: ${error}`);\n }\n }\n\n async findServiceMapping({\n type,\n namespace,\n name,\n }: BackstageEntityRef): Promise<EntityMapping | undefined> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity/${type}/${namespace}/${name}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to find service mapping. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundMapping: PagerDutyEntityMappingResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return undefined;\n default: // 200\n this.logger.debug(\n `Found mapping for ${type}:${namespace}/${name}: ${JSON.stringify(\n foundMapping.mapping,\n )}`,\n );\n\n return {\n serviceId: foundMapping.mapping.serviceId,\n integrationKey: foundMapping.mapping.integrationKey,\n entityRef: foundMapping.mapping.entityRef,\n account: foundMapping.mapping.account,\n };\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`,\n );\n }\n }\n\n async findServiceMappingById(\n serviceId: string,\n ): Promise<EntityMapping | undefined> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity/service/${serviceId}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to find service mapping by id. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundMapping: PagerDutyEntityMappingResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return undefined;\n default: // 200\n this.logger.debug(\n `Found mapping for serviceId ${serviceId}: ${JSON.stringify(\n foundMapping.mapping,\n )}`,\n );\n\n return {\n serviceId: foundMapping.mapping.serviceId,\n integrationKey: foundMapping.mapping.integrationKey,\n entityRef: foundMapping.mapping.entityRef,\n account: foundMapping.mapping.account,\n };\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve mapping for serviceId ${serviceId}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve mapping for serviceId ${serviceId}: ${error}`,\n );\n }\n }\n\n async insertServiceMapping(mapping: PagerDutyEntityMapping): Promise<void> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n body: JSON.stringify(mapping),\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/mapping/entity`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to add service mapping. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n } catch (error) {\n this.logger.error(\n `Failed to add mapping for ${mapping.entityRef}: ${error}`,\n );\n throw new Error(\n `Failed to add mapping for ${mapping.entityRef}: ${error}`,\n );\n }\n }\n\n async getServiceDependencies(\n serviceId: string,\n account?: string,\n ): Promise<PagerDutyServiceDependency[]> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n let url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/dependencies/service/${serviceId}`;\n\n if (account) {\n url = url.concat(`?account=${account}`);\n }\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service depedencies. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundDependencies: PagerDutyServiceDependencyResponse =\n await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return [];\n default: // 200\n return foundDependencies.relationships;\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve mapping for ${serviceId}: ${error}`,\n );\n throw new Error(`Failed to retrieve mapping for ${serviceId}: ${error}`);\n }\n }\n\n async getServiceIdAnnotationFromCatalog(entityRef: string): Promise<string> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n // extract type, namespace and name from type:namespace/name\n const [type, rest] = entityRef.split(':');\n const [namespace, name] = rest.split('/');\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/catalog/entity/${type}/${namespace}/${name}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service id annotation from catalog. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundServiceId: string = await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return '';\n default: // 200\n return foundServiceId;\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve a PagerDuty service id for ${entityRef}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve a PagerDuty service id for ${entityRef}: ${error}`,\n );\n }\n }\n\n async getServiceIdFromIntegrationKey(\n integrationKey: string,\n account?: string,\n ): Promise<string> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n let url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/services?integration_key=${integrationKey}`;\n\n if (account) {\n url = url.concat(`&account=${account}`);\n }\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service id from integration key ${integrationKey}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundService: PagerDutyServiceResponse = await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return '';\n default: // 200\n return foundService.service.id;\n }\n } catch (error) {\n this.logger.error(\n `Failed to retrieve a PagerDuty service id for integration key ${integrationKey}: ${error}`,\n );\n throw new Error(\n `Failed to retrieve a PagerDuty service id for integration key ${integrationKey}: ${error}`,\n );\n }\n }\n\n async getIntegrationKeyFromServiceId(\n serviceId: string,\n account?: string,\n ): Promise<string | undefined> {\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n let url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/services/${serviceId}`;\n\n if (account) {\n url = url.concat(`?account=${account}`);\n }\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get integration key from service id ${serviceId}. PagerDuty API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const foundService: PagerDutyServiceResponse = await response.json();\n const backstageIntegration = foundService.service.integrations?.find(\n integration => integration.vendor?.id === 'PRO19CT',\n );\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return '';\n default: // 200\n if (!backstageIntegration) {\n return undefined;\n }\n\n return backstageIntegration.integration_key;\n }\n } catch (error) {\n this.logger.error(\n `No Backstage integration found for service id ${serviceId}: ${error}`,\n );\n throw new Error(\n `No Backstage integration found for service id ${serviceId}: ${error}`,\n );\n }\n }\n\n async getServiceDependencyStrategySetting(): Promise<string> {\n const SERVICE_DEPENDENCY_SYNC_STRATEGY =\n 'settings::service-dependency-sync-strategy';\n\n let response: Response;\n\n if (this.baseUrl === '') {\n this.baseUrl = await this.discovery.getBaseUrl('pagerduty');\n }\n\n const options: RequestInit = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8',\n Accept: 'application/json, text/plain, */*',\n Authorization: await this.generatePluginToPluginToken(),\n },\n };\n\n const url = `${await this.discovery.getBaseUrl(\n 'pagerduty',\n )}/settings/${SERVICE_DEPENDENCY_SYNC_STRATEGY}`;\n\n try {\n response = await fetchWithRetries(url, options);\n\n if (response.status >= 500) {\n throw new Error(\n `Failed to get service depedency strategy. API returned a server error. Retrying with the same arguments will not work.`,\n );\n }\n\n const setting: PagerDutySetting = await response.json();\n\n switch (response.status) {\n case 400:\n throw new Error(await response.text());\n case 404:\n return 'disabled'; // if setting does not exist in the database, default to disabled\n default: // 200\n return setting.value;\n }\n } catch (error) {\n this.logger.error(`Error getting value for setting: ${error}`);\n throw new Error(`Error getting value for setting: ${error}`);\n }\n }\n\n private async generatePluginToPluginToken(): Promise<string> {\n this.logger.debug('Generating plugin to plugin token for pagerduty')\n\n const { token } = await this.auth.getPluginRequestToken({\n onBehalfOf: await this.auth.getOwnServiceCredentials(),\n targetPluginId: 'pagerduty',\n });\n\n return `Bearer ${token}`;\n }\n}\n\nexport async function fetchWithRetries(\n url: string,\n options: RequestInit,\n): Promise<Response> {\n let response: Response;\n let error: Error = new Error();\n\n // set retry parameters\n const maxRetries = 5;\n const delay = 1000;\n let factor = 2;\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n response = await fetch(url, options);\n return response;\n } catch (e) {\n error = e as Error;\n }\n\n const timeout = delay * factor;\n await new Promise(resolve => setTimeout(resolve, timeout));\n factor *= 2;\n }\n\n throw new Error(\n `Failed to fetch data after ${maxRetries} retries. Last error: ${error}`,\n );\n}\n"],"names":["fetch"],"mappings":"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"}
@@ -12,11 +12,12 @@ const pagerDutyEntityProcessor = backendPluginApi.createBackendModule({
12
12
  deps: {
13
13
  logger: backendPluginApi.coreServices.logger,
14
14
  catalog: alpha.catalogProcessingExtensionPoint,
15
- discovery: backendPluginApi.coreServices.discovery
15
+ discovery: backendPluginApi.coreServices.discovery,
16
+ auth: backendPluginApi.coreServices.auth
16
17
  },
17
- async init({ logger, discovery, catalog }) {
18
+ async init({ auth, logger, discovery, catalog }) {
18
19
  catalog.addProcessor(
19
- new PagerDutyEntityProcessor.PagerDutyEntityProcessor({ logger, discovery })
20
+ new PagerDutyEntityProcessor.PagerDutyEntityProcessor({ auth, logger, discovery })
20
21
  );
21
22
  }
22
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"module.cjs.js","sources":["../src/module.ts"],"sourcesContent":["import {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\nimport { PagerDutyEntityProcessor } from './processor';\n\n/** @public */\nexport const pagerDutyEntityProcessor = createBackendModule({\n pluginId: 'catalog',\n moduleId: 'pagerduty-entity-processor',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n catalog: catalogProcessingExtensionPoint,\n discovery: coreServices.discovery,\n },\n async init({ logger, discovery, catalog }) {\n catalog.addProcessor(\n new PagerDutyEntityProcessor({ logger, discovery }),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","coreServices","catalogProcessingExtensionPoint","PagerDutyEntityProcessor"],"mappings":";;;;;;AAQO,MAAM,2BAA2BA,oCAAA,CAAoB;AAAA,EAC1D,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,4BAAA;AAAA,EACV,SAAS,GAAA,EAAK;AACZ,IAAA,GAAA,CAAI,YAAA,CAAa;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,QAAQC,6BAAA,CAAa,MAAA;AAAA,QACrB,OAAA,EAASC,qCAAA;AAAA,QACT,WAAWD,6BAAA,CAAa;AAAA,OAC1B;AAAA,MACA,MAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,SAAA,EAAW,SAAQ,EAAG;AACzC,QAAA,OAAA,CAAQ,YAAA;AAAA,UACN,IAAIE,iDAAA,CAAyB,EAAE,MAAA,EAAQ,WAAW;AAAA,SACpD;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"module.cjs.js","sources":["../src/module.ts"],"sourcesContent":["import {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\nimport { PagerDutyEntityProcessor } from './processor';\n\n/** @public */\nexport const pagerDutyEntityProcessor = createBackendModule({\n pluginId: 'catalog',\n moduleId: 'pagerduty-entity-processor',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n catalog: catalogProcessingExtensionPoint,\n discovery: coreServices.discovery,\n auth: coreServices.auth,\n },\n async init({ auth, logger, discovery, catalog }) {\n catalog.addProcessor(\n new PagerDutyEntityProcessor({ auth, logger, discovery }),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","coreServices","catalogProcessingExtensionPoint","PagerDutyEntityProcessor"],"mappings":";;;;;;AAQO,MAAM,2BAA2BA,oCAAA,CAAoB;AAAA,EAC1D,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,4BAAA;AAAA,EACV,SAAS,GAAA,EAAK;AACZ,IAAA,GAAA,CAAI,YAAA,CAAa;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,QAAQC,6BAAA,CAAa,MAAA;AAAA,QACrB,OAAA,EAASC,qCAAA;AAAA,QACT,WAAWD,6BAAA,CAAa,SAAA;AAAA,QACxB,MAAMA,6BAAA,CAAa;AAAA,OACrB;AAAA,MACA,MAAM,IAAA,CAAK,EAAE,MAAM,MAAA,EAAQ,SAAA,EAAW,SAAQ,EAAG;AAC/C,QAAA,OAAA,CAAQ,YAAA;AAAA,UACN,IAAIE,iDAAA,CAAyB,EAAE,IAAA,EAAM,MAAA,EAAQ,WAAW;AAAA,SAC1D;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;;;;"}
@@ -8,13 +8,16 @@ let client;
8
8
  class PagerDutyEntityProcessor {
9
9
  logger;
10
10
  discovery;
11
+ auth;
11
12
  shouldProcessEntity = (entity) => {
12
13
  return entity.kind === "Component";
13
14
  };
14
- constructor({ logger, discovery }) {
15
+ constructor({ auth, logger, discovery }) {
15
16
  this.logger = logger;
16
17
  this.discovery = discovery;
18
+ this.auth = auth;
17
19
  client = new client$1.PagerDutyClient({
20
+ auth: this.auth,
18
21
  discovery: this.discovery,
19
22
  logger: this.logger
20
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PagerDutyEntityProcessor.cjs.js","sources":["../../src/processor/PagerDutyEntityProcessor.ts"],"sourcesContent":["import { DiscoveryService, LoggerService } from '@backstage/backend-plugin-api';\nimport {\n Entity,\n RELATION_DEPENDS_ON,\n RELATION_DEPENDENCY_OF,\n} from '@backstage/catalog-model';\nimport {\n CatalogProcessor,\n CatalogProcessorEmit,\n processingResult,\n} from '@backstage/plugin-catalog-node';\nimport { LocationSpec } from '@backstage/plugin-catalog-common';\nimport { PagerDutyClient } from '../apis/client';\n\n/**\n * A function which given an entity, determines if it should be processed for linguist tags.\n * @public\n */\nexport type ShouldProcessEntity = (entity: Entity) => boolean;\n\nexport interface PagerDutyEntityProcessorOptions {\n logger: LoggerService;\n discovery: DiscoveryService;\n}\n\nlet client: PagerDutyClient;\n\nexport class PagerDutyEntityProcessor implements CatalogProcessor {\n private logger: LoggerService;\n private discovery: DiscoveryService;\n\n private shouldProcessEntity: ShouldProcessEntity = (entity: Entity) => {\n return entity.kind === 'Component';\n };\n\n constructor({ logger, discovery }: PagerDutyEntityProcessorOptions) {\n this.logger = logger;\n this.discovery = discovery;\n\n client = new PagerDutyClient({\n discovery: this.discovery,\n logger: this.logger,\n });\n }\n\n getProcessorName(): string {\n return 'PagerDutyEntityProcessor';\n }\n\n async preProcessEntity(entity: Entity): Promise<Entity> {\n if (this.shouldProcessEntity(entity)) {\n const strategySetting =\n await client.getServiceDependencyStrategySetting();\n\n if (strategySetting && strategySetting === 'pagerduty') {\n if (entity.spec?.dependsOn) {\n // empty the dependsOn array\n entity.spec.dependsOn = [];\n }\n }\n }\n\n return entity;\n }\n\n async postProcessEntity(\n entity: Entity,\n _location: LocationSpec,\n emit: CatalogProcessorEmit,\n ): Promise<Entity> {\n if (this.shouldProcessEntity(entity)) {\n try {\n // Process service mapping overrides\n // Find the service mapping for the entity in database\n const mapping = await client.findServiceMapping({\n type: entity.kind.toLowerCase(),\n namespace: entity.metadata.namespace!.toLowerCase(),\n name: entity.metadata.name.toLowerCase(),\n });\n\n // If mapping exists add the annotations to the entity\n if (mapping) {\n updateAnnotations(entity, {\n serviceId: mapping.serviceId,\n integrationKey: mapping.integrationKey,\n account: mapping.account,\n });\n\n this.logger.debug(\n `Added annotations to entity ${entity.metadata.name} with service id: ${mapping.serviceId}, integration key: ${mapping.integrationKey} and account: ${mapping.account}`,\n );\n } else {\n this.logger.debug(\n `No mapping found for entity: ${entity.metadata.name}. Adding annotations to the database.`,\n );\n\n // Add the mapping to the database based on entity annotations\n let serviceId =\n entity.metadata.annotations?.['pagerduty.com/service-id'];\n let integrationKey =\n entity.metadata.annotations?.['pagerduty.com/integration-key'];\n const account =\n entity.metadata.annotations?.['pagerduty.com/account'];\n\n // Build the entityRef string\n const entityRef = `${entity.kind.toLowerCase()}:${entity.metadata.namespace?.toLowerCase()}/${entity.metadata.name.toLowerCase()}`;\n\n if (serviceId) {\n // Check for mapping override by user\n const serviceMappingOverrideFound =\n await client.findServiceMappingById(serviceId);\n\n // If service mapping override is not found\n // insert the mapping into the database\n if (!serviceMappingOverrideFound) {\n // if integrationKey annotation does not exist\n // try to retrieve it from PagerDuty\n if (!integrationKey) {\n const foundIntegrationKey =\n await client.getIntegrationKeyFromServiceId(\n serviceId,\n account,\n );\n\n if (foundIntegrationKey) {\n integrationKey = foundIntegrationKey;\n }\n }\n\n // Insert the mapping into the database\n this.logger.debug(\n `Inserting mapping for entity: ${entityRef} with service id: ${serviceId}, integration key: ${integrationKey} and account: ${account}`,\n );\n await client.insertServiceMapping({\n entityRef,\n serviceId,\n integrationKey,\n account,\n });\n\n // Add the annotations to the entity\n updateAnnotations(entity, {\n serviceId,\n integrationKey,\n account,\n });\n } else {\n this.logger.debug(\n `Service mapping override found for service id: ${serviceId}.`,\n );\n updateAnnotations(entity, {}); // delete annotations because user unmapped the service\n }\n } else if (integrationKey) {\n serviceId = await client.getServiceIdFromIntegrationKey(\n integrationKey,\n account,\n );\n\n // Check for mapping override by user\n const serviceMappingOverrideFound =\n await client.findServiceMappingById(serviceId);\n\n // If service mapping override is not found\n // insert the mapping into the database\n if (!serviceMappingOverrideFound) {\n // Insert the mapping into the database\n this.logger.debug(\n `Inserting mapping for entity: ${entityRef} with new service id: ${serviceId}, integration key: ${integrationKey} and account: ${account}`,\n );\n await client.insertServiceMapping({\n entityRef,\n serviceId,\n integrationKey,\n account,\n });\n\n updateAnnotations(entity, {\n serviceId,\n integrationKey,\n account,\n });\n } else {\n this.logger.debug(\n `Service mapping override found for service id: ${serviceId}. Skipping adding to the database.`,\n );\n updateAnnotations(entity, {}); // delete annotations because user unmapped the service\n }\n }\n }\n\n // Process service dependencies\n // if (entity.spec?.dependsOn) {\n // Check if ServiceId exists get service dependencies from PagerDuty\n const serviceId =\n entity.metadata.annotations?.['pagerduty.com/service-id'];\n\n if (serviceId) {\n const strategySetting =\n await client.getServiceDependencyStrategySetting();\n\n if (strategySetting && strategySetting !== 'disabled') {\n // Check if service has dependencies configured\n let dependencyAnnotations: string[] = [];\n\n if (entity.spec?.dependsOn) {\n dependencyAnnotations = JSON.parse(\n JSON.stringify(entity.spec?.dependsOn),\n );\n }\n\n const mappings = await client.getAllServiceMappings();\n\n const entityDependencies: string[] =\n await buildExistingDependencies(dependencyAnnotations);\n\n // Get dependencies from PagerDuty for the service\n const account =\n entity.metadata.annotations?.['pagerduty.com/account'];\n const dependencies = await client.getServiceDependencies(\n serviceId,\n account,\n );\n const filteredDependencies = dependencies.filter(\n x => x.dependent_service.id === serviceId,\n );\n const dependencyIds = filteredDependencies.map(\n x => x.supporting_service.id,\n );\n\n // compare dependencies with existing dependencies defined on the entity\n const dependenciesMissingInBackstage = dependencyIds.filter(\n x => !entityDependencies.includes(x),\n );\n const dependenciesMissingInPagerDuty = entityDependencies.filter(\n x => !dependencyIds.includes(x),\n );\n\n switch (strategySetting) {\n case 'backstage':\n // Update dependencies on PagerDuty with dependenciesMissinginPagerDuty\n // Add dependency associations in PagerDuty\n if (dependenciesMissingInPagerDuty.length > 0) {\n this.logger.debug(\n `Updating dependencies on PagerDuty with: ${JSON.stringify(\n dependenciesMissingInPagerDuty,\n )}`,\n );\n await client.addServiceRelationToService(\n serviceId,\n dependenciesMissingInPagerDuty,\n );\n }\n\n // Remove dependency associations in PagerDuty\n if (dependenciesMissingInBackstage.length > 0) {\n this.logger.debug(\n `Removing dependencies on PagerDuty with: ${JSON.stringify(\n dependenciesMissingInBackstage,\n )}`,\n );\n await client.removeServiceRelationFromService(\n serviceId,\n dependenciesMissingInBackstage,\n );\n }\n\n break;\n case 'pagerduty':\n // Update dependencies on Backstage with dependenciesMissingInBackstage\n\n // !!!\n // This is not supported yet due to a limitation on Backstage side\n // that prevents a full override of the dependencies once they are\n // set on the entity configuration file\n // !!!\n\n entity.spec!.dependsOn = refreshServiceDependencyAnnotations(\n entity,\n mappings,\n dependencyIds,\n emit,\n );\n\n break;\n case 'both':\n // Update dependencies in both PagerDuty and Backstage\n this.logger.debug(\n `Updating dependencies on PagerDuty with: ${JSON.stringify(\n dependenciesMissingInPagerDuty,\n )} and Backstage with: ${JSON.stringify(\n dependenciesMissingInBackstage,\n )}`,\n );\n\n // Add missing dependencies to PagerDuty\n if (dependenciesMissingInPagerDuty.length > 0) {\n await client.addServiceRelationToService(\n serviceId,\n dependenciesMissingInPagerDuty,\n );\n }\n\n // Add missing dependencies to Backstage\n entity.spec!.dependsOn = refreshServiceDependencyAnnotations(\n entity,\n mappings,\n dependencyIds,\n emit,\n );\n\n break;\n default:\n // Do nothing. Strategy not defined or set to disabled\n break;\n }\n }\n }\n } catch (error) {\n this.logger.error(\n `Error processing entity ${entity.metadata.name}: ${error}`,\n );\n }\n }\n\n return entity;\n }\n}\n\nexport function refreshServiceDependencyAnnotations(\n entity: Entity,\n mappingsDic: Record<string, string>,\n dependencies: string[],\n emit: CatalogProcessorEmit,\n): string[] {\n const dependencyList: string[] = [];\n dependencies.forEach(dependencyId => {\n const foundEntityRef = mappingsDic[dependencyId];\n\n if (foundEntityRef && foundEntityRef !== '') {\n dependencyList.push(foundEntityRef);\n\n const entityRefParts = foundEntityRef.split(':');\n const kind = entityRefParts[0];\n const namespaceName = entityRefParts[1].split('/');\n const namespace = namespaceName[0];\n const name = namespaceName[1];\n\n emit(\n processingResult.relation({\n source: {\n kind: entity.kind,\n namespace: entity.metadata.namespace!,\n name: entity.metadata.name,\n },\n target: {\n kind: kind,\n namespace: namespace,\n name: name,\n },\n type: RELATION_DEPENDS_ON,\n }),\n );\n\n emit(\n processingResult.relation({\n source: {\n kind: kind,\n namespace: namespace,\n name: name,\n },\n target: {\n kind: entity.kind,\n namespace: entity.metadata.namespace!,\n name: entity.metadata.name,\n },\n type: RELATION_DEPENDENCY_OF,\n }),\n );\n }\n });\n\n return dependencyList;\n}\n\nexport type AnnotationUpdateProps = {\n serviceId?: string;\n integrationKey?: string;\n account?: string;\n};\n\nfunction updateAnnotations(\n entity: Entity,\n annotations: AnnotationUpdateProps,\n): void {\n // If serviceId is present, add the annotations to the entity\n if (annotations.serviceId && annotations.serviceId !== '') {\n entity.metadata.annotations!['pagerduty.com/service-id'] =\n annotations.serviceId;\n } else {\n delete entity.metadata.annotations!['pagerduty.com/service-id'];\n }\n\n // If integrationKey is present, add the annotations to the entity\n if (annotations.integrationKey && annotations.integrationKey !== '') {\n entity.metadata.annotations!['pagerduty.com/integration-key'] =\n annotations.integrationKey;\n } else {\n delete entity.metadata.annotations!['pagerduty.com/integration-key'];\n }\n\n // If account is present, add the annotations to the entity\n if (annotations.account && annotations.account !== '') {\n entity.metadata.annotations!['pagerduty.com/account'] = annotations.account;\n } else {\n delete entity.metadata.annotations!['pagerduty.com/account'];\n }\n}\n\nasync function buildExistingDependencies(\n dependencyAnnotations: string[],\n): Promise<string[]> {\n const dependencies: string[] = [];\n\n // Get all service ids matching the dependency annotations\n if (dependencyAnnotations.length > 0) {\n await Promise.all(\n dependencyAnnotations.map(async dependency => {\n const foundServiceId = await client.getServiceIdAnnotationFromCatalog(\n dependency,\n );\n\n if (foundServiceId !== '') {\n dependencies.push(foundServiceId);\n }\n }),\n );\n }\n\n return dependencies;\n}\n"],"names":["PagerDutyClient","serviceId","processingResult","RELATION_DEPENDS_ON","RELATION_DEPENDENCY_OF"],"mappings":"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"}
1
+ {"version":3,"file":"PagerDutyEntityProcessor.cjs.js","sources":["../../src/processor/PagerDutyEntityProcessor.ts"],"sourcesContent":["import { AuthService, DiscoveryService, LoggerService } from '@backstage/backend-plugin-api';\nimport {\n Entity,\n RELATION_DEPENDS_ON,\n RELATION_DEPENDENCY_OF,\n} from '@backstage/catalog-model';\nimport {\n CatalogProcessor,\n CatalogProcessorEmit,\n processingResult,\n} from '@backstage/plugin-catalog-node';\nimport { LocationSpec } from '@backstage/plugin-catalog-common';\nimport { PagerDutyClient } from '../apis/client';\n\n/**\n * A function which given an entity, determines if it should be processed for linguist tags.\n * @public\n */\nexport type ShouldProcessEntity = (entity: Entity) => boolean;\n\nexport interface PagerDutyEntityProcessorOptions {\n logger: LoggerService;\n discovery: DiscoveryService;\n auth: AuthService,\n}\n\nlet client: PagerDutyClient;\n\nexport class PagerDutyEntityProcessor implements CatalogProcessor {\n private logger: LoggerService;\n private discovery: DiscoveryService;\n private auth: AuthService;\n\n private shouldProcessEntity: ShouldProcessEntity = (entity: Entity) => {\n return entity.kind === 'Component';\n };\n\n constructor({ auth, logger, discovery }: PagerDutyEntityProcessorOptions) {\n this.logger = logger;\n this.discovery = discovery;\n this.auth = auth;\n\n client = new PagerDutyClient({\n auth: this.auth,\n discovery: this.discovery,\n logger: this.logger,\n });\n }\n\n getProcessorName(): string {\n return 'PagerDutyEntityProcessor';\n }\n\n async preProcessEntity(entity: Entity): Promise<Entity> {\n if (this.shouldProcessEntity(entity)) {\n const strategySetting =\n await client.getServiceDependencyStrategySetting();\n\n if (strategySetting && strategySetting === 'pagerduty') {\n if (entity.spec?.dependsOn) {\n // empty the dependsOn array\n entity.spec.dependsOn = [];\n }\n }\n }\n\n return entity;\n }\n\n async postProcessEntity(\n entity: Entity,\n _location: LocationSpec,\n emit: CatalogProcessorEmit,\n ): Promise<Entity> {\n if (this.shouldProcessEntity(entity)) {\n try {\n // Process service mapping overrides\n // Find the service mapping for the entity in database\n const mapping = await client.findServiceMapping({\n type: entity.kind.toLowerCase(),\n namespace: entity.metadata.namespace!.toLowerCase(),\n name: entity.metadata.name.toLowerCase(),\n });\n\n // If mapping exists add the annotations to the entity\n if (mapping) {\n updateAnnotations(entity, {\n serviceId: mapping.serviceId,\n integrationKey: mapping.integrationKey,\n account: mapping.account,\n });\n\n this.logger.debug(\n `Added annotations to entity ${entity.metadata.name} with service id: ${mapping.serviceId}, integration key: ${mapping.integrationKey} and account: ${mapping.account}`,\n );\n } else {\n this.logger.debug(\n `No mapping found for entity: ${entity.metadata.name}. Adding annotations to the database.`,\n );\n\n // Add the mapping to the database based on entity annotations\n let serviceId =\n entity.metadata.annotations?.['pagerduty.com/service-id'];\n let integrationKey =\n entity.metadata.annotations?.['pagerduty.com/integration-key'];\n const account =\n entity.metadata.annotations?.['pagerduty.com/account'];\n\n // Build the entityRef string\n const entityRef = `${entity.kind.toLowerCase()}:${entity.metadata.namespace?.toLowerCase()}/${entity.metadata.name.toLowerCase()}`;\n\n if (serviceId) {\n // Check for mapping override by user\n const serviceMappingOverrideFound =\n await client.findServiceMappingById(serviceId);\n\n // If service mapping override is not found\n // insert the mapping into the database\n if (!serviceMappingOverrideFound) {\n // if integrationKey annotation does not exist\n // try to retrieve it from PagerDuty\n if (!integrationKey) {\n const foundIntegrationKey =\n await client.getIntegrationKeyFromServiceId(\n serviceId,\n account,\n );\n\n if (foundIntegrationKey) {\n integrationKey = foundIntegrationKey;\n }\n }\n\n // Insert the mapping into the database\n this.logger.debug(\n `Inserting mapping for entity: ${entityRef} with service id: ${serviceId}, integration key: ${integrationKey} and account: ${account}`,\n );\n await client.insertServiceMapping({\n entityRef,\n serviceId,\n integrationKey,\n account,\n });\n\n // Add the annotations to the entity\n updateAnnotations(entity, {\n serviceId,\n integrationKey,\n account,\n });\n } else {\n this.logger.debug(\n `Service mapping override found for service id: ${serviceId}.`,\n );\n updateAnnotations(entity, {}); // delete annotations because user unmapped the service\n }\n } else if (integrationKey) {\n serviceId = await client.getServiceIdFromIntegrationKey(\n integrationKey,\n account,\n );\n\n // Check for mapping override by user\n const serviceMappingOverrideFound =\n await client.findServiceMappingById(serviceId);\n\n // If service mapping override is not found\n // insert the mapping into the database\n if (!serviceMappingOverrideFound) {\n // Insert the mapping into the database\n this.logger.debug(\n `Inserting mapping for entity: ${entityRef} with new service id: ${serviceId}, integration key: ${integrationKey} and account: ${account}`,\n );\n await client.insertServiceMapping({\n entityRef,\n serviceId,\n integrationKey,\n account,\n });\n\n updateAnnotations(entity, {\n serviceId,\n integrationKey,\n account,\n });\n } else {\n this.logger.debug(\n `Service mapping override found for service id: ${serviceId}. Skipping adding to the database.`,\n );\n updateAnnotations(entity, {}); // delete annotations because user unmapped the service\n }\n }\n }\n\n // Process service dependencies\n // if (entity.spec?.dependsOn) {\n // Check if ServiceId exists get service dependencies from PagerDuty\n const serviceId =\n entity.metadata.annotations?.['pagerduty.com/service-id'];\n\n if (serviceId) {\n const strategySetting =\n await client.getServiceDependencyStrategySetting();\n\n if (strategySetting && strategySetting !== 'disabled') {\n // Check if service has dependencies configured\n let dependencyAnnotations: string[] = [];\n\n if (entity.spec?.dependsOn) {\n dependencyAnnotations = JSON.parse(\n JSON.stringify(entity.spec?.dependsOn),\n );\n }\n\n const mappings = await client.getAllServiceMappings();\n\n const entityDependencies: string[] =\n await buildExistingDependencies(dependencyAnnotations);\n\n // Get dependencies from PagerDuty for the service\n const account =\n entity.metadata.annotations?.['pagerduty.com/account'];\n const dependencies = await client.getServiceDependencies(\n serviceId,\n account,\n );\n const filteredDependencies = dependencies.filter(\n x => x.dependent_service.id === serviceId,\n );\n const dependencyIds = filteredDependencies.map(\n x => x.supporting_service.id,\n );\n\n // compare dependencies with existing dependencies defined on the entity\n const dependenciesMissingInBackstage = dependencyIds.filter(\n x => !entityDependencies.includes(x),\n );\n const dependenciesMissingInPagerDuty = entityDependencies.filter(\n x => !dependencyIds.includes(x),\n );\n\n switch (strategySetting) {\n case 'backstage':\n // Update dependencies on PagerDuty with dependenciesMissinginPagerDuty\n // Add dependency associations in PagerDuty\n if (dependenciesMissingInPagerDuty.length > 0) {\n this.logger.debug(\n `Updating dependencies on PagerDuty with: ${JSON.stringify(\n dependenciesMissingInPagerDuty,\n )}`,\n );\n await client.addServiceRelationToService(\n serviceId,\n dependenciesMissingInPagerDuty,\n );\n }\n\n // Remove dependency associations in PagerDuty\n if (dependenciesMissingInBackstage.length > 0) {\n this.logger.debug(\n `Removing dependencies on PagerDuty with: ${JSON.stringify(\n dependenciesMissingInBackstage,\n )}`,\n );\n await client.removeServiceRelationFromService(\n serviceId,\n dependenciesMissingInBackstage,\n );\n }\n\n break;\n case 'pagerduty':\n // Update dependencies on Backstage with dependenciesMissingInBackstage\n\n // !!!\n // This is not supported yet due to a limitation on Backstage side\n // that prevents a full override of the dependencies once they are\n // set on the entity configuration file\n // !!!\n\n entity.spec!.dependsOn = refreshServiceDependencyAnnotations(\n entity,\n mappings,\n dependencyIds,\n emit,\n );\n\n break;\n case 'both':\n // Update dependencies in both PagerDuty and Backstage\n this.logger.debug(\n `Updating dependencies on PagerDuty with: ${JSON.stringify(\n dependenciesMissingInPagerDuty,\n )} and Backstage with: ${JSON.stringify(\n dependenciesMissingInBackstage,\n )}`,\n );\n\n // Add missing dependencies to PagerDuty\n if (dependenciesMissingInPagerDuty.length > 0) {\n await client.addServiceRelationToService(\n serviceId,\n dependenciesMissingInPagerDuty,\n );\n }\n\n // Add missing dependencies to Backstage\n entity.spec!.dependsOn = refreshServiceDependencyAnnotations(\n entity,\n mappings,\n dependencyIds,\n emit,\n );\n\n break;\n default:\n // Do nothing. Strategy not defined or set to disabled\n break;\n }\n }\n }\n } catch (error) {\n this.logger.error(\n `Error processing entity ${entity.metadata.name}: ${error}`,\n );\n }\n }\n\n return entity;\n }\n}\n\nexport function refreshServiceDependencyAnnotations(\n entity: Entity,\n mappingsDic: Record<string, string>,\n dependencies: string[],\n emit: CatalogProcessorEmit,\n): string[] {\n const dependencyList: string[] = [];\n dependencies.forEach(dependencyId => {\n const foundEntityRef = mappingsDic[dependencyId];\n\n if (foundEntityRef && foundEntityRef !== '') {\n dependencyList.push(foundEntityRef);\n\n const entityRefParts = foundEntityRef.split(':');\n const kind = entityRefParts[0];\n const namespaceName = entityRefParts[1].split('/');\n const namespace = namespaceName[0];\n const name = namespaceName[1];\n\n emit(\n processingResult.relation({\n source: {\n kind: entity.kind,\n namespace: entity.metadata.namespace!,\n name: entity.metadata.name,\n },\n target: {\n kind: kind,\n namespace: namespace,\n name: name,\n },\n type: RELATION_DEPENDS_ON,\n }),\n );\n\n emit(\n processingResult.relation({\n source: {\n kind: kind,\n namespace: namespace,\n name: name,\n },\n target: {\n kind: entity.kind,\n namespace: entity.metadata.namespace!,\n name: entity.metadata.name,\n },\n type: RELATION_DEPENDENCY_OF,\n }),\n );\n }\n });\n\n return dependencyList;\n}\n\nexport type AnnotationUpdateProps = {\n serviceId?: string;\n integrationKey?: string;\n account?: string;\n};\n\nfunction updateAnnotations(\n entity: Entity,\n annotations: AnnotationUpdateProps,\n): void {\n // If serviceId is present, add the annotations to the entity\n if (annotations.serviceId && annotations.serviceId !== '') {\n entity.metadata.annotations!['pagerduty.com/service-id'] =\n annotations.serviceId;\n } else {\n delete entity.metadata.annotations!['pagerduty.com/service-id'];\n }\n\n // If integrationKey is present, add the annotations to the entity\n if (annotations.integrationKey && annotations.integrationKey !== '') {\n entity.metadata.annotations!['pagerduty.com/integration-key'] =\n annotations.integrationKey;\n } else {\n delete entity.metadata.annotations!['pagerduty.com/integration-key'];\n }\n\n // If account is present, add the annotations to the entity\n if (annotations.account && annotations.account !== '') {\n entity.metadata.annotations!['pagerduty.com/account'] = annotations.account;\n } else {\n delete entity.metadata.annotations!['pagerduty.com/account'];\n }\n}\n\nasync function buildExistingDependencies(\n dependencyAnnotations: string[],\n): Promise<string[]> {\n const dependencies: string[] = [];\n\n // Get all service ids matching the dependency annotations\n if (dependencyAnnotations.length > 0) {\n await Promise.all(\n dependencyAnnotations.map(async dependency => {\n const foundServiceId = await client.getServiceIdAnnotationFromCatalog(\n dependency,\n );\n\n if (foundServiceId !== '') {\n dependencies.push(foundServiceId);\n }\n }),\n );\n }\n\n return dependencies;\n}\n"],"names":["PagerDutyClient","serviceId","processingResult","RELATION_DEPENDS_ON","RELATION_DEPENDENCY_OF"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pagerduty/backstage-plugin-entity-processor",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "main": "dist/index.cjs.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",