Migrate to MetricsService
Signed-off-by: Kurt King <kurtaking@gmail.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-events-backend-module-google-pubsub': patch
|
||||
---
|
||||
|
||||
Migrated internal metrics in `GooglePubSubConsumingEventPublisher` and `EventConsumingGooglePubSubPublisher` to use the new alpha `MetricsService`
|
||||
@@ -40,8 +40,7 @@
|
||||
"@backstage/filter-predicates": "workspace:^",
|
||||
"@backstage/plugin-events-node": "workspace:^",
|
||||
"@backstage/types": "workspace:^",
|
||||
"@google-cloud/pubsub": "^4.10.0",
|
||||
"@opentelemetry/api": "^1.9.0"
|
||||
"@google-cloud/pubsub": "^4.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/backend-defaults": "workspace:^",
|
||||
|
||||
+3
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
import { mockServices } from '@backstage/backend-test-utils';
|
||||
import { metricsServiceMock } from '@backstage/backend-test-utils/alpha';
|
||||
import { EventParams } from '@backstage/plugin-events-node';
|
||||
import { PubSub } from '@google-cloud/pubsub';
|
||||
import waitFor from 'wait-for-expect';
|
||||
@@ -23,6 +24,7 @@ import { EventConsumingGooglePubSubPublisher } from './EventConsumingGooglePubSu
|
||||
describe('EventConsumingGooglePubSubPublisher', () => {
|
||||
const logger = mockServices.logger.mock();
|
||||
const events = mockServices.events.mock();
|
||||
const metrics = metricsServiceMock.mock();
|
||||
|
||||
let onEvent: undefined | ((event: EventParams) => void);
|
||||
events.subscribe.mockImplementation(async options => {
|
||||
@@ -47,6 +49,7 @@ describe('EventConsumingGooglePubSubPublisher', () => {
|
||||
const publisher = new EventConsumingGooglePubSubPublisher({
|
||||
logger,
|
||||
events,
|
||||
metrics,
|
||||
tasks: [
|
||||
{
|
||||
id: 'my-id',
|
||||
|
||||
+12
-5
@@ -21,7 +21,10 @@ import {
|
||||
} from '@backstage/backend-plugin-api';
|
||||
import { EventsService } from '@backstage/plugin-events-node';
|
||||
import { PubSub } from '@google-cloud/pubsub';
|
||||
import { Counter, metrics } from '@opentelemetry/api';
|
||||
import type {
|
||||
MetricsService,
|
||||
MetricsServiceCounter,
|
||||
} from '@backstage/backend-plugin-api/alpha';
|
||||
import { readSubscriptionTasksFromConfig } from './config';
|
||||
import { EventContext, SubscriptionTask } from './types';
|
||||
import { JsonValue } from '@backstage/types';
|
||||
@@ -35,7 +38,9 @@ export class EventConsumingGooglePubSubPublisher {
|
||||
readonly #events: EventsService;
|
||||
readonly #tasks: SubscriptionTask[];
|
||||
readonly #pubSubFactory: (projectId: string) => PubSub;
|
||||
readonly #metrics: { messages: Counter };
|
||||
readonly #metrics: {
|
||||
messages: MetricsServiceCounter<{ subscription: string; status: string }>;
|
||||
};
|
||||
#activeClientsByProjectId: Map<string, PubSub>;
|
||||
|
||||
static create(options: {
|
||||
@@ -43,10 +48,12 @@ export class EventConsumingGooglePubSubPublisher {
|
||||
logger: LoggerService;
|
||||
rootLifecycle: RootLifecycleService;
|
||||
events: EventsService;
|
||||
metrics: MetricsService;
|
||||
}) {
|
||||
const publisher = new EventConsumingGooglePubSubPublisher({
|
||||
logger: options.logger,
|
||||
events: options.events,
|
||||
metrics: options.metrics,
|
||||
tasks: readSubscriptionTasksFromConfig(options.config),
|
||||
pubSubFactory: projectId => new PubSub({ projectId }),
|
||||
});
|
||||
@@ -65,6 +72,7 @@ export class EventConsumingGooglePubSubPublisher {
|
||||
constructor(options: {
|
||||
logger: LoggerService;
|
||||
events: EventsService;
|
||||
metrics: MetricsService;
|
||||
tasks: SubscriptionTask[];
|
||||
pubSubFactory: (projectId: string) => PubSub;
|
||||
}) {
|
||||
@@ -73,14 +81,13 @@ export class EventConsumingGooglePubSubPublisher {
|
||||
this.#tasks = options.tasks;
|
||||
this.#pubSubFactory = options.pubSubFactory;
|
||||
|
||||
const meter = metrics.getMeter('default');
|
||||
this.#metrics = {
|
||||
messages: meter.createCounter(
|
||||
messages: options.metrics.createCounter(
|
||||
'events.google.pubsub.publisher.messages.total',
|
||||
{
|
||||
description:
|
||||
'Number of Pub/Sub messages sent by EventConsumingGooglePubSubPublisher',
|
||||
unit: 'short',
|
||||
unit: '{message}',
|
||||
},
|
||||
),
|
||||
};
|
||||
|
||||
+4
-1
@@ -18,6 +18,7 @@ import {
|
||||
coreServices,
|
||||
createBackendModule,
|
||||
} from '@backstage/backend-plugin-api';
|
||||
import { metricsServiceRef } from '@backstage/backend-plugin-api/alpha';
|
||||
import { eventsServiceRef } from '@backstage/plugin-events-node';
|
||||
import { EventConsumingGooglePubSubPublisher } from './EventConsumingGooglePubSubPublisher';
|
||||
|
||||
@@ -38,13 +39,15 @@ export const eventsModuleEventConsumingGooglePubSubPublisher =
|
||||
logger: coreServices.logger,
|
||||
rootLifecycle: coreServices.rootLifecycle,
|
||||
events: eventsServiceRef,
|
||||
metrics: metricsServiceRef,
|
||||
},
|
||||
async init({ config, logger, rootLifecycle, events }) {
|
||||
async init({ config, logger, rootLifecycle, events, metrics }) {
|
||||
EventConsumingGooglePubSubPublisher.create({
|
||||
config,
|
||||
logger,
|
||||
rootLifecycle,
|
||||
events,
|
||||
metrics,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
+3
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
import { mockServices } from '@backstage/backend-test-utils';
|
||||
import { metricsServiceMock } from '@backstage/backend-test-utils/alpha';
|
||||
import { Message, PubSub } from '@google-cloud/pubsub';
|
||||
import { GooglePubSubConsumingEventPublisher } from './GooglePubSubConsumingEventPublisher';
|
||||
import { JsonObject } from '@backstage/types';
|
||||
@@ -36,6 +37,7 @@ function makeMessage(
|
||||
describe('GooglePubSubConsumingEventPublisher', () => {
|
||||
const logger = mockServices.logger.mock();
|
||||
const events = mockServices.events.mock();
|
||||
const metrics = metricsServiceMock.mock();
|
||||
|
||||
let onMessage: undefined | ((message: Message) => void);
|
||||
const subscription = {
|
||||
@@ -62,6 +64,7 @@ describe('GooglePubSubConsumingEventPublisher', () => {
|
||||
const publisher = new GooglePubSubConsumingEventPublisher({
|
||||
logger,
|
||||
events,
|
||||
metrics,
|
||||
tasks: [
|
||||
{
|
||||
id: 'my-id',
|
||||
|
||||
+12
-5
@@ -23,7 +23,10 @@ import { ForwardedError } from '@backstage/errors';
|
||||
import { EventParams, EventsService } from '@backstage/plugin-events-node';
|
||||
import { JsonValue } from '@backstage/types';
|
||||
import { Message, PubSub, Subscription } from '@google-cloud/pubsub';
|
||||
import { Counter, metrics } from '@opentelemetry/api';
|
||||
import type {
|
||||
MetricsService,
|
||||
MetricsServiceCounter,
|
||||
} from '@backstage/backend-plugin-api/alpha';
|
||||
import { readSubscriptionTasksFromConfig } from './config';
|
||||
import { MessageContext, SubscriptionTask } from './types';
|
||||
|
||||
@@ -36,7 +39,9 @@ export class GooglePubSubConsumingEventPublisher {
|
||||
readonly #events: EventsService;
|
||||
readonly #tasks: SubscriptionTask[];
|
||||
readonly #pubSubFactory: (projectId: string) => PubSub;
|
||||
readonly #metrics: { messages: Counter };
|
||||
readonly #metrics: {
|
||||
messages: MetricsServiceCounter<{ subscription: string; status: string }>;
|
||||
};
|
||||
#activeClientsByProjectId: Map<string, PubSub>;
|
||||
#activeSubscriptions: Subscription[];
|
||||
|
||||
@@ -45,10 +50,12 @@ export class GooglePubSubConsumingEventPublisher {
|
||||
logger: LoggerService;
|
||||
rootLifecycle: RootLifecycleService;
|
||||
events: EventsService;
|
||||
metrics: MetricsService;
|
||||
}) {
|
||||
const publisher = new GooglePubSubConsumingEventPublisher({
|
||||
logger: options.logger,
|
||||
events: options.events,
|
||||
metrics: options.metrics,
|
||||
tasks: readSubscriptionTasksFromConfig(options.config),
|
||||
pubSubFactory: projectId => new PubSub({ projectId }),
|
||||
});
|
||||
@@ -67,6 +74,7 @@ export class GooglePubSubConsumingEventPublisher {
|
||||
constructor(options: {
|
||||
logger: LoggerService;
|
||||
events: EventsService;
|
||||
metrics: MetricsService;
|
||||
tasks: SubscriptionTask[];
|
||||
pubSubFactory: (projectId: string) => PubSub;
|
||||
}) {
|
||||
@@ -75,14 +83,13 @@ export class GooglePubSubConsumingEventPublisher {
|
||||
this.#tasks = options.tasks;
|
||||
this.#pubSubFactory = options.pubSubFactory;
|
||||
|
||||
const meter = metrics.getMeter('default');
|
||||
this.#metrics = {
|
||||
messages: meter.createCounter(
|
||||
messages: options.metrics.createCounter(
|
||||
'events.google.pubsub.consumer.messages.total',
|
||||
{
|
||||
description:
|
||||
'Number of Pub/Sub messages received by GooglePubSubConsumingEventPublisher',
|
||||
unit: 'short',
|
||||
unit: '{message}',
|
||||
},
|
||||
),
|
||||
};
|
||||
|
||||
+4
-1
@@ -18,6 +18,7 @@ import {
|
||||
coreServices,
|
||||
createBackendModule,
|
||||
} from '@backstage/backend-plugin-api';
|
||||
import { metricsServiceRef } from '@backstage/backend-plugin-api/alpha';
|
||||
import { eventsServiceRef } from '@backstage/plugin-events-node';
|
||||
import { GooglePubSubConsumingEventPublisher } from './GooglePubSubConsumingEventPublisher';
|
||||
|
||||
@@ -36,13 +37,15 @@ export const eventsModuleGooglePubsubConsumingEventPublisher =
|
||||
logger: coreServices.logger,
|
||||
rootLifecycle: coreServices.rootLifecycle,
|
||||
events: eventsServiceRef,
|
||||
metrics: metricsServiceRef,
|
||||
},
|
||||
async init({ config, logger, rootLifecycle, events }) {
|
||||
async init({ config, logger, rootLifecycle, events, metrics }) {
|
||||
GooglePubSubConsumingEventPublisher.create({
|
||||
config,
|
||||
logger,
|
||||
rootLifecycle,
|
||||
events,
|
||||
metrics,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user