From dea53616a4fd1ca03530c7b765a0449f26b1887f Mon Sep 17 00:00:00 2001 From: houseme Date: Wed, 8 Jul 2026 17:12:02 +0800 Subject: [PATCH] fix(obs): correct versions scanned metrics (#4443) Co-authored-by: heihutu Co-authored-by: Zhengchao An --- crates/obs/src/metrics/stats_collector.rs | 52 +++++++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/crates/obs/src/metrics/stats_collector.rs b/crates/obs/src/metrics/stats_collector.rs index fe69b5ce5..9af8f611d 100644 --- a/crates/obs/src/metrics/stats_collector.rs +++ b/crates/obs/src/metrics/stats_collector.rs @@ -35,7 +35,7 @@ use crate::metrics::{ }; use chrono::Utc; use rustfs_common::heal_channel::HealScanMode; -use rustfs_common::metrics::global_metrics; +use rustfs_common::metrics::{ScannerMetricsReport, global_metrics}; use rustfs_io_metrics::internode_metrics::global_internode_metrics; use rustfs_io_metrics::{ProcessStatusSnapshot, snapshot_process_resource_and_system}; use std::{collections::HashMap, sync::Arc}; @@ -111,6 +111,15 @@ fn resolve_obs_object_store_handle() -> Option> { obs_resolve_object_store_handle() } +fn scanner_lifecycle_checked_versions(metrics: &ScannerMetricsReport) -> u64 { + metrics + .source_work + .iter() + .find(|source| source.source == "lifecycle") + .map(|source| source.checked) + .unwrap_or_default() +} + fn obs_total_usable_capacity_bytes(storage_info: &ObsStorageInfo) -> u64 { usize_to_u64_saturating(obs_get_total_usable_capacity(&storage_info.disks, storage_info)) } @@ -919,7 +928,7 @@ pub async fn collect_cluster_usage_metric_stats() -> Option<(ClusterUsageStats, pub async fn collect_ilm_metric_stats() -> Option { let ilm = obs_ilm_runtime_snapshot().await; let metrics = global_metrics().report().await; - let versions_scanned = metrics.life_time_ilm.values().copied().sum(); + let versions_scanned = scanner_lifecycle_checked_versions(&metrics); Some(IlmStats { expiry_pending_tasks: ilm.expiry_pending_tasks, @@ -958,7 +967,7 @@ pub async fn collect_scanner_metric_stats() -> Option { let completed_cycles = metrics.life_time_ops.get("scan_cycle").copied().unwrap_or_default(); let directories_scanned = metrics.life_time_ops.get("scan_folder").copied().unwrap_or_default(); let objects_scanned = metrics.life_time_ops.get("scan_object").copied().unwrap_or_default(); - let versions_scanned = metrics.life_time_ilm.values().copied().sum(); + let versions_scanned = scanner_lifecycle_checked_versions(&metrics); let reference_time = metrics.cycles_completed_at.last().copied().unwrap_or(metrics.current_started); let last_activity_seconds = now.signed_duration_since(reference_time).num_seconds().max(0) as u64; let active_paths = metrics.active_scan_paths as u64; @@ -1076,6 +1085,7 @@ pub async fn collect_compression_cluster_stats() -> Option std::io::Result<()> { if !sysinfo::IS_SUPPORTED_SYSTEM {