@pagerduty/backstage-plugin-entity-processor 0.1.0-next.26 → 0.1.0-next.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.cjs.js +15 -19
- package/dist/index.cjs.js.map +1 -1
- package/package.json +12 -2
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
**Bring the power of PagerDuty to Backstage!**
|
|
8
8
|
The PagerDuty plugin reduces the cognitive load on developers responsible for maintaining services in production. Instead of having to go to PagerDuty's console, you can now access the necessary information directly within Backstage. This includes finding active incidents or opening a new incident, reviewing recent changes made to the service, and checking who is on-call.
|
|
9
9
|
|
|
10
|
-
The PagerDuty Entity Processor package allows users to map their existing PagerDuty services to existing Backstage entities by leveraging point and click instead of updating all configuration files on every single service. With this we want to ease the path for existing PagerDuty customers to integrate easily with Backstage and smoothly transition to a configuration based approach.
|
|
10
|
+
The PagerDuty Entity Processor package allows users to map their existing PagerDuty services to existing Backstage entities by leveraging point and click instead of updating all configuration files on every single service. We will make the necessary changes to the configuration files for you automatically. With this we want to ease the path for existing PagerDuty customers to integrate easily with Backstage and smoothly transition to a configuration based approach.
|
|
11
11
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
@@ -29,7 +29,7 @@ yarn add --cwd packages/backend @pagerduty/backstage-plugin-entity-processor
|
|
|
29
29
|
|
|
30
30
|
### Configuration
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
To configure the entity processor plugin follow the instructions on the project's documentation [here](https://pagerduty.github.io/backstage-plugin-docs/).
|
|
33
33
|
|
|
34
34
|
## Support
|
|
35
35
|
|
package/dist/index.cjs.js
CHANGED
|
@@ -41,26 +41,24 @@ class PagerDutyClient {
|
|
|
41
41
|
)}/mapping/entity/${type}/${namespace}/${name}`;
|
|
42
42
|
try {
|
|
43
43
|
response = await fetch__default["default"](url, options);
|
|
44
|
+
const foundMapping = await response.json();
|
|
45
|
+
switch (response.status) {
|
|
46
|
+
case 400:
|
|
47
|
+
throw new Error(await response.text());
|
|
48
|
+
case 404:
|
|
49
|
+
return {};
|
|
50
|
+
default:
|
|
51
|
+
this.logger.debug(`Found mapping for ${type}:${namespace}/${name}: ${JSON.stringify(foundMapping.mapping)}`);
|
|
52
|
+
return {
|
|
53
|
+
serviceId: foundMapping.mapping.serviceId,
|
|
54
|
+
integrationKey: foundMapping.mapping.integrationKey,
|
|
55
|
+
entityRef: foundMapping.mapping.entityRef
|
|
56
|
+
};
|
|
57
|
+
}
|
|
44
58
|
} catch (error) {
|
|
59
|
+
this.logger.error(`Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`);
|
|
45
60
|
throw new Error(`Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`);
|
|
46
61
|
}
|
|
47
|
-
switch (response.status) {
|
|
48
|
-
case 400:
|
|
49
|
-
const errorMessage = await response.text();
|
|
50
|
-
this.logger.error(`Error retrieving mapping for ${type}:${namespace}/${name}: ${errorMessage}`);
|
|
51
|
-
throw new Error(errorMessage);
|
|
52
|
-
case 404:
|
|
53
|
-
return {};
|
|
54
|
-
default:
|
|
55
|
-
const foundMapping = await response.json();
|
|
56
|
-
const mapping = foundMapping.mapping;
|
|
57
|
-
this.logger.debug(`Found mapping for ${type}:${namespace}/${name}: ${JSON.stringify(mapping)}`);
|
|
58
|
-
return {
|
|
59
|
-
serviceId: mapping.serviceId,
|
|
60
|
-
integrationKey: mapping.integrationKey,
|
|
61
|
-
entityRef: mapping.entityRef
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
64
|
|
|
@@ -86,14 +84,12 @@ class PagerDutyEntityProcessor {
|
|
|
86
84
|
async postProcessEntity(entity) {
|
|
87
85
|
if (this.shouldProcessEntity(entity)) {
|
|
88
86
|
try {
|
|
89
|
-
this.logger.info(`Processing entity: ${entity.metadata.name} with the following annotations: ${JSON.stringify(entity.metadata.annotations)}`);
|
|
90
87
|
const client = new PagerDutyClient({ discovery: this.discovery, logger: this.logger });
|
|
91
88
|
const mapping = await client.findServiceMapping({
|
|
92
89
|
type: entity.kind.toLowerCase(),
|
|
93
90
|
namespace: entity.metadata.namespace.toLowerCase(),
|
|
94
91
|
name: entity.metadata.name.toLowerCase()
|
|
95
92
|
});
|
|
96
|
-
this.logger.info(`Mapping found for '${entity.metadata.name}' in database: ${JSON.stringify(mapping)}`);
|
|
97
93
|
if (mapping.serviceId) {
|
|
98
94
|
if (mapping.serviceId && mapping.serviceId !== "") {
|
|
99
95
|
entity.metadata.annotations["pagerduty.com/service-id"] = mapping.serviceId;
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/apis/client.ts","../src/processor/PagerDutyEntityProcessor.ts","../src/module.ts"],"sourcesContent":["import fetch from 'node-fetch';\nimport type { RequestInit, Response } from 'node-fetch';\nimport type { EntityMapping } from '../types';\n\n// import { getAuthToken } from '../auth/auth';\n// import {\n// CreateServiceResponse,\n// } from '../types';\n\n// import {\n// PagerDutyServiceResponse,\n// PagerDutyIntegrationResponse,\n// PagerDutyAbilitiesResponse,\n// } from '@pagerduty/backstage-plugin-common';\nimport { DiscoveryService, LoggerService } from '@backstage/backend-plugin-api';\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 constructor({ discovery, logger }: PagerDutyClientOptions) {\n this.discovery = discovery;\n this.logger = logger;\n }\n\n async findServiceMapping({ type, namespace, name }: BackstageEntityRef): Promise<EntityMapping> {\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\n try {\n response = await fetch(url, options);\n } catch (error) {\n throw new Error(`Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`);\n }\n\n switch (response.status) {\n case 400:\n const errorMessage = await response.text();\n this.logger.error(`Error retrieving mapping for ${type}:${namespace}/${name}: ${errorMessage}`);\n throw new Error(errorMessage);\n case 404:\n return {};\n default: // 200\n const foundMapping = await response.json();\n const mapping : EntityMapping = foundMapping.mapping;\n\n this.logger.debug(`Found mapping for ${type}:${namespace}/${name}: ${JSON.stringify(mapping)}`);\n\n return {\n serviceId: mapping.serviceId,\n integrationKey: mapping.integrationKey,\n entityRef: mapping.entityRef\n }\n }\n }\n\n}","import { DiscoveryService, LoggerService } from \"@backstage/backend-plugin-api\";\nimport { Entity } from \"@backstage/catalog-model\";\nimport { CatalogProcessor } from \"@backstage/plugin-catalog-node\";\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\nexport class PagerDutyEntityProcessor implements CatalogProcessor {\n private logger: LoggerService;\n private discovery: DiscoveryService;\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\n getProcessorName(): string {\n return \"PagerDutyEntityProcessor\";\n }\n\n async postProcessEntity(entity: Entity): Promise<Entity> {\n if (this.shouldProcessEntity(entity)) {\n try{\n this.logger.info(`Processing entity: ${entity.metadata.name} with the following annotations: ${JSON.stringify(entity.metadata.annotations)}`);\n\n const client = new PagerDutyClient({ discovery: this.discovery, logger: this.logger});\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 this.logger.info(`Mapping found for '${entity.metadata.name}' in database: ${JSON.stringify(mapping)}`);\n\n if (mapping.serviceId) { // not an empty object \n if (mapping.serviceId && mapping.serviceId !== \"\") {\n entity.metadata.annotations![\"pagerduty.com/service-id\"] = mapping.serviceId;\n }\n else {\n delete entity.metadata.annotations![\"pagerduty.com/service-id\"];\n }\n\n if(mapping.integrationKey && mapping.integrationKey !== \"\") {\n entity.metadata.annotations![\"pagerduty.com/integration-key\"] = mapping.integrationKey;\n }\n else {\n delete entity.metadata.annotations![\"pagerduty.com/integration-key\"];\n }\n\n this.logger.debug(`Added annotations to entity ${entity.metadata.name} with service id: ${mapping.serviceId} and integration key: ${mapping.integrationKey}`);\n } else {\n this.logger.debug(`No mapping found for entity: ${entity.metadata.name}`);\n }\n } catch (error) {\n this.logger.error(`Error processing entity: ${entity.metadata.name}`);\n this.logger.error(`${error}`);\n } \n }\n\n return entity;\n }\n}","import { coreServices, createBackendModule } 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(new PagerDutyEntityProcessor({ logger, discovery}));\n },\n });\n },\n});\n"],"names":["__publicField","fetch","createBackendModule","coreServices","catalogProcessingExtensionPoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/apis/client.ts","../src/processor/PagerDutyEntityProcessor.ts","../src/module.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 { PagerDutyEntityMappingResponse } 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 constructor({ discovery, logger }: PagerDutyClientOptions) {\n this.discovery = discovery;\n this.logger = logger;\n }\n\n async findServiceMapping({ type, namespace, name }: BackstageEntityRef): Promise<EntityMapping> {\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 fetch(url, options);\n\n const foundMapping: PagerDutyEntityMappingResponse = 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 this.logger.debug(`Found mapping for ${type}:${namespace}/${name}: ${JSON.stringify(foundMapping.mapping)}`);\n\n return {\n serviceId: foundMapping.mapping.serviceId,\n integrationKey: foundMapping.mapping.integrationKey,\n entityRef: foundMapping.mapping.entityRef\n }\n }\n } catch (error) {\n this.logger.error(`Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`);\n throw new Error(`Failed to retrieve mapping for ${type}:${namespace}/${name}: ${error}`);\n }\n }\n\n}","import { DiscoveryService, LoggerService } from \"@backstage/backend-plugin-api\";\nimport { Entity } from \"@backstage/catalog-model\";\nimport { CatalogProcessor } from \"@backstage/plugin-catalog-node\";\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\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\n getProcessorName(): string {\n return \"PagerDutyEntityProcessor\";\n }\n\n async postProcessEntity(entity: Entity): Promise<Entity> {\n if (this.shouldProcessEntity(entity)) {\n try {\n\n const client = new PagerDutyClient({ discovery: this.discovery, logger: this.logger });\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.serviceId) { // not an empty object \n if (mapping.serviceId && mapping.serviceId !== \"\") {\n entity.metadata.annotations![\"pagerduty.com/service-id\"] = mapping.serviceId;\n }\n else {\n delete entity.metadata.annotations![\"pagerduty.com/service-id\"];\n }\n\n if (mapping.integrationKey && mapping.integrationKey !== \"\") {\n entity.metadata.annotations![\"pagerduty.com/integration-key\"] = mapping.integrationKey;\n }\n else {\n delete entity.metadata.annotations![\"pagerduty.com/integration-key\"];\n }\n\n this.logger.debug(`Added annotations to entity ${entity.metadata.name} with service id: ${mapping.serviceId} and integration key: ${mapping.integrationKey}`);\n } else {\n this.logger.debug(`No mapping found for entity: ${entity.metadata.name}`);\n }\n } catch (error) {\n this.logger.error(`Error processing entity: ${entity.metadata.name}`);\n this.logger.error(`${error}`);\n }\n }\n\n return entity;\n }\n}","import { coreServices, createBackendModule } 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(new PagerDutyEntityProcessor({ logger, discovery}));\n },\n });\n },\n});\n"],"names":["__publicField","fetch","createBackendModule","coreServices","catalogProcessingExtensionPoint"],"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.1.0-next.
|
|
3
|
+
"version": "0.1.0-next.27",
|
|
4
4
|
"main": "dist/index.cjs.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -12,6 +12,15 @@
|
|
|
12
12
|
"backstage": {
|
|
13
13
|
"role": "backend-plugin-module"
|
|
14
14
|
},
|
|
15
|
+
"homepage": "https://pagerduty.github.io/backstage-plugin-docs/index.html",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/PagerDuty/backstage-plugin-entity-processor.git"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"backstage",
|
|
22
|
+
"pagerduty"
|
|
23
|
+
],
|
|
15
24
|
"scripts": {
|
|
16
25
|
"start": "yarn tsc && backstage-cli package start",
|
|
17
26
|
"build": "yarn tsc && backstage-cli package build",
|
|
@@ -25,9 +34,10 @@
|
|
|
25
34
|
"@backstage/backend-common": "^0.21.6",
|
|
26
35
|
"@backstage/backend-defaults": "^0.2.16",
|
|
27
36
|
"@backstage/backend-plugin-api": "^0.6.20",
|
|
37
|
+
"@backstage/catalog-model": "^1.5.0",
|
|
28
38
|
"@backstage/config": "^1.2.0",
|
|
29
39
|
"@backstage/plugin-catalog-node": "^1.12.2",
|
|
30
|
-
"@pagerduty/backstage-plugin-common": "0.1.5-next.
|
|
40
|
+
"@pagerduty/backstage-plugin-common": "0.1.5-next.9",
|
|
31
41
|
"@rjsf/core": "^5.14.3",
|
|
32
42
|
"node-fetch": "^2.6.7",
|
|
33
43
|
"winston": "^3.2.1",
|