src/api2/disks.rs: implement smart api

This commit is contained in:
Dietmar Maurer 2020-06-06 12:23:11 +02:00
parent 042afd6e52
commit 7fa2779559
1 changed files with 47 additions and 6 deletions

View File

@ -1,16 +1,18 @@
use anyhow::{bail, format_err, Error};
use anyhow::{Error};
use serde_json::{json, Value};
use proxmox::api::{api, RpcEnvironment, Permission, UserInformation};
use proxmox::api::{api, Permission};
use proxmox::api::router::{Router, SubdirMap};
use proxmox::{sortable, identity};
use proxmox::{http_err, list_subdirs_api_method};
use proxmox::{list_subdirs_api_method};
use crate::config::acl::{PRIV_SYS_AUDIT};
use crate::tools::disks::{DiskUsageInfo, DiskUsageType, get_disks};
use crate::tools::disks::{
DiskUsageInfo, DiskUsageType, DiskManage, SmartData,
get_disks, get_smart_data,
};
#[api(
protected: true,
input: {
properties: {
skipsmart: {
@ -57,6 +59,41 @@ pub fn list_disks(
Ok(list)
}
#[api(
protected: true,
input: {
properties: {
disk: {
description: "Block device name.",
type: String,
},
healthonly: {
description: "If true returns only the health status.",
type: bool,
optional: true,
},
},
},
returns: {
type: SmartData,
},
access: {
permission: &Permission::Privilege(&["system", "disks"], PRIV_SYS_AUDIT, false),
},
)]
/// Get SMART attributes and health of a disk.
pub fn smart_status(
disk: String,
healthonly: Option<bool>,
) -> Result<SmartData, Error> {
let healthonly = healthonly.unwrap_or(false);
let manager = DiskManage::new();
let disk = manager.disk_by_name(&disk)?;
get_smart_data(&disk, healthonly)
}
#[sortable]
const SUBDIRS: SubdirMap = &sorted!([
// ("lvm", &lvm::ROUTER),
@ -64,6 +101,10 @@ const SUBDIRS: SubdirMap = &sorted!([
"list", &Router::new()
.get(&API_METHOD_LIST_DISKS)
),
(
"smart", &Router::new()
.get(&API_METHOD_SMART_STATUS)
),
]);
pub const ROUTER: Router = Router::new()