mirror of
https://github.com/Unleash/unleash.git
synced 2025-06-04 01:18:20 +02:00
fix: add a metric to track client registrations (#9314)
Adding a counter to track every time a client registers with Unleash.
This commit is contained in:
parent
edd03d02dd
commit
3f730bb7f3
@ -1,3 +1,4 @@
|
|||||||
|
import type EventEmitter from 'events';
|
||||||
import { APPLICATION_CREATED, CLIENT_REGISTER } from '../../../types/events';
|
import { APPLICATION_CREATED, CLIENT_REGISTER } from '../../../types/events';
|
||||||
import type { IApplication, IApplicationOverview } from './models';
|
import type { IApplication, IApplicationOverview } from './models';
|
||||||
import type { IUnleashStores } from '../../../types/stores';
|
import type { IUnleashStores } from '../../../types/stores';
|
||||||
@ -24,6 +25,7 @@ import { ALL_PROJECTS, parseStrictSemVer } from '../../../util';
|
|||||||
import type { Logger } from '../../../logger';
|
import type { Logger } from '../../../logger';
|
||||||
import { findOutdatedSDKs, isOutdatedSdk } from './findOutdatedSdks';
|
import { findOutdatedSDKs, isOutdatedSdk } from './findOutdatedSdks';
|
||||||
import type { OutdatedSdksSchema } from '../../../openapi/spec/outdated-sdks-schema';
|
import type { OutdatedSdksSchema } from '../../../openapi/spec/outdated-sdks-schema';
|
||||||
|
import { CLIENT_REGISTERED } from '../../../metric-events';
|
||||||
|
|
||||||
export default class ClientInstanceService {
|
export default class ClientInstanceService {
|
||||||
apps = {};
|
apps = {};
|
||||||
@ -48,6 +50,8 @@ export default class ClientInstanceService {
|
|||||||
|
|
||||||
private flagResolver: IFlagResolver;
|
private flagResolver: IFlagResolver;
|
||||||
|
|
||||||
|
private eventBus: EventEmitter;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
{
|
{
|
||||||
clientMetricsStoreV2,
|
clientMetricsStoreV2,
|
||||||
@ -68,7 +72,8 @@ export default class ClientInstanceService {
|
|||||||
{
|
{
|
||||||
getLogger,
|
getLogger,
|
||||||
flagResolver,
|
flagResolver,
|
||||||
}: Pick<IUnleashConfig, 'getLogger' | 'flagResolver'>,
|
eventBus,
|
||||||
|
}: Pick<IUnleashConfig, 'getLogger' | 'flagResolver' | 'eventBus'>,
|
||||||
privateProjectChecker: IPrivateProjectChecker,
|
privateProjectChecker: IPrivateProjectChecker,
|
||||||
) {
|
) {
|
||||||
this.clientMetricsStoreV2 = clientMetricsStoreV2;
|
this.clientMetricsStoreV2 = clientMetricsStoreV2;
|
||||||
@ -77,6 +82,7 @@ export default class ClientInstanceService {
|
|||||||
this.clientApplicationsStore = clientApplicationsStore;
|
this.clientApplicationsStore = clientApplicationsStore;
|
||||||
this.clientInstanceStore = clientInstanceStore;
|
this.clientInstanceStore = clientInstanceStore;
|
||||||
this.eventStore = eventStore;
|
this.eventStore = eventStore;
|
||||||
|
this.eventBus = eventBus;
|
||||||
this.privateProjectChecker = privateProjectChecker;
|
this.privateProjectChecker = privateProjectChecker;
|
||||||
this.flagResolver = flagResolver;
|
this.flagResolver = flagResolver;
|
||||||
this.logger = getLogger(
|
this.logger = getLogger(
|
||||||
@ -105,6 +111,7 @@ export default class ClientInstanceService {
|
|||||||
value.clientIp = clientIp;
|
value.clientIp = clientIp;
|
||||||
value.createdBy = SYSTEM_USER.username!;
|
value.createdBy = SYSTEM_USER.username!;
|
||||||
this.seenClients[this.clientKey(value)] = value;
|
this.seenClients[this.clientKey(value)] = value;
|
||||||
|
this.eventBus.emit(CLIENT_REGISTERED, value);
|
||||||
|
|
||||||
if (value.sdkVersion && value.sdkVersion.indexOf(':') > -1) {
|
if (value.sdkVersion && value.sdkVersion.indexOf(':') > -1) {
|
||||||
const [sdkName, sdkVersion] = value.sdkVersion.split(':');
|
const [sdkName, sdkVersion] = value.sdkVersion.split(':');
|
||||||
|
@ -19,6 +19,7 @@ const CLIENT_METRICS_NAMEPREFIX = 'client-api-nameprefix';
|
|||||||
const CLIENT_METRICS_TAGS = 'client-api-tags';
|
const CLIENT_METRICS_TAGS = 'client-api-tags';
|
||||||
const CLIENT_FEATURES_MEMORY = 'client_features_memory';
|
const CLIENT_FEATURES_MEMORY = 'client_features_memory';
|
||||||
const CLIENT_DELTA_MEMORY = 'client_delta_memory';
|
const CLIENT_DELTA_MEMORY = 'client_delta_memory';
|
||||||
|
const CLIENT_REGISTERED = 'client_registered';
|
||||||
|
|
||||||
type MetricEvent =
|
type MetricEvent =
|
||||||
| typeof REQUEST_TIME
|
| typeof REQUEST_TIME
|
||||||
@ -91,6 +92,7 @@ export {
|
|||||||
CLIENT_METRICS_TAGS,
|
CLIENT_METRICS_TAGS,
|
||||||
CLIENT_FEATURES_MEMORY,
|
CLIENT_FEATURES_MEMORY,
|
||||||
CLIENT_DELTA_MEMORY,
|
CLIENT_DELTA_MEMORY,
|
||||||
|
CLIENT_REGISTERED,
|
||||||
type MetricEvent,
|
type MetricEvent,
|
||||||
type MetricEventPayload,
|
type MetricEventPayload,
|
||||||
emitMetricEvent,
|
emitMetricEvent,
|
||||||
|
@ -169,6 +169,11 @@ export function registerPrometheusMetrics(
|
|||||||
help: 'Number of times a feature flag has been used',
|
help: 'Number of times a feature flag has been used',
|
||||||
labelNames: ['toggle', 'active', 'appName'],
|
labelNames: ['toggle', 'active', 'appName'],
|
||||||
});
|
});
|
||||||
|
const clientRegistrationTotal = createCounter({
|
||||||
|
name: 'client_registration_total',
|
||||||
|
help: 'Number of times a an application have registered',
|
||||||
|
labelNames: ['appName', 'environment'],
|
||||||
|
});
|
||||||
|
|
||||||
dbMetrics.registerGaugeDbMetric({
|
dbMetrics.registerGaugeDbMetric({
|
||||||
name: 'feature_toggles_total',
|
name: 'feature_toggles_total',
|
||||||
@ -807,6 +812,9 @@ export function registerPrometheusMetrics(
|
|||||||
clientDeltaMemory.reset();
|
clientDeltaMemory.reset();
|
||||||
clientDeltaMemory.set(event.memory);
|
clientDeltaMemory.set(event.memory);
|
||||||
});
|
});
|
||||||
|
eventBus.on(events.CLIENT_REGISTERED, ({ appName, environment }) => {
|
||||||
|
clientRegistrationTotal.labels({ appName, environment }).inc();
|
||||||
|
});
|
||||||
|
|
||||||
events.onMetricEvent(
|
events.onMetricEvent(
|
||||||
eventBus,
|
eventBus,
|
||||||
|
Loading…
Reference in New Issue
Block a user