env_runtime.rs 1.72 KB
Newer Older
1
2
3
4
5
6
7
8
9
use std::fmt;
use std::process::Command;

pub(crate) struct Env {
    cargo_target: &'static str,
    cargo_version: &'static str,
    git_sha: &'static str,
    docker_label: &'static str,
    nvidia_env: String,
10
    xpu_env: String,
11
12
13
14
15
}

impl Env {
    pub fn new() -> Self {
        let nvidia_env = nvidia_smi();
16
        let xpu_env = xpu_smi();
17
18
19

        Self {
            nvidia_env: nvidia_env.unwrap_or("N/A".to_string()),
20
            xpu_env: xpu_env.unwrap_or("N/A".to_string()),
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
            cargo_target: env!("VERGEN_CARGO_TARGET_TRIPLE"),
            cargo_version: env!("VERGEN_RUSTC_SEMVER"),
            git_sha: option_env!("VERGEN_GIT_SHA").unwrap_or("N/A"),
            docker_label: option_env!("DOCKER_LABEL").unwrap_or("N/A"),
        }
    }
}

impl fmt::Display for Env {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        writeln!(f, "Runtime environment:")?;

        writeln!(f, "Target: {}", self.cargo_target)?;
        writeln!(f, "Cargo version: {}", self.cargo_version)?;
        writeln!(f, "Commit sha: {}", self.git_sha)?;
        writeln!(f, "Docker label: {}", self.docker_label)?;
37
38
        writeln!(f, "nvidia-smi:\n{}", self.nvidia_env)?;
        write!(f, "xpu-smi:\n{}", self.xpu_env)?;
39
40
41
42
43
44
45
46
47
48
49

        Ok(())
    }
}

fn nvidia_smi() -> Option<String> {
    let output = Command::new("nvidia-smi").output().ok()?;
    let nvidia_smi = String::from_utf8(output.stdout).ok()?;
    let output = nvidia_smi.replace('\n', "\n   ");
    Some(output.trim().to_string())
}
50
51
52
53
54
55
56

fn xpu_smi() -> Option<String> {
    let output = Command::new("xpu-smi").arg("discovery").output().ok()?;
    let xpu_smi = String::from_utf8(output.stdout).ok()?;
    let output = xpu_smi.replace('\n', "\n   ");
    Some(output.trim().to_string())
}