Skip to content

Commit ea3178f

Browse files
authored
feat: expose process memory limit metric (#1790)
* feat: expose process memory limit metric * update memory limit metric * refactor: set memory limit directly
1 parent c756fc9 commit ea3178f

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

‎src/metrics/mod.rs‎

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -201,21 +201,31 @@ pub static PROCESS_MEMORY_BYTES_AVG: Lazy<Gauge> = Lazy::new(|| {
201201
)
202202
.expect("metric can be created")
203203
});
204-
pub static PROCESS_METRICS_INIT: OnceLock<(f64, u64, u64)> = OnceLock::new();
204+
205+
pub static PROCESS_MEMORY_LIMIT_BYTES: Lazy<Gauge> = Lazy::new(|| {
206+
Gauge::with_opts(
207+
Opts::new(
208+
"process_memory_limit_bytes",
209+
"Cgroup memory limit in bytes, or total system memory when cgroup limits are unavailable",
210+
)
211+
.namespace(METRICS_NAMESPACE),
212+
)
213+
.expect("metric can be created")
214+
});
215+
216+
pub static PROCESS_METRICS_INIT: OnceLock<(f64, u64)> = OnceLock::new();
205217
pub struct ProcessMetricsAccumulator {
206218
cpu_usage_avg: AtomicF64,
207219
memory_bytes_avg: AtomicF64,
208-
total_memory: AtomicF64,
209220
}
210221

211222
impl Default for ProcessMetricsAccumulator {
212223
fn default() -> Self {
213224
// PROCESS_METRICS_INIT must be initialized by now
214-
let (cpu, mem, total_mem) = *PROCESS_METRICS_INIT.get().unwrap();
225+
let (cpu, mem) = *PROCESS_METRICS_INIT.get().unwrap();
215226
Self {
216227
cpu_usage_avg: AtomicF64::new(cpu),
217228
memory_bytes_avg: AtomicF64::new(mem as f64),
218-
total_memory: AtomicF64::new(total_mem as f64),
219229
}
220230
}
221231
}
@@ -248,10 +258,6 @@ impl ProcessMetricsAccumulator {
248258
pub fn get_mem(&self) -> f64 {
249259
self.memory_bytes_avg.get()
250260
}
251-
252-
pub fn get_total_mem(&self) -> f64 {
253-
self.total_memory.get()
254-
}
255261
}
256262

257263
pub static PROCESS_METRICS_ACCUMULATOR: Lazy<ProcessMetricsAccumulator> =
@@ -260,12 +266,13 @@ pub static PROCESS_METRICS_ACCUMULATOR: Lazy<ProcessMetricsAccumulator> =
260266
pub fn record_process_metrics_sample(cpu_usage_percent: f64, memory_bytes: u64, total_mem: u64) {
261267
if PROCESS_METRICS_INIT.get().is_none() {
262268
// first measurement
263-
let _ = PROCESS_METRICS_INIT.set((cpu_usage_percent, memory_bytes, total_mem));
269+
let _ = PROCESS_METRICS_INIT.set((cpu_usage_percent, memory_bytes));
264270
}
265271
let (average_cpu_usage, average_memory_bytes) =
266272
PROCESS_METRICS_ACCUMULATOR.record(cpu_usage_percent, memory_bytes);
267273
PROCESS_CPU_USAGE_PERCENT_AVG.set(average_cpu_usage);
268274
PROCESS_MEMORY_BYTES_AVG.set(average_memory_bytes);
275+
PROCESS_MEMORY_LIMIT_BYTES.set(total_mem as f64);
269276
}
270277

271278
#[cfg(test)]
@@ -277,7 +284,7 @@ mod process_metrics_tests {
277284
#[test]
278285
fn averages_process_metric_samples() {
279286
// init PROCESS_METRICS_INIT
280-
PROCESS_METRICS_INIT.get_or_init(|| (10.0, 100, 100));
287+
PROCESS_METRICS_INIT.get_or_init(|| (10.0, 100));
281288
let accumulator = ProcessMetricsAccumulator::default();
282289

283290
assert_eq!(accumulator.record(10.0, 100), (10.0, 100.0));
@@ -791,6 +798,9 @@ fn custom_metrics(registry: &Registry) {
791798
registry
792799
.register(Box::new(PROCESS_MEMORY_BYTES_AVG.clone()))
793800
.expect("metric can be registered");
801+
registry
802+
.register(Box::new(PROCESS_MEMORY_LIMIT_BYTES.clone()))
803+
.expect("metric can be registered");
794804
registry
795805
.register(Box::new(QUERY_EXECUTE_TIME.clone()))
796806
.expect("metric can be registered");

0 commit comments

Comments
 (0)