2021-10-08 10:09:22 +02:00
|
|
|
import { Request, Response } from 'express';
|
|
|
|
import Controller from '../controller';
|
|
|
|
import { IUnleashConfig } from '../../types/option';
|
2022-02-17 10:47:05 +01:00
|
|
|
import { IUnleashServices } from '../../types';
|
2021-10-08 10:09:22 +02:00
|
|
|
import { Logger } from '../../logger';
|
2021-12-09 21:50:06 +01:00
|
|
|
import ClientMetricsServiceV2 from '../../services/client-metrics/metrics-service-v2';
|
2021-10-08 10:09:22 +02:00
|
|
|
|
|
|
|
class ClientMetricsController extends Controller {
|
|
|
|
private logger: Logger;
|
|
|
|
|
|
|
|
private metrics: ClientMetricsServiceV2;
|
|
|
|
|
2022-02-17 10:47:05 +01:00
|
|
|
private static HOURS_BACK_MIN = 1;
|
|
|
|
|
|
|
|
private static HOURS_BACK_MAX = 48;
|
|
|
|
|
2021-10-08 10:09:22 +02:00
|
|
|
constructor(
|
|
|
|
config: IUnleashConfig,
|
|
|
|
{
|
|
|
|
clientMetricsServiceV2,
|
|
|
|
}: Pick<IUnleashServices, 'clientMetricsServiceV2'>,
|
|
|
|
) {
|
|
|
|
super(config);
|
|
|
|
this.logger = config.getLogger('/admin-api/client-metrics.ts');
|
|
|
|
|
|
|
|
this.metrics = clientMetricsServiceV2;
|
|
|
|
|
|
|
|
this.get('/features/:name/raw', this.getRawToggleMetrics);
|
|
|
|
this.get('/features/:name', this.getToggleMetricsSummary);
|
|
|
|
}
|
|
|
|
|
|
|
|
async getRawToggleMetrics(req: Request, res: Response): Promise<void> {
|
|
|
|
const { name } = req.params;
|
2022-02-17 10:47:05 +01:00
|
|
|
const { hoursBack } = req.query;
|
|
|
|
const data = await this.metrics.getClientMetricsForToggle(
|
|
|
|
name,
|
|
|
|
this.parseHoursBackQueryParam(hoursBack),
|
|
|
|
);
|
2021-10-08 10:09:22 +02:00
|
|
|
res.json({
|
|
|
|
version: 1,
|
2021-12-09 21:02:58 +01:00
|
|
|
maturity: 'stable',
|
2021-10-08 10:09:22 +02:00
|
|
|
data,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
async getToggleMetricsSummary(req: Request, res: Response): Promise<void> {
|
|
|
|
const { name } = req.params;
|
|
|
|
const data = await this.metrics.getFeatureToggleMetricsSummary(name);
|
|
|
|
res.json({
|
|
|
|
version: 1,
|
2021-12-09 21:02:58 +01:00
|
|
|
maturity: 'stable',
|
2021-10-08 10:09:22 +02:00
|
|
|
...data,
|
|
|
|
});
|
|
|
|
}
|
2022-02-17 10:47:05 +01:00
|
|
|
|
|
|
|
private parseHoursBackQueryParam(param: unknown): number | undefined {
|
|
|
|
if (typeof param !== 'string') {
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
|
|
|
|
const parsed = Number(param);
|
|
|
|
|
|
|
|
if (
|
|
|
|
parsed >= ClientMetricsController.HOURS_BACK_MIN &&
|
|
|
|
parsed <= ClientMetricsController.HOURS_BACK_MAX
|
|
|
|
) {
|
|
|
|
return parsed;
|
|
|
|
}
|
|
|
|
}
|
2021-10-08 10:09:22 +02:00
|
|
|
}
|
2022-02-17 10:47:05 +01:00
|
|
|
|
2021-10-08 10:09:22 +02:00
|
|
|
export default ClientMetricsController;
|