mirror of
https://github.com/Unleash/unleash.git
synced 2024-12-28 00:06:53 +01:00
task: Removed edge bulk metrics endpoint (#7161)
Removes /edge/metrics. This has been superseded by /api/client/metrics/bulk. Once this is merged, Unleash 6.0 will require Edge > 17.0.0. (We recommend at least v19.1.3)
This commit is contained in:
parent
304d619597
commit
cea64dc21d
@ -1,29 +1,18 @@
|
|||||||
import type { Response } from 'express';
|
import type { Response } from 'express';
|
||||||
import Controller from '../controller';
|
import Controller from '../controller';
|
||||||
import type {
|
import type { IUnleashConfig, IUnleashServices } from '../../types';
|
||||||
IFlagResolver,
|
|
||||||
IUnleashConfig,
|
|
||||||
IUnleashServices,
|
|
||||||
} from '../../types';
|
|
||||||
import type { Logger } from '../../logger';
|
import type { Logger } from '../../logger';
|
||||||
import { NONE } from '../../types/permissions';
|
import { NONE } from '../../types/permissions';
|
||||||
import { createResponseSchema } from '../../openapi/util/create-response-schema';
|
import { createResponseSchema } from '../../openapi/util/create-response-schema';
|
||||||
import type { IAuthRequest, RequestBody } from '../unleash-types';
|
import type { RequestBody } from '../unleash-types';
|
||||||
import { createRequestSchema } from '../../openapi/util/create-request-schema';
|
import { createRequestSchema } from '../../openapi/util/create-request-schema';
|
||||||
import {
|
import {
|
||||||
validatedEdgeTokensSchema,
|
validatedEdgeTokensSchema,
|
||||||
type ValidatedEdgeTokensSchema,
|
type ValidatedEdgeTokensSchema,
|
||||||
} from '../../openapi/spec/validated-edge-tokens-schema';
|
} from '../../openapi/spec/validated-edge-tokens-schema';
|
||||||
import type ClientInstanceService from '../../features/metrics/instance/instance-service';
|
|
||||||
import type EdgeService from '../../services/edge-service';
|
import type EdgeService from '../../services/edge-service';
|
||||||
import type { OpenApiService } from '../../services/openapi-service';
|
import type { OpenApiService } from '../../services/openapi-service';
|
||||||
import {
|
import { getStandardResponses } from '../../openapi/util/standard-responses';
|
||||||
emptyResponse,
|
|
||||||
getStandardResponses,
|
|
||||||
} from '../../openapi/util/standard-responses';
|
|
||||||
import type { BulkMetricsSchema } from '../../openapi/spec/bulk-metrics-schema';
|
|
||||||
import type ClientMetricsServiceV2 from '../../features/metrics/client-metrics/metrics-service-v2';
|
|
||||||
import { clientMetricsEnvBulkSchema } from '../../features/metrics/shared/schema';
|
|
||||||
import type { TokenStringListSchema } from '../../openapi';
|
import type { TokenStringListSchema } from '../../openapi';
|
||||||
|
|
||||||
export default class EdgeController extends Controller {
|
export default class EdgeController extends Controller {
|
||||||
@ -33,34 +22,17 @@ export default class EdgeController extends Controller {
|
|||||||
|
|
||||||
private openApiService: OpenApiService;
|
private openApiService: OpenApiService;
|
||||||
|
|
||||||
private metricsV2: ClientMetricsServiceV2;
|
|
||||||
|
|
||||||
private clientInstanceService: ClientInstanceService;
|
|
||||||
|
|
||||||
private flagResolver: IFlagResolver;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
config: IUnleashConfig,
|
config: IUnleashConfig,
|
||||||
{
|
{
|
||||||
edgeService,
|
edgeService,
|
||||||
openApiService,
|
openApiService,
|
||||||
clientMetricsServiceV2,
|
}: Pick<IUnleashServices, 'edgeService' | 'openApiService'>,
|
||||||
clientInstanceService,
|
|
||||||
}: Pick<
|
|
||||||
IUnleashServices,
|
|
||||||
| 'edgeService'
|
|
||||||
| 'openApiService'
|
|
||||||
| 'clientMetricsServiceV2'
|
|
||||||
| 'clientInstanceService'
|
|
||||||
>,
|
|
||||||
) {
|
) {
|
||||||
super(config);
|
super(config);
|
||||||
this.logger = config.getLogger('edge-api/index.ts');
|
this.logger = config.getLogger('edge-api/index.ts');
|
||||||
this.edgeService = edgeService;
|
this.edgeService = edgeService;
|
||||||
this.openApiService = openApiService;
|
this.openApiService = openApiService;
|
||||||
this.metricsV2 = clientMetricsServiceV2;
|
|
||||||
this.clientInstanceService = clientInstanceService;
|
|
||||||
this.flagResolver = config.flagResolver;
|
|
||||||
|
|
||||||
this.route({
|
this.route({
|
||||||
method: 'post',
|
method: 'post',
|
||||||
@ -83,26 +55,6 @@ export default class EdgeController extends Controller {
|
|||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
this.route({
|
|
||||||
method: 'post',
|
|
||||||
path: '/metrics',
|
|
||||||
handler: this.bulkMetrics,
|
|
||||||
permission: NONE, // should have a permission but not bound to any environment
|
|
||||||
middleware: [
|
|
||||||
this.openApiService.validPath({
|
|
||||||
tags: ['Edge'],
|
|
||||||
summary: 'Send metrics from Edge',
|
|
||||||
description: `This operation accepts batched metrics from Edge. Metrics will be inserted into Unleash's metrics storage`,
|
|
||||||
operationId: 'bulkMetrics',
|
|
||||||
requestBody: createRequestSchema('bulkMetricsSchema'),
|
|
||||||
responses: {
|
|
||||||
202: emptyResponse,
|
|
||||||
...getStandardResponses(400, 413, 415),
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async getValidTokens(
|
async getValidTokens(
|
||||||
@ -117,42 +69,4 @@ export default class EdgeController extends Controller {
|
|||||||
tokens,
|
tokens,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async bulkMetrics(
|
|
||||||
req: IAuthRequest<void, void, BulkMetricsSchema>,
|
|
||||||
res: Response<void>,
|
|
||||||
): Promise<void> {
|
|
||||||
if (this.flagResolver.isEnabled('edgeBulkMetrics')) {
|
|
||||||
const { body, ip: clientIp } = req;
|
|
||||||
const { metrics, applications } = body;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const promises: Promise<void>[] = [];
|
|
||||||
for (const app of applications) {
|
|
||||||
promises.push(
|
|
||||||
this.clientInstanceService.registerClient(
|
|
||||||
app,
|
|
||||||
clientIp,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (metrics && metrics.length > 0) {
|
|
||||||
const data =
|
|
||||||
await clientMetricsEnvBulkSchema.validateAsync(metrics);
|
|
||||||
promises.push(this.metricsV2.registerBulkMetrics(data));
|
|
||||||
}
|
|
||||||
await Promise.all(promises);
|
|
||||||
res.status(202).end();
|
|
||||||
} catch (e) {
|
|
||||||
res.status(400).end();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// @ts-expect-error Expected result here is void, but since we want to communicate extra information in our 404, we allow this to avoid type-checking
|
|
||||||
res.status(404).json({
|
|
||||||
status: 'disabled',
|
|
||||||
reason: 'disabled by killswitch',
|
|
||||||
help: 'You should upgrade Edge to the most recent version to not lose metrics',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user