Skip to content

Commit b1611e3

Browse files
author
Devdutt Shenoi
committed
fix: actually delete stats
1 parent cbceb27 commit b1611e3

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

src/stats.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use tracing::warn;
2-
31
/*
42
* Parseable Server (C) 2022 - 2024 Parseable, Inc.
53
*
@@ -17,14 +15,21 @@ use tracing::warn;
1715
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1816
*
1917
*/
18+
19+
use std::sync::Arc;
20+
21+
use prometheus::core::Collector;
22+
use prometheus::proto::MetricFamily;
23+
use prometheus::IntGaugeVec;
24+
use tracing::warn;
25+
2026
use crate::metrics::{
2127
DELETED_EVENTS_STORAGE_SIZE, EVENTS_DELETED, EVENTS_DELETED_SIZE, EVENTS_INGESTED,
2228
EVENTS_INGESTED_DATE, EVENTS_INGESTED_SIZE, EVENTS_INGESTED_SIZE_DATE,
2329
EVENTS_STORAGE_SIZE_DATE, LIFETIME_EVENTS_INGESTED, LIFETIME_EVENTS_INGESTED_SIZE,
2430
LIFETIME_EVENTS_STORAGE_SIZE, STORAGE_SIZE,
2531
};
2632
use crate::storage::{ObjectStorage, ObjectStorageError, ObjectStoreFormat};
27-
use std::sync::Arc;
2833

2934
/// Helper struct type created by copying stats values from metadata
3035
#[derive(Debug, Default, serde::Serialize, serde::Deserialize, Clone, Copy, PartialEq, Eq)]
@@ -176,13 +181,26 @@ pub fn delete_stats(stream_name: &str, format: &'static str) -> prometheus::Resu
176181
LIFETIME_EVENTS_INGESTED_SIZE.remove_label_values(&event_labels)?;
177182
LIFETIME_EVENTS_STORAGE_SIZE.remove_label_values(&storage_size_labels)?;
178183

179-
EVENTS_INGESTED_DATE.remove_label_values(&event_labels)?;
180-
EVENTS_INGESTED_SIZE_DATE.remove_label_values(&event_labels)?;
181-
EVENTS_STORAGE_SIZE_DATE.remove_label_values(&storage_size_labels)?;
184+
delete_with_label_prefix(&EVENTS_INGESTED_DATE, &event_labels);
185+
delete_with_label_prefix(&EVENTS_INGESTED_SIZE_DATE, &event_labels);
186+
delete_with_label_prefix(&EVENTS_STORAGE_SIZE_DATE, &storage_size_labels);
182187

183188
Ok(())
184189
}
185190

191+
fn delete_with_label_prefix(metrics: &IntGaugeVec, prefix: &[&str]) {
192+
let families: Vec<MetricFamily> = metrics.collect().into_iter().collect();
193+
for metric in families.iter().flat_map(|m| m.get_metric()) {
194+
let label: Vec<&str> = metric.get_label().iter().map(|l| l.get_value()).collect();
195+
if !label.starts_with(prefix) {
196+
continue;
197+
}
198+
if let Err(err) = metrics.remove_label_values(&label) {
199+
warn!("Error = {err}");
200+
}
201+
}
202+
}
203+
186204
pub fn event_labels<'a>(stream_name: &'a str, format: &'static str) -> [&'a str; 2] {
187205
[stream_name, format]
188206
}

0 commit comments

Comments
 (0)