All files / src/lib/routes/client-api metrics.ts

90.91% Statements 20/22
33.33% Branches 2/6
100% Functions 3/3
90.91% Lines 20/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63  59x           59x 59x       59x   59x                                 142x 142x   142x 142x 142x   142x       15x 5x 5x         10x       15x 15x 15x   12x   12x      
import { Response } from 'express';
import Controller from '../controller';
import { IUnleashServices } from '../../types';
import { IUnleashConfig } from '../../types/option';
import ClientInstanceService from '../../services/client-metrics/instance-service';
import { Logger } from '../../logger';
import { IAuthRequest } from '../unleash-types';
import ApiUser from '../../types/api-user';
import { ALL } from '../../types/models/api-token';
import ClientMetricsServiceV2 from '../../services/client-metrics/metrics-service-v2';
import { User } from '../../server-impl';
import { IClientApp } from '../../types/model';
import { NONE } from '../../types/permissions';
 
export default class ClientMetricsController extends Controller {
    logger: Logger;
 
    clientInstanceService: ClientInstanceService;
 
    metricsV2: ClientMetricsServiceV2;
 
    constructor(
        {
            clientInstanceService,
            clientMetricsServiceV2,
        }: Pick<
            IUnleashServices,
            'clientInstanceService' | 'clientMetricsServiceV2'
        >,
        config: IUnleashConfig,
    ) {
        super(config);
        const { getLogger } = config;
 
        this.logger = getLogger('/api/client/metrics');
        this.clientInstanceService = clientInstanceService;
        this.metricsV2 = clientMetricsServiceV2;
 
        this.post('/', this.registerMetrics, NONE);
    }
 
    private resolveEnvironment(user: User, data: IClientApp) {
        if (user instanceof ApiUser) {
            if (user.environment !== ALL) {
                return user.environment;
            } else IEif (user.environment === ALL && data.environment) {
                return data.environment;
            }
        }
        return 'default';
    }
 
    async registerMetrics(req: IAuthRequest, res: Response): Promise<void> {
        const { body: data, ip: clientIp, user } = req;
        data.environment = this.resolveEnvironment(user, data);
        await this.clientInstanceService.registerInstance(data, clientIp);
 
        await this.metricsV2.registerClientMetrics(data, clientIp);
 
        return res.status(202).end();
    }
}