From f22813c6bf43b83a7ea4509e692a001865525458 Mon Sep 17 00:00:00 2001 From: Winter-Soren Date: Thu, 27 Mar 2025 22:58:46 +0530 Subject: [PATCH 1/2] feat: web3 storage batch metrics --- common/telemetry.js | 11 ++++++++++- publish/index.js | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/common/telemetry.js b/common/telemetry.js index 35a37526..0119ef86 100644 --- a/common/telemetry.js +++ b/common/telemetry.js @@ -25,9 +25,17 @@ const networkInfoWriteClient = influx.getWriteApi( 's' // precision ) +// Add new write client for batch metrics +const batchMetricsWriteClient = influx.getWriteApi( + 'Filecoin Station', // org + 'spark-batch-metrics', // bucket + 'ns' // precision +) + setInterval(() => { publishWriteClient.flush().catch(console.error) networkInfoWriteClient.flush().catch(console.error) + batchMetricsWriteClient.flush().catch(console.error) }, 10_000).unref() const recordFn = (client, name, fn) => { @@ -43,5 +51,6 @@ export { publishWriteClient, networkInfoWriteClient, recordPublishTelemetry, - recordNetworkInfoTelemetry + recordNetworkInfoTelemetry, + batchMetricsWriteClient } diff --git a/publish/index.js b/publish/index.js index 72068d2a..247f5b76 100644 --- a/publish/index.js +++ b/publish/index.js @@ -53,6 +53,11 @@ export const publish = async ({ logger.log(`Publishing ${measurements.length} measurements. Total unpublished: ${totalCount}. Batch size: ${maxMeasurements}.`) + // Calculate batch size in bytes + const batchSizeBytes = Buffer.byteLength( + measurements.map(m => JSON.stringify(m)).join('\n') + ) + // Share measurements const start = new Date() const file = new File( @@ -126,7 +131,9 @@ export const publish = async ({ logger.log('Done!') + // Enhanced telemetry recording with separate batch metrics recordTelemetry('publish', point => { + // Existing metrics point.intField('round_index', roundIndex) point.intField('measurements', measurements.length) point.floatField('load', totalCount / maxMeasurements) @@ -136,6 +143,16 @@ export const publish = async ({ ) point.intField('add_measurements_duration_ms', ieAddMeasurementsDuration) }) + + // Separate batch metrics recording for better organization + recordTelemetry('batch_metrics', point => { + point.intField('batch_size_bytes', batchSizeBytes) + point.floatField('avg_measurement_size_bytes', batchSizeBytes / measurements.length) + point.intField('measurement_count', measurements.length) + point.tag('cid', cid.toString()) + point.tag('round_index', roundIndex.toString()) + point.timestamp(new Date()) + }) } const commitMeasurements = async ({ cid, ieContract, logger, stuckTransactionsCanceller }) => { From 3a83c0962a6e18373ef7e8765bc98f66420a632e Mon Sep 17 00:00:00 2001 From: Winter-Soren Date: Sat, 5 Apr 2025 15:07:02 +0530 Subject: [PATCH 2/2] feat: add batch size metrics to publish telemetry --- common/telemetry.js | 4 +--- publish/index.js | 10 ++-------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/common/telemetry.js b/common/telemetry.js index 0119ef86..d6fcfc0b 100644 --- a/common/telemetry.js +++ b/common/telemetry.js @@ -35,7 +35,6 @@ const batchMetricsWriteClient = influx.getWriteApi( setInterval(() => { publishWriteClient.flush().catch(console.error) networkInfoWriteClient.flush().catch(console.error) - batchMetricsWriteClient.flush().catch(console.error) }, 10_000).unref() const recordFn = (client, name, fn) => { @@ -51,6 +50,5 @@ export { publishWriteClient, networkInfoWriteClient, recordPublishTelemetry, - recordNetworkInfoTelemetry, - batchMetricsWriteClient + recordNetworkInfoTelemetry } diff --git a/publish/index.js b/publish/index.js index 247f5b76..f5469e49 100644 --- a/publish/index.js +++ b/publish/index.js @@ -131,7 +131,7 @@ export const publish = async ({ logger.log('Done!') - // Enhanced telemetry recording with separate batch metrics + // Telemetry recording with batch size metrics recordTelemetry('publish', point => { // Existing metrics point.intField('round_index', roundIndex) @@ -142,16 +142,10 @@ export const publish = async ({ uploadMeasurementsDuration ) point.intField('add_measurements_duration_ms', ieAddMeasurementsDuration) - }) - // Separate batch metrics recording for better organization - recordTelemetry('batch_metrics', point => { + // Add batch size metrics to existing publish point point.intField('batch_size_bytes', batchSizeBytes) point.floatField('avg_measurement_size_bytes', batchSizeBytes / measurements.length) - point.intField('measurement_count', measurements.length) - point.tag('cid', cid.toString()) - point.tag('round_index', roundIndex.toString()) - point.timestamp(new Date()) }) }