mirror of
https://github.com/Unleash/unleash.git
synced 2025-03-18 00:19:49 +01:00
feat: add prom metrics (#8980)
This PR adds prometheus metrics that allows us to see whether or not tags and namePrefix is used at all in our cloud offering.
This commit is contained in:
parent
b1cced77c2
commit
39ca516823
@ -23,6 +23,7 @@ import type { OpenApiService } from '../../services/openapi-service';
|
|||||||
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 { ClientFeaturesQuerySchema } from '../../openapi/spec/client-features-query-schema';
|
import type { ClientFeaturesQuerySchema } from '../../openapi/spec/client-features-query-schema';
|
||||||
|
import type EventEmitter from 'events';
|
||||||
import {
|
import {
|
||||||
clientFeatureSchema,
|
clientFeatureSchema,
|
||||||
type ClientFeatureSchema,
|
type ClientFeatureSchema,
|
||||||
@ -33,6 +34,10 @@ import {
|
|||||||
} from '../../openapi/spec/client-features-schema';
|
} from '../../openapi/spec/client-features-schema';
|
||||||
import type ConfigurationRevisionService from '../feature-toggle/configuration-revision-service';
|
import type ConfigurationRevisionService from '../feature-toggle/configuration-revision-service';
|
||||||
import type { ClientFeatureToggleService } from './client-feature-toggle-service';
|
import type { ClientFeatureToggleService } from './client-feature-toggle-service';
|
||||||
|
import {
|
||||||
|
CLIENT_METRICS_NAMEPREFIX,
|
||||||
|
CLIENT_METRICS_TAGS,
|
||||||
|
} from '../../internals';
|
||||||
|
|
||||||
const version = 2;
|
const version = 2;
|
||||||
|
|
||||||
@ -62,6 +67,8 @@ export default class FeatureController extends Controller {
|
|||||||
|
|
||||||
private flagResolver: IFlagResolver;
|
private flagResolver: IFlagResolver;
|
||||||
|
|
||||||
|
private eventBus: EventEmitter;
|
||||||
|
|
||||||
private featuresAndSegments: (
|
private featuresAndSegments: (
|
||||||
query: IFeatureToggleQuery,
|
query: IFeatureToggleQuery,
|
||||||
etag: string,
|
etag: string,
|
||||||
@ -92,6 +99,7 @@ export default class FeatureController extends Controller {
|
|||||||
this.configurationRevisionService = configurationRevisionService;
|
this.configurationRevisionService = configurationRevisionService;
|
||||||
this.featureToggleService = featureToggleService;
|
this.featureToggleService = featureToggleService;
|
||||||
this.flagResolver = config.flagResolver;
|
this.flagResolver = config.flagResolver;
|
||||||
|
this.eventBus = config.eventBus;
|
||||||
this.logger = config.getLogger('client-api/feature.js');
|
this.logger = config.getLogger('client-api/feature.js');
|
||||||
|
|
||||||
this.route({
|
this.route({
|
||||||
@ -210,6 +218,14 @@ export default class FeatureController extends Controller {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (namePrefix) {
|
||||||
|
this.eventBus.emit(CLIENT_METRICS_NAMEPREFIX);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tag) {
|
||||||
|
this.eventBus.emit(CLIENT_METRICS_TAGS);
|
||||||
|
}
|
||||||
|
|
||||||
const tagQuery = this.paramToArray(tag);
|
const tagQuery = this.paramToArray(tag);
|
||||||
const projectQuery = this.paramToArray(project);
|
const projectQuery = this.paramToArray(project);
|
||||||
const query = await querySchema.validateAsync({
|
const query = await querySchema.validateAsync({
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import type EventEmitter from 'events';
|
import type EventEmitter from 'events';
|
||||||
|
import { CLIENT_METRICS } from './internals';
|
||||||
|
|
||||||
const REQUEST_TIME = 'request_time';
|
const REQUEST_TIME = 'request_time';
|
||||||
const DB_TIME = 'db_time';
|
const DB_TIME = 'db_time';
|
||||||
@ -14,6 +15,8 @@ const USER_LOGIN = 'user-login' as const;
|
|||||||
const EXCEEDS_LIMIT = 'exceeds-limit' as const;
|
const EXCEEDS_LIMIT = 'exceeds-limit' as const;
|
||||||
const REQUEST_ORIGIN = 'request_origin' as const;
|
const REQUEST_ORIGIN = 'request_origin' as const;
|
||||||
const ADDON_EVENTS_HANDLED = 'addon-event-handled' as const;
|
const ADDON_EVENTS_HANDLED = 'addon-event-handled' as const;
|
||||||
|
const CLIENT_METRICS_NAMEPREFIX = 'client-api-nameprefix';
|
||||||
|
const CLIENT_METRICS_TAGS = 'client-api-tags';
|
||||||
|
|
||||||
type MetricEvent =
|
type MetricEvent =
|
||||||
| typeof REQUEST_TIME
|
| typeof REQUEST_TIME
|
||||||
@ -28,7 +31,9 @@ type MetricEvent =
|
|||||||
| typeof STAGE_ENTERED
|
| typeof STAGE_ENTERED
|
||||||
| typeof USER_LOGIN
|
| typeof USER_LOGIN
|
||||||
| typeof EXCEEDS_LIMIT
|
| typeof EXCEEDS_LIMIT
|
||||||
| typeof REQUEST_ORIGIN;
|
| typeof REQUEST_ORIGIN
|
||||||
|
| typeof CLIENT_METRICS_NAMEPREFIX
|
||||||
|
| typeof CLIENT_METRICS_TAGS;
|
||||||
|
|
||||||
type RequestOriginEventPayload = {
|
type RequestOriginEventPayload = {
|
||||||
type: 'UI' | 'API';
|
type: 'UI' | 'API';
|
||||||
@ -76,6 +81,8 @@ export {
|
|||||||
EXCEEDS_LIMIT,
|
EXCEEDS_LIMIT,
|
||||||
REQUEST_ORIGIN,
|
REQUEST_ORIGIN,
|
||||||
ADDON_EVENTS_HANDLED,
|
ADDON_EVENTS_HANDLED,
|
||||||
|
CLIENT_METRICS_NAMEPREFIX,
|
||||||
|
CLIENT_METRICS_TAGS,
|
||||||
type MetricEvent,
|
type MetricEvent,
|
||||||
type MetricEventPayload,
|
type MetricEventPayload,
|
||||||
emitMetricEvent,
|
emitMetricEvent,
|
||||||
|
@ -504,6 +504,16 @@ export function registerPrometheusMetrics(
|
|||||||
})
|
})
|
||||||
.set(config.rateLimiting.callSignalEndpointMaxPerSecond * 60);
|
.set(config.rateLimiting.callSignalEndpointMaxPerSecond * 60);
|
||||||
|
|
||||||
|
const namePrefixUsed = createCounter({
|
||||||
|
name: 'nameprefix_count',
|
||||||
|
help: 'Count of nameprefix usage in client api',
|
||||||
|
});
|
||||||
|
|
||||||
|
const tagsUsed = createCounter({
|
||||||
|
name: 'tags_count',
|
||||||
|
help: 'Count of tags usage in client api',
|
||||||
|
});
|
||||||
|
|
||||||
const featureCreatedByMigration = createCounter({
|
const featureCreatedByMigration = createCounter({
|
||||||
name: 'feature_created_by_migration_count',
|
name: 'feature_created_by_migration_count',
|
||||||
help: 'Feature createdBy migration count',
|
help: 'Feature createdBy migration count',
|
||||||
@ -734,6 +744,14 @@ export function registerPrometheusMetrics(
|
|||||||
mapFeaturesForClientDuration.observe(duration);
|
mapFeaturesForClientDuration.observe(duration);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
eventBus.on(events.CLIENT_METRICS_NAMEPREFIX, () => {
|
||||||
|
namePrefixUsed.inc();
|
||||||
|
});
|
||||||
|
|
||||||
|
eventBus.on(events.CLIENT_METRICS_TAGS, () => {
|
||||||
|
tagsUsed.inc();
|
||||||
|
});
|
||||||
|
|
||||||
events.onMetricEvent(
|
events.onMetricEvent(
|
||||||
eventBus,
|
eventBus,
|
||||||
events.REQUEST_ORIGIN,
|
events.REQUEST_ORIGIN,
|
||||||
|
Loading…
Reference in New Issue
Block a user