From 93a91cac4f90bde445648cb2f05d1e1549e4ba46 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Mon, 22 Sep 2025 20:36:24 +0500 Subject: [PATCH] download-metrics --- p2p/kademlia/dht.go | 22 ++-------------------- sdk/adapters/supernodeservice/adapter.go | 19 +++++++++++++++++++ sdk/event/keys.go | 7 +++++++ 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/p2p/kademlia/dht.go b/p2p/kademlia/dht.go index 00afad75..69c45023 100644 --- a/p2p/kademlia/dht.go +++ b/p2p/kademlia/dht.go @@ -934,16 +934,7 @@ func (s *DHT) iterateBatchGetValues(ctx context.Context, nodes map[string]*Node, if len(requestKeys) == 0 { // No keys to request from this node (e.g., all keys already satisfied elsewhere). - // Treat as a successful, no-op call for metrics when there is no error. - p2pmetrics.RecordRetrieve(p2pmetrics.TaskIDFromContext(ctx), p2pmetrics.Call{ - IP: node.IP, - Address: node.String(), - Keys: 0, - Success: true, - Error: "", - DurationMS: time.Since(callStart).Milliseconds(), - Noop: true, - }) + // Do not emit no-op retrieve metrics; skip silently. return } @@ -1811,21 +1802,12 @@ func (s *DHT) batchStoreNetwork(ctx context.Context, values [][]byte, nodes map[ "size_before_compress": utils.BytesIntToMB(totalBytes), }) - // Skip empty payloads: avoid sending empty store RPCs, but record a noop metric for visibility. + // Skip empty payloads: avoid sending empty store RPCs and do not record no-op metrics. if len(toStore) == 0 { logtrace.Info(ctx, "Skipping store RPC with empty payload", logtrace.Fields{ logtrace.FieldModule: "dht", "node": receiver.String(), }) - p2pmetrics.RecordStore(p2pmetrics.TaskIDFromContext(ctx), p2pmetrics.Call{ - IP: receiver.IP, - Address: receiver.String(), - Keys: 0, - Success: true, - Error: "", - DurationMS: time.Since(callStart).Milliseconds(), - Noop: true, - }) return } diff --git a/sdk/adapters/supernodeservice/adapter.go b/sdk/adapters/supernodeservice/adapter.go index 969ace44..f9e9e6da 100644 --- a/sdk/adapters/supernodeservice/adapter.go +++ b/sdk/adapters/supernodeservice/adapter.go @@ -487,6 +487,25 @@ func (a *cascadeAdapter) CascadeSupernodeDownload( if v, ok := retrieve["calls_by_ip"]; ok { edata[event.KeyRetrieveCallsByIP] = v } + // Optional additional retrieve fields + if v, ok := retrieve["keys"].(float64); ok { + edata[event.KeyRetrieveKeys] = int64(v) + } + if v, ok := retrieve["required"].(float64); ok { + edata[event.KeyRetrieveRequired] = int64(v) + } + if v, ok := retrieve["found_net"].(float64); ok { + edata[event.KeyRetrieveFoundNet] = int64(v) + } + if v, ok := retrieve["target_required_percent"].(float64); ok { + edata[event.KeyTargetRequiredPercent] = v + } + if v, ok := retrieve["target_required_count"].(float64); ok { + edata[event.KeyTargetRequiredCount] = int64(v) + } + if v, ok := retrieve["total_symbols"].(float64); ok { + edata[event.KeyTotalSymbols] = int64(v) + } } } } diff --git a/sdk/event/keys.go b/sdk/event/keys.go index 1e012677..9d68b818 100644 --- a/sdk/event/keys.go +++ b/sdk/event/keys.go @@ -45,4 +45,11 @@ const ( KeyRetrieveMS EventDataKey = "retrieve_ms" KeyDecodeMS EventDataKey = "decode_ms" KeyRetrieveCallsByIP EventDataKey = "retrieve_calls_by_ip" + // Additional retrieve summary fields + KeyRetrieveKeys EventDataKey = "retrieve_keys" + KeyRetrieveRequired EventDataKey = "retrieve_required" + KeyRetrieveFoundNet EventDataKey = "retrieve_found_net" + KeyTargetRequiredPercent EventDataKey = "target_required_percent" + KeyTargetRequiredCount EventDataKey = "target_required_count" + KeyTotalSymbols EventDataKey = "total_symbols" )