UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.

74 lines 3.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const controller_1 = __importDefault(require("../controller")); const permissions_1 = require("../../types/permissions"); const create_response_schema_1 = require("../../openapi/util/create-response-schema"); const serialize_dates_1 = require("../../types/serialize-dates"); const feature_usage_schema_1 = require("../../openapi/spec/feature-usage-schema"); const feature_metrics_schema_1 = require("../../openapi/spec/feature-metrics-schema"); class ClientMetricsController extends controller_1.default { constructor(config, { clientMetricsServiceV2, openApiService, }) { super(config); this.logger = config.getLogger('/admin-api/client-metrics.ts'); this.metrics = clientMetricsServiceV2; this.openApiService = openApiService; this.route({ method: 'get', path: '/features/:name/raw', handler: this.getRawToggleMetrics, permission: permissions_1.NONE, middleware: [ openApiService.validPath({ operationId: 'getRawFeatureMetrics', tags: ['Metrics'], responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureMetricsSchema'), }, }), ], }); this.route({ method: 'get', path: '/features/:name', handler: this.getToggleMetricsSummary, permission: permissions_1.NONE, middleware: [ openApiService.validPath({ operationId: 'getFeatureUsageSummary', tags: ['Metrics'], responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureUsageSchema'), }, }), ], }); } async getRawToggleMetrics(req, res) { const { name } = req.params; const { hoursBack } = req.query; const data = await this.metrics.getClientMetricsForToggle(name, this.parseHoursBackQueryParam(hoursBack)); this.openApiService.respondWithValidation(200, res, feature_metrics_schema_1.featureMetricsSchema.$id, { version: 1, maturity: 'stable', data: (0, serialize_dates_1.serializeDates)(data) }); } async getToggleMetricsSummary(req, res) { const { name } = req.params; const data = await this.metrics.getFeatureToggleMetricsSummary(name); this.openApiService.respondWithValidation(200, res, feature_usage_schema_1.featureUsageSchema.$id, { version: 1, maturity: 'stable', ...(0, serialize_dates_1.serializeDates)(data) }); } parseHoursBackQueryParam(param) { if (typeof param !== 'string') { return undefined; } const parsed = Number(param); if (parsed >= ClientMetricsController.HOURS_BACK_MIN && parsed <= ClientMetricsController.HOURS_BACK_MAX) { return parsed; } } } ClientMetricsController.HOURS_BACK_MIN = 1; ClientMetricsController.HOURS_BACK_MAX = 48; exports.default = ClientMetricsController; //# sourceMappingURL=client-metrics.js.map