Skip to content

Commit 01889f8

Browse files
authored
chore: remove own backstage/backend-common dependency (#153)
1 parent 79fa4ea commit 01889f8

File tree

11 files changed

+48
-124
lines changed

11 files changed

+48
-124
lines changed

packages/backend/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
"build-image": "docker build ../.. -f Dockerfile --tag backstage"
2222
},
2323
"dependencies": {
24-
"@backstage/backend-common": "^0.23.2",
2524
"@backstage/backend-defaults": "^0.4.0",
2625
"@backstage/backend-plugin-api": "^0.7.0",
2726
"@backstage/backend-tasks": "^0.5.23",

plugins/dql-backend/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,13 @@
3434
"postpack": "backstage-cli package postpack"
3535
},
3636
"dependencies": {
37-
"@backstage/backend-common": "^0.23.0",
3837
"@backstage/config": "^1.2.0",
3938
"@dynatrace/backstage-plugin-dql-common": "^0.1.0",
4039
"@types/express": "*",
4140
"express": "^4.17.1",
4241
"express-promise-router": "^4.1.0",
43-
"node-fetch": "^2.6.7",
4442
"https-proxy-agent": "7.0.5",
43+
"node-fetch": "^2.6.7",
4544
"winston": "^3.2.1",
4645
"yn": "^4.0.0",
4746
"zod": "^3.22.4"

plugins/dql-backend/src/run.ts

Lines changed: 0 additions & 32 deletions
This file was deleted.

plugins/dql-backend/src/service/dynatraceApi.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
PollQueryResponse,
2222
TokenResponse,
2323
} from './dynatraceApi';
24+
import { createLogger } from 'winston';
2425

2526
jest.mock('../utils', () => ({ dtFetch: jest.fn() }));
2627

