56 lines
1.5 KiB
Rust
56 lines
1.5 KiB
Rust
use std::sync::Arc;
|
|
|
|
use opnsense_config_xml::{NodeExporter, OPNsense};
|
|
|
|
use crate::{config::OPNsenseShell, Error};
|
|
|
|
pub struct NodeExporterConfig<'a> {
|
|
opnsense: &'a mut OPNsense,
|
|
opnsense_shell: Arc<dyn OPNsenseShell>,
|
|
}
|
|
|
|
impl<'a> NodeExporterConfig<'a> {
|
|
pub fn new(opnsense: &'a mut OPNsense, opnsense_shell: Arc<dyn OPNsenseShell>) -> Self {
|
|
Self {
|
|
opnsense,
|
|
opnsense_shell,
|
|
}
|
|
}
|
|
|
|
pub fn get_full_config(&self) -> &Option<NodeExporter> {
|
|
&self.opnsense.opnsense.node_exporter
|
|
}
|
|
fn with_node_exporter<F, R>(&mut self, f: F) -> R
|
|
where
|
|
F: FnOnce(&mut NodeExporter) -> R,
|
|
{
|
|
match &mut self.opnsense.opnsense.node_exporter.as_mut() {
|
|
Some(node_exporter) => f(node_exporter),
|
|
None => unimplemented!(
|
|
"
|
|
node exporter is not yet installed"
|
|
),
|
|
}
|
|
}
|
|
|
|
pub fn enable(&mut self, enabled: bool) {
|
|
self.with_node_exporter(|node_exporter| node_exporter.enabled = enabled as u8)
|
|
}
|
|
|
|
pub async fn reload_restart(&self) -> Result<(), Error> {
|
|
self.opnsense_shell
|
|
.exec("configctl node_exporter stop")
|
|
.await?;
|
|
self.opnsense_shell
|
|
.exec("configctl template reload OPNsense/NodeExporter")
|
|
.await?;
|
|
self.opnsense_shell
|
|
.exec("configctl node_exporter configtest")
|
|
.await?;
|
|
self.opnsense_shell
|
|
.exec("configctl node_exporter start")
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
}
|