scanner: make plugin interface ffi-safe with handle-based registry
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I8e4790db3cc29f84f4e0d7d8eff36c2c6a6a6964
This commit is contained in:
parent
4f9c7057ff
commit
f4961c7f95
9 changed files with 93 additions and 44 deletions
|
|
@ -1,4 +1,3 @@
|
|||
#![allow(improper_ctypes)]
|
||||
use pscand_core::helpers::PowerHelper;
|
||||
use pscand_core::scanner::{MetricValue, Scanner};
|
||||
use std::collections::HashMap;
|
||||
|
|
@ -6,9 +5,9 @@ use std::time::Duration;
|
|||
|
||||
struct PowerScanner;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub extern "C" fn pscand_scanner() -> Box<dyn Scanner> {
|
||||
Box::new(PowerScanner)
|
||||
#[no_mangle]
|
||||
pub extern "C" fn pscand_scanner() -> *mut std::os::raw::c_void {
|
||||
Box::into_raw(Box::new(PowerScanner)) as *mut std::os::raw::c_void
|
||||
}
|
||||
|
||||
impl Default for PowerScanner {
|
||||
|
|
@ -52,7 +51,7 @@ impl Scanner for PowerScanner {
|
|||
);
|
||||
metrics.insert(
|
||||
"battery_status".to_string(),
|
||||
MetricValue::from_str(&battery.status),
|
||||
MetricValue::from_string(&battery.status),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -61,7 +60,7 @@ impl Scanner for PowerScanner {
|
|||
if let Some(status) = info.get("status") {
|
||||
metrics.insert(
|
||||
format!("supply_{}_status", name),
|
||||
MetricValue::from_str(status),
|
||||
MetricValue::from_string(status),
|
||||
);
|
||||
}
|
||||
if let Some(online) = info.get("online") {
|
||||
|
|
@ -82,7 +81,10 @@ impl Scanner for PowerScanner {
|
|||
}
|
||||
|
||||
if let Ok(state) = PowerHelper::suspend_state() {
|
||||
metrics.insert("suspend_state".to_string(), MetricValue::from_str(&state));
|
||||
metrics.insert(
|
||||
"suspend_state".to_string(),
|
||||
MetricValue::from_string(&state),
|
||||
);
|
||||
}
|
||||
|
||||
Ok(metrics)
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ use std::time::Duration;
|
|||
|
||||
struct ProcScanner;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub extern "C" fn pscand_scanner() -> Box<dyn Scanner> {
|
||||
Box::new(ProcScanner)
|
||||
#[no_mangle]
|
||||
pub extern "C" fn pscand_scanner() -> *mut std::os::raw::c_void {
|
||||
Box::into_raw(Box::new(ProcScanner)) as *mut std::os::raw::c_void
|
||||
}
|
||||
|
||||
impl Default for ProcScanner {
|
||||
|
|
@ -72,7 +72,7 @@ impl Scanner for ProcScanner {
|
|||
}
|
||||
metrics.insert(
|
||||
"zombie_processes".to_string(),
|
||||
MetricValue::from_str(zombie_info.join(",")),
|
||||
MetricValue::from_string(zombie_info.join(",")),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -81,7 +81,7 @@ impl Scanner for ProcScanner {
|
|||
for (i, proc) in top_mem.iter().enumerate() {
|
||||
metrics.insert(
|
||||
format!("top_mem_{}_name", i + 1),
|
||||
MetricValue::from_str(&proc.name),
|
||||
MetricValue::from_string(&proc.name),
|
||||
);
|
||||
metrics.insert(
|
||||
format!("top_mem_{}_mb", i + 1),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
#![allow(improper_ctypes)]
|
||||
use pscand_core::helpers::SensorHelper;
|
||||
use pscand_core::scanner::{MetricValue, Scanner};
|
||||
use pscand_core::Result;
|
||||
|
|
@ -7,9 +6,9 @@ use std::time::Duration;
|
|||
|
||||
struct SensorScanner;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub extern "C" fn pscand_scanner() -> Box<dyn Scanner> {
|
||||
Box::new(SensorScanner)
|
||||
#[no_mangle]
|
||||
pub extern "C" fn pscand_scanner() -> *mut std::os::raw::c_void {
|
||||
Box::into_raw(Box::new(SensorScanner)) as *mut std::os::raw::c_void
|
||||
}
|
||||
|
||||
impl Default for SensorScanner {
|
||||
|
|
|
|||
|
|
@ -1,23 +1,17 @@
|
|||
#![allow(improper_ctypes)]
|
||||
use pscand_core::helpers::{ResourceHelper, SystemHelper};
|
||||
use pscand_core::scanner::{MetricValue, Scanner};
|
||||
use pscand_core::Result;
|
||||
use std::collections::HashMap;
|
||||
use std::time::Duration;
|
||||
|
||||
#[derive(Default)]
|
||||
struct SystemScanner {
|
||||
_prev_cpu: Option<HashMap<String, f64>>,
|
||||
}
|
||||
|
||||
impl Default for SystemScanner {
|
||||
fn default() -> Self {
|
||||
Self { _prev_cpu: None }
|
||||
}
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub extern "C" fn pscand_scanner() -> Box<dyn Scanner> {
|
||||
Box::new(SystemScanner::default())
|
||||
#[no_mangle]
|
||||
pub extern "C" fn pscand_scanner() -> *mut std::os::raw::c_void {
|
||||
Box::into_raw(Box::new(SystemScanner::default())) as *mut std::os::raw::c_void
|
||||
}
|
||||
|
||||
impl Scanner for SystemScanner {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue