diff --git a/src/lib/routes/client-api/metrics.ts b/src/lib/routes/client-api/metrics.ts index c879e2d975..253d7f2408 100644 --- a/src/lib/routes/client-api/metrics.ts +++ b/src/lib/routes/client-api/metrics.ts @@ -65,11 +65,14 @@ export default class ClientMetricsController extends Controller { } async registerMetrics(req: IAuthRequest, res: Response): Promise { - const { body: data, ip: clientIp, user } = req; - data.environment = this.metricsV2.resolveMetricsEnvironment(user, data); - await this.clientInstanceService.registerInstance(data, clientIp); - try { + const { body: data, ip: clientIp, user } = req; + data.environment = this.metricsV2.resolveMetricsEnvironment( + user, + data, + ); + await this.clientInstanceService.registerInstance(data, clientIp); + await this.metricsV2.registerClientMetrics(data, clientIp); res.status(202).end(); } catch (e) { diff --git a/src/lib/services/client-metrics/metrics-service-v2.ts b/src/lib/services/client-metrics/metrics-service-v2.ts index bf545aa433..308c4192dc 100644 --- a/src/lib/services/client-metrics/metrics-service-v2.ts +++ b/src/lib/services/client-metrics/metrics-service-v2.ts @@ -20,6 +20,8 @@ import { collapseHourlyMetrics } from '../../util/collapseHourlyMetrics'; import { LastSeenService } from './last-seen-service'; import { generateHourBuckets } from '../../util/time-utils'; import { ClientMetricsSchema } from 'lib/openapi'; +import { nameSchema } from '../../schema/feature-schema'; +import { BadDataError } from '../../error'; export default class ClientMetricsServiceV2 { private config: IUnleashConfig; @@ -81,6 +83,14 @@ export default class ClientMetricsServiceV2 { ), ); + for (const toggle of toggleNames) { + if (!(await nameSchema.validateAsync({ name: toggle }))) { + throw new BadDataError( + `Invalid feature toggle name "${toggle}"`, + ); + } + } + this.logger.debug(`got metrics from ${clientIp}`); const clientMetrics: IClientMetricsEnv[] = toggleNames.map((name) => ({