use super::{MetricBuilder, MetricExporter};
use crate::storage::info::StorageInfo;
pub struct DiskMetricExporter<'a> {
storage_info: &'a [StorageInfo],
}
impl<'a> DiskMetricExporter<'a> {
pub fn new(storage_info: &'a [StorageInfo]) -> Self {
Self { storage_info }
}
fn export_disk_metrics(&self, builder: &mut MetricBuilder, info: &StorageInfo) {
let labels = [
("instance", info.hostname.as_str()),
("mount_point", &info.mount_point),
("index", &info.index.to_string()),
];
builder
.help("all_smi_disk_total_bytes", "Total disk space in bytes")
.type_("all_smi_disk_total_bytes", "gauge")
.metric("all_smi_disk_total_bytes", &labels, info.total_bytes);
builder
.help(
"all_smi_disk_available_bytes",
"Available disk space in bytes",
)
.type_("all_smi_disk_available_bytes", "gauge")
.metric(
"all_smi_disk_available_bytes",
&labels,
info.available_bytes,
);
}
}
impl<'a> MetricExporter for DiskMetricExporter<'a> {
fn export_metrics(&self) -> String {
let mut builder = MetricBuilder::new();
for info in self.storage_info {
self.export_disk_metrics(&mut builder, info);
}
builder.build()
}
}