add lsblk parser
This commit is contained in:
		@@ -4,6 +4,7 @@ mod parser;
 | 
			
		||||
extern crate rocket;
 | 
			
		||||
 | 
			
		||||
use rocket::serde::json::Json;
 | 
			
		||||
use crate::parser::lsblk_parser::{Disk, parse_lsblk};
 | 
			
		||||
use crate::parser::mdstat_parser::{MdRaidSystem, parse_mdstat};
 | 
			
		||||
 | 
			
		||||
#[get("/raiddevices")]
 | 
			
		||||
@@ -11,11 +12,16 @@ fn get_raid_devices() -> Json<MdRaidSystem> {
 | 
			
		||||
    Json(parse_mdstat())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[get("/disks")]
 | 
			
		||||
fn get_disks() -> Json<Vec<Disk>> {
 | 
			
		||||
    Json(parse_lsblk())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[rocket::main]
 | 
			
		||||
async fn main() -> Result<(), rocket::Error> {
 | 
			
		||||
    println!("init");
 | 
			
		||||
    let _rocket = rocket::build()
 | 
			
		||||
        .mount("/api", routes![get_raid_devices])
 | 
			
		||||
        .mount("/api", routes![get_raid_devices, get_disks])
 | 
			
		||||
        .launch()
 | 
			
		||||
        .await?;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								src/parser/lsblk_parser.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/parser/lsblk_parser.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
use std::process::Command;
 | 
			
		||||
use rocket::serde::json::{serde_json};
 | 
			
		||||
use rocket::serde::{Serialize, Deserialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize)]
 | 
			
		||||
#[serde(crate = "rocket::serde")]
 | 
			
		||||
pub struct Disk {
 | 
			
		||||
    name: String,
 | 
			
		||||
    size: u64,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Deserialize)]
 | 
			
		||||
#[serde(crate = "rocket::serde")]
 | 
			
		||||
struct ChildDevice {
 | 
			
		||||
    name: String,
 | 
			
		||||
    #[serde(rename = "maj:min")]
 | 
			
		||||
    majmin: String,
 | 
			
		||||
    rm: bool,
 | 
			
		||||
    size: u64,
 | 
			
		||||
    ro: bool,
 | 
			
		||||
    #[serde(rename = "type")]
 | 
			
		||||
    kind: String,
 | 
			
		||||
    mountpoints: Vec<Option<String>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Deserialize)]
 | 
			
		||||
#[serde(crate = "rocket::serde")]
 | 
			
		||||
struct Blockdevice {
 | 
			
		||||
    name: String,
 | 
			
		||||
    #[serde(rename = "type")]
 | 
			
		||||
    kind: String,
 | 
			
		||||
    size: u64,
 | 
			
		||||
    #[serde(rename = "maj:min")]
 | 
			
		||||
    majmin: String,
 | 
			
		||||
    rm: bool,
 | 
			
		||||
    ro: bool,
 | 
			
		||||
    mountpoints: Vec<Option<String>>,
 | 
			
		||||
    children: Option<Vec<ChildDevice>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Deserialize)]
 | 
			
		||||
#[serde(crate = "rocket::serde")]
 | 
			
		||||
struct LsblkT {
 | 
			
		||||
    blockdevices: Vec<Blockdevice>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn parse_lsblk() -> Vec<Disk> {
 | 
			
		||||
    let output = Command::new("lsblk")
 | 
			
		||||
        .arg("-J")
 | 
			
		||||
        .arg("-b")// sizes in bytes
 | 
			
		||||
        .arg("-p") // complete device path
 | 
			
		||||
        .output()
 | 
			
		||||
        .expect("failed to execute process");
 | 
			
		||||
 | 
			
		||||
    let out = output.stdout;
 | 
			
		||||
    let out = String::from_utf8(out).unwrap();
 | 
			
		||||
 | 
			
		||||
    let v: LsblkT = serde_json::from_str(out.as_str()).unwrap();
 | 
			
		||||
 | 
			
		||||
    let mut disks: Vec<Disk> = Vec::new();
 | 
			
		||||
    for d in v.blockdevices {
 | 
			
		||||
        if d.kind != "disk" { continue; };
 | 
			
		||||
        disks.push(Disk { name: d.name, size: d.size });
 | 
			
		||||
    }
 | 
			
		||||
    disks
 | 
			
		||||
}
 | 
			
		||||
@@ -1 +1,2 @@
 | 
			
		||||
pub mod mdstat_parser;
 | 
			
		||||
pub mod mdstat_parser;
 | 
			
		||||
pub mod lsblk_parser;
 | 
			
		||||
		Reference in New Issue
	
	Block a user