Skip to main content

flowparser_sflow/counter_records/
nvidia_gpu.rs

1use nom::IResult;
2use nom::number::complete::{be_u32, be_u64};
3use serde::{Deserialize, Serialize};
4
5/// NVIDIA GPU counters via NVML (enterprise=5703, format=1).
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub struct NvidiaGpu {
8    pub device_count: u32,
9    pub processes: u32,
10    pub gpu_time: u32,
11    pub mem_time: u32,
12    pub mem_total: u64,
13    pub mem_free: u64,
14    pub ecc_errors: u32,
15    pub energy: u32,
16    pub temperature: u32,
17    pub fan_speed: u32,
18}
19
20pub(crate) fn parse_nvidia_gpu(input: &[u8]) -> IResult<&[u8], NvidiaGpu> {
21    let (input, device_count) = be_u32(input)?;
22    let (input, processes) = be_u32(input)?;
23    let (input, gpu_time) = be_u32(input)?;
24    let (input, mem_time) = be_u32(input)?;
25    let (input, mem_total) = be_u64(input)?;
26    let (input, mem_free) = be_u64(input)?;
27    let (input, ecc_errors) = be_u32(input)?;
28    let (input, energy) = be_u32(input)?;
29    let (input, temperature) = be_u32(input)?;
30    let (input, fan_speed) = be_u32(input)?;
31
32    Ok((
33        input,
34        NvidiaGpu {
35            device_count,
36            processes,
37            gpu_time,
38            mem_time,
39            mem_total,
40            mem_free,
41            ecc_errors,
42            energy,
43            temperature,
44            fan_speed,
45        },
46    ))
47}