From 42c791d2696bf390829ceadabbab88c4cc98d67f Mon Sep 17 00:00:00 2001 From: Alex Gherghisan Date: Thu, 22 Aug 2024 16:22:54 +0000 Subject: [PATCH] fix: wait for resource attributes --- docker-compose.yml | 4 ++-- .../aztec/src/cli/cmds/start_archiver.ts | 2 +- yarn-project/aztec/src/cli/cmds/start_node.ts | 2 +- .../aztec/src/cli/cmds/start_prover_agent.ts | 2 +- .../aztec/src/cli/cmds/start_prover_node.ts | 2 +- yarn-project/aztec/src/sandbox.ts | 2 +- .../src/fixtures/snapshot_manager.ts | 4 ++-- yarn-project/end-to-end/src/fixtures/utils.ts | 6 ++++-- yarn-project/telemetry-client/src/otel.ts | 18 ++++++++---------- yarn-project/telemetry-client/src/start.ts | 4 ++-- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index c894ed45b8e..2e44e214ba7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -173,8 +173,8 @@ configs: prometheus-config: content: | global: - evaluation_interval: 30s - scrape_interval: 10s + evaluation_interval: 15s + scrape_interval: 15s scrape_configs: - job_name: otel-collector static_configs: diff --git a/yarn-project/aztec/src/cli/cmds/start_archiver.ts b/yarn-project/aztec/src/cli/cmds/start_archiver.ts index 95ad83b9972..a8675164ae1 100644 --- a/yarn-project/aztec/src/cli/cmds/start_archiver.ts +++ b/yarn-project/aztec/src/cli/cmds/start_archiver.ts @@ -25,7 +25,7 @@ export const startArchiver = async (options: any, signalHandlers: (() => Promise const store = await createStore(archiverConfig, rollupAddress, storeLog); const archiverStore = new KVArchiverDataStore(store, archiverConfig.maxLogs); - const telemetry = createAndStartTelemetryClient(getTelemetryClientConfig()); + const telemetry = await createAndStartTelemetryClient(getTelemetryClientConfig()); const archiver = await Archiver.createAndSync(archiverConfig, archiverStore, telemetry, true); const archiverServer = createArchiverRpcServer(archiver); services.push({ archiver: archiverServer }); diff --git a/yarn-project/aztec/src/cli/cmds/start_node.ts b/yarn-project/aztec/src/cli/cmds/start_node.ts index b4279d7b2d7..c6f9814bc07 100644 --- a/yarn-project/aztec/src/cli/cmds/start_node.ts +++ b/yarn-project/aztec/src/cli/cmds/start_node.ts @@ -91,7 +91,7 @@ export const startNode = async ( } const telemetryConfig = extractRelevantOptions(options, telemetryClientConfigMappings, 'tel'); - const telemetryClient = createAndStartTelemetryClient(telemetryConfig); + const telemetryClient = await createAndStartTelemetryClient(telemetryConfig); // Create and start Aztec Node. const node = await createAztecNode(nodeConfig, telemetryClient); diff --git a/yarn-project/aztec/src/cli/cmds/start_prover_agent.ts b/yarn-project/aztec/src/cli/cmds/start_prover_agent.ts index f6c73503816..0a6534fae54 100644 --- a/yarn-project/aztec/src/cli/cmds/start_prover_agent.ts +++ b/yarn-project/aztec/src/cli/cmds/start_prover_agent.ts @@ -21,7 +21,7 @@ export const startProverAgent: ServiceStarter = async (options, signalHandlers, const source = createProvingJobSourceClient(proverConfig.nodeUrl, 'provingJobSource'); const telemetryConfig = extractRelevantOptions(options, telemetryClientConfigMappings, 'tel'); - const telemetry = createAndStartTelemetryClient(telemetryConfig); + const telemetry = await createAndStartTelemetryClient(telemetryConfig); let circuitProver: ServerCircuitProver; if (proverConfig.realProofs) { diff --git a/yarn-project/aztec/src/cli/cmds/start_prover_node.ts b/yarn-project/aztec/src/cli/cmds/start_prover_node.ts index 1c22e3d7308..539fc44bffa 100644 --- a/yarn-project/aztec/src/cli/cmds/start_prover_node.ts +++ b/yarn-project/aztec/src/cli/cmds/start_prover_node.ts @@ -70,7 +70,7 @@ export const startProverNode = async ( proverConfig.l1Contracts = await createAztecNodeClient(nodeUrl).getL1ContractAddresses(); } - const telemetry = createAndStartTelemetryClient(getTelemetryClientConfig()); + const telemetry = await createAndStartTelemetryClient(getTelemetryClientConfig()); const proverNode = await createProverNode(proverConfig, { telemetry }); services.push({ node: createProverNodeRpcServer(proverNode) }); diff --git a/yarn-project/aztec/src/sandbox.ts b/yarn-project/aztec/src/sandbox.ts index c3f18cd4c60..c50bae06142 100644 --- a/yarn-project/aztec/src/sandbox.ts +++ b/yarn-project/aztec/src/sandbox.ts @@ -170,7 +170,7 @@ export async function createSandbox(config: Partial = {}) { await deployContractsToL1(aztecNodeConfig, hdAccount); } - const client = createAndStartTelemetryClient(getTelemetryClientConfig()); + const client = await createAndStartTelemetryClient(getTelemetryClientConfig()); const node = await createAztecNode(aztecNodeConfig, client); const pxe = await createAztecPXE(node); diff --git a/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts b/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts index 287effeb7c3..c57f8fe542c 100644 --- a/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts +++ b/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts @@ -325,7 +325,7 @@ async function setupFromFresh( aztecNodeConfig.bbWorkingDirectory = bbConfig.bbWorkingDirectory; } - const telemetry = createAndStartTelemetryClient(getTelemetryConfig()); + const telemetry = await createAndStartTelemetryClient(getTelemetryConfig()); logger.verbose('Creating and synching an aztec node...'); const aztecNode = await AztecNodeService.createAndSync(aztecNodeConfig, telemetry); @@ -408,7 +408,7 @@ async function setupFromState(statePath: string, logger: Logger): Promise { - await telemetry.stop(); + const client = await telemetryPromise; + await client.stop(); }); } @@ -395,6 +396,7 @@ export async function setup( } config.l1PublishRetryIntervalMS = 100; + const telemetry = await telemetryPromise; const aztecNode = await AztecNodeService.createAndSync(config, telemetry); const sequencer = aztecNode.getSequencer(); diff --git a/yarn-project/telemetry-client/src/otel.ts b/yarn-project/telemetry-client/src/otel.ts index fb2218d7ac5..7f40b35038e 100644 --- a/yarn-project/telemetry-client/src/otel.ts +++ b/yarn-project/telemetry-client/src/otel.ts @@ -62,14 +62,7 @@ export class OpenTelemetryClient implements TelemetryClient { description: 'Target information', }); - if (this.resource.asyncAttributesPending) { - void this.resource.waitForAsyncAttributes!().then(() => { - this.targetInfo!.record(1, this.resource.attributes); - }); - } else { - this.targetInfo.record(1, this.resource.attributes); - } - + this.targetInfo.record(1, this.resource.attributes); this.hostMetrics.start(); } @@ -77,11 +70,11 @@ export class OpenTelemetryClient implements TelemetryClient { await Promise.all([this.meterProvider.shutdown()]); } - public static createAndStart( + public static async createAndStart( metricsCollector: URL, tracesCollector: URL | undefined, log: DebugLogger, - ): OpenTelemetryClient { + ): Promise { const resource = detectResourcesSync({ detectors: [ osDetectorSync, @@ -94,6 +87,10 @@ export class OpenTelemetryClient implements TelemetryClient { ], }); + if (resource.asyncAttributesPending) { + await resource.waitForAsyncAttributes!(); + } + const tracerProvider = new NodeTracerProvider({ resource, }); @@ -105,6 +102,7 @@ export class OpenTelemetryClient implements TelemetryClient { tracerProvider.register(); + console.log('pushing metrics to', metricsCollector.href); const meterProvider = new MeterProvider({ resource, readers: [ diff --git a/yarn-project/telemetry-client/src/start.ts b/yarn-project/telemetry-client/src/start.ts index 8ff2dc06ee1..eb07a4a431b 100644 --- a/yarn-project/telemetry-client/src/start.ts +++ b/yarn-project/telemetry-client/src/start.ts @@ -7,11 +7,11 @@ import { type TelemetryClient } from './telemetry.js'; export * from './config.js'; -export function createAndStartTelemetryClient(config: TelemetryClientConfig): TelemetryClient { +export async function createAndStartTelemetryClient(config: TelemetryClientConfig): Promise { const log = createDebugLogger('aztec:telemetry-client'); if (config.metricsCollectorUrl) { log.info('Using OpenTelemetry client'); - return OpenTelemetryClient.createAndStart(config.metricsCollectorUrl, config.tracesCollectorUrl, log); + return await OpenTelemetryClient.createAndStart(config.metricsCollectorUrl, config.tracesCollectorUrl, log); } else { log.info('Using NoopTelemetryClient'); return new NoopTelemetryClient();