@@ -58,10 +59,12 @@ describe('dynatraceApi', () => {
5859
name: 'myEnv',
5960
accountUrn: 'urn',
6061
};
61-
const dynatraceApi = new DynatraceApi(defaultApiConfig, 'identifier');
62+
const logger = createLogger();
63+
const dynatraceApi = new DynatraceApi(defaultApiConfig, 'identifier', logger);
6264
const trailingSlashApi = new DynatraceApi(
6365
{ ...defaultApiConfig, url: 'https://example.com/' },
6466
'identifier',
67+
logger,
6568
);
6669

6770
const mockTokenResult = (result: MockResult<TokenResponse>) =>

plugins/dql-backend/src/service/dynatraceApi.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616
import { dtFetch } from '../utils';
17-
import { getRootLogger } from '@backstage/backend-common';
17+
import { LoggerService } from '@backstage/backend-plugin-api';
1818
import { TabularData } from '@dynatrace/backstage-plugin-dql-common';
1919

2020
export type DynatraceEnvironmentConfig = {
@@ -59,7 +59,6 @@ export type PollQueryResponse<RecordType> = {
5959
};
6060
};
6161

62-
const logger = getRootLogger().child({ plugin: 'dql-backend' });
6362
const DEFAULT_TOKEN_URL = 'https://sso.dynatrace.com/sso/oauth2/token';
6463

6564
const executeQuery = async (
@@ -84,6 +83,7 @@ const executeQuery = async (
8483
const pollQuery = async <T>(
8584
{ url, accessToken, identifier }: DynatraceAccessInfo,
8685
requestToken: string,
86+
logger: LoggerService,
8787
): Promise<PollQueryResponse<T>> => {
8888
const fullUrl = new URL('platform/storage/query/v1/query:poll', url);
8989
fullUrl.searchParams.set('request-token', requestToken);
@@ -105,20 +105,23 @@ const pollQuery = async <T>(
105105
const waitForQueryResult = async <RecordType>(
106106
accessInfo: DynatraceAccessInfo,
107107
requestToken: string,
108+
logger: LoggerService,
108109
): Promise<RecordType[]> => {
109110
let pollQueryRes: PollQueryResponse<RecordType> = await pollQuery(
110111
accessInfo,
111112
requestToken,
113+
logger,
112114
);
113115
while (pollQueryRes.state !== 'SUCCEEDED') {
114-
pollQueryRes = await pollQuery(accessInfo, requestToken);
116+
pollQueryRes = await pollQuery(accessInfo, requestToken, logger);
115117
}
116118
return pollQueryRes.result.records;
117119
};
118120

119121
const getAccessToken = async (
120122
config: DynatraceEnvironmentConfig,
121123
identifier: string,
124+
logger: LoggerService,
122125
): Promise<TokenResponse> => {
123126
const body = new URLSearchParams({
124127
grant_type: 'client_credentials',
@@ -152,6 +155,7 @@ export class DynatraceApi {
152155
constructor(
153156
private readonly config: DynatraceEnvironmentConfig,
154157
private identifier: string,
158+
private logger: LoggerService,
155159
) {}
156160

157161
get environmentName() {
@@ -163,14 +167,22 @@ export class DynatraceApi {
163167
}
164168

165169
async executeDqlQuery(query: string): Promise<TabularData> {
166-
const tokenResponse = await getAccessToken(this.config, this.identifier);
170+
const tokenResponse = await getAccessToken(
171+
this.config,
172+
this.identifier,
173+
this.logger,
174+
);
167175
const environment: DynatraceAccessInfo = {
168176
url: this.config.url,
169177
accessToken: tokenResponse.access_token,
170178
identifier: this.identifier,
171179
};
172180

173181
const execQueryRes = await executeQuery(environment, query);
174-
return await waitForQueryResult(environment, execQueryRes.requestToken);
182+
return await waitForQueryResult(
183+
environment,
184+
execQueryRes.requestToken,
185+
this.logger,
186+
);
175187
}
176188
}

plugins/dql-backend/src/service/router.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@
1414
* limitations under the License.
1515
*/
1616
import { RouterOptions, createRouter } from './router';
17-
import { getVoidLogger } from '@backstage/backend-common';
1817
import { MockConfigApi } from '@backstage/test-utils';
1918
import express from 'express';
19+
import { createLogger } from 'winston';
2020

2121
describe('createRouter', () => {
2222
let app: express.Express;
2323

2424
beforeAll(async () => {
2525
const router = await createRouter({
26-
logger: getVoidLogger(),
26+
logger: createLogger(),
2727
discovery: {
2828
async getBaseUrl(): Promise<string> {
2929
return '';

plugins/dql-backend/src/service/router.ts

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,8 @@
1616
import { parseCustomQueries, parseEnvironments } from '../utils/configParser';
1717
import { getEntityFromRequest, validateQueries } from '../utils/routeUtils';
1818
import { QueryExecutor } from './queryExecutor';
19-
import {
20-
createLegacyAuthAdapters,
21-
errorHandler,
22-
} from '@backstage/backend-common';
23-
import { PluginEndpointDiscovery } from '@backstage/backend-common';
19+
import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';
20+
import { DiscoveryService } from '@backstage/backend-plugin-api';
2421
import { LoggerService, AuthService } from '@backstage/backend-plugin-api';
2522
import { CatalogClient } from '@backstage/catalog-client';
2623
import { Config } from '@backstage/config';
@@ -31,22 +28,16 @@ import Router from 'express-promise-router';
3128
export interface RouterOptions {
3229
logger: LoggerService;
3330
config: Config;
34-
discovery: PluginEndpointDiscovery;
35-
auth?: AuthService;
31+
discovery: DiscoveryService;
32+
auth: AuthService;
3633
}
3734

3835
export const createRouter = async (
3936
options: RouterOptions,
4037
): Promise<express.Router> => {
41-
// In order to make the new auth services available to the plugin
42-
// implementation in a backwards compatible way, we use the
43-
// createLegacyAuthAdapters helper from @backstage/backend-common.
44-
// Ref: https://backstage.io/docs/tutorials/auth-service-migration/#making-the-new-auth-services-available-in-createrouter
45-
const { auth } = createLegacyAuthAdapters(options);
38+
const { config, discovery, logger, auth } = options;
4639

47-
const { config, discovery } = options;
48-
49-
const apis = parseEnvironments(config);
40+
const apis = parseEnvironments(config, logger);
5041
const customQueries = parseCustomQueries(config);
5142
const queryExecutor = new QueryExecutor(apis, customQueries);
5243
const catalogClient = new CatalogClient({ discoveryApi: discovery });
@@ -86,6 +77,6 @@ export const createRouter = async (
8677
res.json(deployments);
8778
});
8879

89-
router.use(errorHandler());
80+
router.use(MiddlewareFactory.create({ logger, config }).error());
9081
return router;
9182
};

plugins/dql-backend/src/service/standaloneServer.ts

Lines changed: 0 additions & 59 deletions
This file was deleted.

plugins/dql-backend/src/utils/configParser.test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
import { parseCustomQueries, parseEnvironments } from './configParser';
1717
import { MockConfigApi } from '@backstage/test-utils';
18+
import { createLogger } from 'winston';
1819

1920
const TEST_ENVIRONMENT = {
2021
name: 'test',
@@ -25,13 +26,15 @@ const TEST_ENVIRONMENT = {
2526
accountUrn: 'test',
2627
};
2728

29+
const logger = createLogger();
30+
2831
describe('config-parser', () => {
2932
describe('parseEnvironments', () => {
3033
it('should return a list of DynatraceApis with the corresponding config', () => {
3134
const config = new MockConfigApi({
3235
dynatrace: { environments: [TEST_ENVIRONMENT] },
3336
});
34-
const result = parseEnvironments(config);
37+
const result = parseEnvironments(config, logger);
3538

3639
expect(result).toHaveLength(1);
3740
const api = result[0];
@@ -46,7 +49,7 @@ describe('config-parser', () => {
4649
environments: [{ ...TEST_ENVIRONMENT, url: 'https://example' }],
4750
},
4851
});
49-
const result = parseEnvironments(config);
52+
const result = parseEnvironments(config, logger);
5053
const api = result[0];
5154
expect(Reflect.get(api, 'identifier')).toEqual(btoa('unknown'));
5255
});
@@ -55,7 +58,7 @@ describe('config-parser', () => {
5558
const config = new MockConfigApi({
5659
dynatrace: { environments: [{ ...TEST_ENVIRONMENT, url: '' }] },
5760
});
58-
const result = parseEnvironments(config);
61+
const result = parseEnvironments(config, logger);
5962
const api = result[0];
6063
expect(Reflect.get(api, 'identifier')).toEqual(btoa('unknown'));
6164
});

plugins/dql-backend/src/utils/configParser.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616
import { DynatraceApi, DynatraceEnvironmentConfig } from '../service';
17+
import { LoggerService } from '@backstage/backend-plugin-api';
1718
import { Config } from '@backstage/config';
1819

1920
const defaultId = 'unknown';
@@ -35,13 +36,20 @@ const getIdentifier = (configArray: Config[]) => {
3536
);
3637
};
3738

38-
export const parseEnvironments = (config: Config): DynatraceApi[] => {
39+
export const parseEnvironments = (
40+
config: Config,
41+
logger: LoggerService,
42+
): DynatraceApi[] => {
3943
const configArray = config.getConfigArray('dynatrace.environments');
4044

4145
const identifier = getIdentifier(configArray);
4246
return configArray.map(
4347
envConfig =>
44-
new DynatraceApi(envConfig.get<DynatraceEnvironmentConfig>(), identifier),
48+
new DynatraceApi(
49+
envConfig.get<DynatraceEnvironmentConfig>(),
50+
identifier,
51+
logger,
52+
),
4553
);
4654
};
4755

0 commit comments

Comments
 (0)