diff --git a/.cargo/config.toml b/.cargo/config.toml index 1d58ef24..fd08acb4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,6 +1,9 @@ [target.x86_64-unknown-linux-musl] linker = "rust-lld" +[target.aarch64-apple-darwin] +linker = "rust-lld" + [alias] build-musl = "build --release --target x86_64-unknown-linux-musl" diff --git a/lustre-collector/src/fixtures/mgs-fs.txt b/lustre-collector/src/fixtures/mgs-fs.txt new file mode 100644 index 00000000..a221dfca --- /dev/null +++ b/lustre-collector/src/fixtures/mgs-fs.txt @@ -0,0 +1,2 @@ +mgs.MGS.live.params +mgs.MGS.live.testfs diff --git a/lustre-collector/src/lib.rs b/lustre-collector/src/lib.rs index 227fba9c..f4ce6d72 100644 --- a/lustre-collector/src/lib.rs +++ b/lustre-collector/src/lib.rs @@ -31,9 +31,11 @@ pub use node_stats_parsers::{parse_cpustats_output, parse_meminfo_output}; use std::{io, str}; pub use types::*; -fn check_output(records: Vec, state: &str) -> Result, LustreCollectorError> { - let params = crate::parser::params().join(" "); - +fn check_output( + records: Vec, + state: &str, + params: &str, +) -> Result, LustreCollectorError> { if !state.is_empty() { return Err(io::Error::new( io::ErrorKind::InvalidInput, @@ -53,7 +55,9 @@ pub fn parse_lctl_output(lctl_output: &[u8]) -> Result, LustreCollec .easy_parse(lctl_stats) .map_err(|err| err.map_position(|p| p.translate_position(lctl_stats)))?; - check_output(lctl_record, state) + let params = parser::params().join(" "); + + check_output(lctl_record, state, ¶ms) } pub fn parse_mgs_fs_output(mgs_fs_output: &[u8]) -> Result, LustreCollectorError> { @@ -63,7 +67,9 @@ pub fn parse_mgs_fs_output(mgs_fs_output: &[u8]) -> Result, LustreCo .easy_parse(mgs_fs) .map_err(|err| err.map_position(|p| p.translate_position(mgs_fs)))?; - check_output(mgs_fs_record, state) + let params = mgs::mgs_fs_parser::params().join(" "); + + check_output(mgs_fs_record, state, ¶ms) } pub fn parse_recovery_status_output( @@ -72,26 +78,41 @@ pub fn parse_recovery_status_output( let recovery_status = str::from_utf8(recovery_status_output)?; let recovery_status = recovery_status.trim(); - let (recovery_statuses, state) = recovery_status_parser::parse() + let (recovery_statuses, state) = parser::parse() .easy_parse(recovery_status) .map_err(|err| err.map_position(|p| p.translate_position(recovery_status)))?; - check_output(recovery_statuses, state) + let params = recovery_status_parser::params().join(" "); + + check_output(recovery_statuses, state, ¶ms) } #[cfg(test)] mod tests { - use super::{Record, parse_lctl_output}; + use crate::{parse_lctl_output, parse_mgs_fs_output, parse_recovery_status_output}; #[test] fn ex8761_job_stats() { let xs = include_bytes!("./fixtures/valid/ex8761-lctl.txt"); let expected = parse_lctl_output(xs).unwrap(); - let y = serde_json::to_string(&expected).unwrap(); - let z: Vec = serde_json::from_str(&y).unwrap(); + insta::assert_debug_snapshot!(expected); + } - assert_eq!(expected, z); + #[test] + fn test_parse_recovery_status_output() { + let xs = include_bytes!("./fixtures/recovery-multiple.txt"); + let expected = parse_recovery_status_output(xs).unwrap(); + + insta::assert_debug_snapshot!(expected); + } + + #[test] + fn test_parse_mgs_fs_output() { + let xs = include_bytes!("./fixtures/mgs-fs.txt"); + let expected = parse_mgs_fs_output(xs).unwrap(); + + insta::assert_debug_snapshot!(expected); } #[test] @@ -99,10 +120,7 @@ mod tests { let xs = include_bytes!("./fixtures/valid/params-6.2.0-r9.txt"); let expected = parse_lctl_output(xs).unwrap(); - let y = serde_json::to_string(&expected).unwrap(); - let z: Vec = serde_json::from_str(&y).unwrap(); - - assert_eq!(expected, z); + insta::assert_debug_snapshot!(expected); } #[test] diff --git a/lustre-collector/src/snapshots/lustre_collector__tests__es_6_2_0_job_stats_unhealthy.snap b/lustre-collector/src/snapshots/lustre_collector__tests__es_6_2_0_job_stats_unhealthy.snap new file mode 100644 index 00000000..23efb19e --- /dev/null +++ b/lustre-collector/src/snapshots/lustre_collector__tests__es_6_2_0_job_stats_unhealthy.snap @@ -0,0 +1,2513 @@ +--- +source: lustre-collector/src/lib.rs +expression: expected +--- +[ + Host( + Memused( + HostStat { + param: Param( + "memused", + ), + value: 243927005, + }, + ), + ), + Host( + MemusedMax( + HostStat { + param: Param( + "memused_max", + ), + value: 245019901, + }, + ), + ), + Host( + LNetMemUsed( + HostStat { + param: Param( + "lnet_memused", + ), + value: 67130162, + }, + ), + ), + Host( + HealthCheck( + HostStat { + param: Param( + "health_check", + ), + value: HealthCheckStat { + healthy: false, + targets: [], + }, + }, + ), + ), + Target( + ConnectedClients( + TargetStat { + kind: Mdt, + param: Param( + "connected_clients", + ), + target: Target( + "fs-MDT0000", + ), + value: 1, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Mgt, + param: Param( + "filesfree", + ), + target: Target( + "MGS", + ), + value: 32555, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Mdt, + param: Param( + "filesfree", + ), + target: Target( + "fs-MDT0000", + ), + value: 1885250, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Ost, + param: Param( + "filesfree", + ), + target: Target( + "fs-OST0000", + ), + value: 40134, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Ost, + param: Param( + "filesfree", + ), + target: Target( + "fs-OST0001", + ), + value: 40134, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Mgt, + param: Param( + "filestotal", + ), + target: Target( + "MGS", + ), + value: 32768, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Mdt, + param: Param( + "filestotal", + ), + target: Target( + "fs-MDT0000", + ), + value: 1885696, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Ost, + param: Param( + "filestotal", + ), + target: Target( + "fs-OST0000", + ), + value: 40960, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Ost, + param: Param( + "filestotal", + ), + target: Target( + "fs-OST0001", + ), + value: 40960, + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Mgt, + param: Param( + "fstype", + ), + target: Target( + "MGS", + ), + value: "ldiskfs", + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Mdt, + param: Param( + "fstype", + ), + target: Target( + "fs-MDT0000", + ), + value: "ldiskfs", + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Ost, + param: Param( + "fstype", + ), + target: Target( + "fs-OST0000", + ), + value: "ldiskfs", + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Ost, + param: Param( + "fstype", + ), + target: Target( + "fs-OST0001", + ), + value: "ldiskfs", + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Mgt, + param: Param( + "kbytesavail", + ), + target: Target( + "MGS", + ), + value: 463060, + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Mdt, + param: Param( + "kbytesavail", + ), + target: Target( + "fs-MDT0000", + ), + value: 2365504, + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Ost, + param: Param( + "kbytesavail", + ), + target: Target( + "fs-OST0000", + ), + value: 4037332, + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Ost, + param: Param( + "kbytesavail", + ), + target: Target( + "fs-OST0001", + ), + value: 4037332, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Mgt, + param: Param( + "kbytesfree", + ), + target: Target( + "MGS", + ), + value: 489272, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Mdt, + param: Param( + "kbytesfree", + ), + target: Target( + "fs-MDT0000", + ), + value: 2599612, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Ost, + param: Param( + "kbytesfree", + ), + target: Target( + "fs-OST0000", + ), + value: 4106144, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Ost, + param: Param( + "kbytesfree", + ), + target: Target( + "fs-OST0001", + ), + value: 4106144, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Mgt, + param: Param( + "kbytestotal", + ), + target: Target( + "MGS", + ), + value: 491092, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Mdt, + param: Param( + "kbytestotal", + ), + target: Target( + "fs-MDT0000", + ), + value: 2602832, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Ost, + param: Param( + "kbytestotal", + ), + target: Target( + "fs-OST0000", + ), + value: 4108388, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Ost, + param: Param( + "kbytestotal", + ), + target: Target( + "fs-OST0001", + ), + value: 4108388, + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Mgt, + param: Param( + "brw_stats", + ), + target: Target( + "MGS", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + ], + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Mdt, + param: Param( + "brw_stats", + ), + target: Target( + "fs-MDT0000", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + ], + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Ost, + param: Param( + "brw_stats", + ), + target: Target( + "fs-OST0000", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + ], + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Ost, + param: Param( + "brw_stats", + ), + target: Target( + "fs-OST0001", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + ], + }, + ), + ), + Target( + ConnectedClients( + TargetStat { + kind: Mdt, + param: Param( + "connected_clients", + ), + target: Target( + "fs-MDT0000", + ), + value: 1, + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Mgt, + param: Param( + "stats", + ), + target: Target( + "MGS", + ), + value: [ + Stat { + name: "req_waittime", + units: "usec", + samples: 7077, + min: Some( + 3, + ), + max: Some( + 50384, + ), + sum: Some( + 1412555, + ), + sumsquare: Some( + 6633863085, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 7077, + min: Some( + 0, + ), + max: Some( + 1, + ), + sum: Some( + 1, + ), + sumsquare: Some( + 1, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 7077, + min: Some( + 1, + ), + max: Some( + 3, + ), + sum: Some( + 7146, + ), + sumsquare: Some( + 7294, + ), + }, + Stat { + name: "req_timeout", + units: "sec", + samples: 7077, + min: Some( + 1, + ), + max: Some( + 15, + ), + sum: Some( + 90946, + ), + sumsquare: Some( + 1348936, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 14163, + min: Some( + 61, + ), + max: Some( + 64, + ), + sum: Some( + 892118, + ), + sumsquare: Some( + 56194126, + ), + }, + Stat { + name: "ldlm_plain_enqueue", + units: "reqs", + samples: 1084, + min: Some( + 1, + ), + max: Some( + 1, + ), + sum: Some( + 1084, + ), + sumsquare: Some( + 1084, + ), + }, + Stat { + name: "mgs_connect", + units: "usec", + samples: 9, + min: Some( + 61, + ), + max: Some( + 218, + ), + sum: Some( + 1114, + ), + sumsquare: Some( + 156882, + ), + }, + Stat { + name: "mgs_target_reg", + units: "usec", + samples: 44, + min: Some( + 109, + ), + max: Some( + 192880, + ), + sum: Some( + 684875, + ), + sumsquare: Some( + 63698978079, + ), + }, + Stat { + name: "mgs_config_read", + units: "usec", + samples: 28, + min: Some( + 31, + ), + max: Some( + 1651, + ), + sum: Some( + 12342, + ), + sumsquare: Some( + 9274964, + ), + }, + Stat { + name: "obd_ping", + units: "usec", + samples: 2479, + min: Some( + 2, + ), + max: Some( + 403, + ), + sum: Some( + 92129, + ), + sumsquare: Some( + 5738787, + ), + }, + Stat { + name: "llog_origin_handle_open", + units: "usec", + samples: 1047, + min: Some( + 5, + ), + max: Some( + 185, + ), + sum: Some( + 29184, + ), + sumsquare: Some( + 1410662, + ), + }, + Stat { + name: "llog_origin_handle_next_block", + units: "usec", + samples: 1480, + min: Some( + 6, + ), + max: Some( + 18073, + ), + sum: Some( + 126444, + ), + sumsquare: Some( + 808404604, + ), + }, + Stat { + name: "llog_origin_handle_read_header", + units: "usec", + samples: 906, + min: Some( + 6, + ), + max: Some( + 23326, + ), + sum: Some( + 136715, + ), + sumsquare: Some( + 1386538557, + ), + }, + ], + }, + ), + ), + Target( + ThreadsMax( + TargetStat { + kind: Mgt, + param: Param( + "threads_max", + ), + target: Target( + "MGS", + ), + value: 32, + }, + ), + ), + Target( + ThreadsMin( + TargetStat { + kind: Mgt, + param: Param( + "threads_min", + ), + target: Target( + "MGS", + ), + value: 3, + }, + ), + ), + Target( + ThreadsStarted( + TargetStat { + kind: Mgt, + param: Param( + "threads_started", + ), + target: Target( + "MGS", + ), + value: 4, + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Mgt, + param: Param( + "num_exports", + ), + target: Target( + "MGS", + ), + value: 9, + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Ost, + param: Param( + "stats", + ), + target: Target( + "fs-OST0000", + ), + value: [ + Stat { + name: "create", + units: "usecs", + samples: 16, + min: Some( + 0, + ), + max: Some( + 37539, + ), + sum: Some( + 88178, + ), + sumsquare: Some( + 2725609146, + ), + }, + Stat { + name: "statfs", + units: "usecs", + samples: 10822, + min: Some( + 0, + ), + max: Some( + 319, + ), + sum: Some( + 69750, + ), + sumsquare: Some( + 957530, + ), + }, + Stat { + name: "get_info", + units: "usecs", + samples: 8, + min: Some( + 453, + ), + max: Some( + 26192, + ), + sum: Some( + 70349, + ), + sumsquare: Some( + 1272717255, + ), + }, + ], + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Ost, + param: Param( + "stats", + ), + target: Target( + "fs-OST0001", + ), + value: [ + Stat { + name: "create", + units: "usecs", + samples: 16, + min: Some( + 0, + ), + max: Some( + 46653, + ), + sum: Some( + 63391, + ), + sumsquare: Some( + 2291099301, + ), + }, + Stat { + name: "statfs", + units: "usecs", + samples: 10822, + min: Some( + 0, + ), + max: Some( + 208, + ), + sum: Some( + 64901, + ), + sumsquare: Some( + 826233, + ), + }, + Stat { + name: "get_info", + units: "usecs", + samples: 8, + min: Some( + 732, + ), + max: Some( + 96119, + ), + sum: Some( + 381688, + ), + sumsquare: Some( + 26464951586, + ), + }, + ], + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Ost, + param: Param( + "num_exports", + ), + target: Target( + "fs-OST0000", + ), + value: 8, + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Ost, + param: Param( + "num_exports", + ), + target: Target( + "fs-OST0001", + ), + value: 8, + }, + ), + ), + Target( + TotDirty( + TargetStat { + kind: Ost, + param: Param( + "tot_dirty", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + TotDirty( + TargetStat { + kind: Ost, + param: Param( + "tot_dirty", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + TotGranted( + TargetStat { + kind: Ost, + param: Param( + "tot_granted", + ), + target: Target( + "fs-OST0000", + ), + value: 272832, + }, + ), + ), + Target( + TotGranted( + TargetStat { + kind: Ost, + param: Param( + "tot_granted", + ), + target: Target( + "fs-OST0001", + ), + value: 272832, + }, + ), + ), + Target( + TotPending( + TargetStat { + kind: Ost, + param: Param( + "tot_pending", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + TotPending( + TargetStat { + kind: Ost, + param: Param( + "tot_pending", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost", + ), + stats: [ + Stat { + name: "req_waittime", + units: "usec", + samples: 118, + min: Some( + 6, + ), + max: Some( + 37302, + ), + sum: Some( + 187249, + ), + sumsquare: Some( + 3863287049, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 118, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 118, + min: Some( + 1, + ), + max: Some( + 6, + ), + sum: Some( + 237, + ), + sumsquare: Some( + 755, + ), + }, + Stat { + name: "req_timeout", + units: "sec", + samples: 118, + min: Some( + 4, + ), + max: Some( + 15, + ), + sum: Some( + 606, + ), + sumsquare: Some( + 3984, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 247, + min: Some( + 63, + ), + max: Some( + 64, + ), + sum: Some( + 15757, + ), + sumsquare: Some( + 1005235, + ), + }, + Stat { + name: "ost_create", + units: "usec", + samples: 32, + min: Some( + 4, + ), + max: Some( + 46668, + ), + sum: Some( + 151955, + ), + sumsquare: Some( + 5024095321, + ), + }, + Stat { + name: "ost_get_info", + units: "usec", + samples: 16, + min: Some( + 463, + ), + max: Some( + 96149, + ), + sum: Some( + 452357, + ), + sumsquare: Some( + 27754397689, + ), + }, + Stat { + name: "ost_connect", + units: "usec", + samples: 60, + min: Some( + 8, + ), + max: Some( + 1950, + ), + sum: Some( + 10886, + ), + sumsquare: Some( + 11179762, + ), + }, + Stat { + name: "ost_disconnect", + units: "usec", + samples: 2, + min: Some( + 212, + ), + max: Some( + 215, + ), + sum: Some( + 427, + ), + sumsquare: Some( + 91169, + ), + }, + Stat { + name: "obd_ping", + units: "usec", + samples: 8, + min: Some( + 2, + ), + max: Some( + 26, + ), + sum: Some( + 129, + ), + sumsquare: Some( + 2763, + ), + }, + ], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_io", + ), + stats: [], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_create", + ), + stats: [ + Stat { + name: "req_waittime", + units: "usec", + samples: 21644, + min: Some( + 4, + ), + max: Some( + 9738, + ), + sum: Some( + 4952537, + ), + sumsquare: Some( + 10139816613, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 21644, + min: Some( + 0, + ), + max: Some( + 1, + ), + sum: Some( + 74, + ), + sumsquare: Some( + 74, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 21644, + min: Some( + 1, + ), + max: Some( + 2, + ), + sum: Some( + 27124, + ), + sumsquare: Some( + 38084, + ), + }, + Stat { + name: "req_timeout", + units: "sec", + samples: 21644, + min: Some( + 1, + ), + max: Some( + 15, + ), + sum: Some( + 323157, + ), + sumsquare: Some( + 4845807, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 43782, + min: Some( + 63, + ), + max: Some( + 64, + ), + sum: Some( + 2800939, + ), + sumsquare: Some( + 179190229, + ), + }, + Stat { + name: "ost_statfs", + units: "usec", + samples: 21644, + min: Some( + 2, + ), + max: Some( + 1048, + ), + sum: Some( + 990253, + ), + sumsquare: Some( + 76226431, + ), + }, + ], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_out", + ), + stats: [ + Stat { + name: "req_waittime", + units: "usec", + samples: 6735, + min: Some( + 5, + ), + max: Some( + 130980, + ), + sum: Some( + 2497780, + ), + sumsquare: Some( + 35971276068, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 6735, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 6735, + min: Some( + 1, + ), + max: Some( + 2, + ), + sum: Some( + 6738, + ), + sumsquare: Some( + 6744, + ), + }, + Stat { + name: "req_timeout", + units: "sec", + samples: 6735, + min: Some( + 4, + ), + max: Some( + 15, + ), + sum: Some( + 99991, + ), + sumsquare: Some( + 1495399, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 13524, + min: Some( + 63, + ), + max: Some( + 64, + ), + sum: Some( + 865393, + ), + sumsquare: Some( + 55376143, + ), + }, + Stat { + name: "mds_connect", + units: "usec", + samples: 30, + min: Some( + 9, + ), + max: Some( + 1641, + ), + sum: Some( + 5607, + ), + sumsquare: Some( + 5233255, + ), + }, + Stat { + name: "mds_statfs", + units: "usec", + samples: 6677, + min: Some( + 4, + ), + max: Some( + 420, + ), + sum: Some( + 363867, + ), + sumsquare: Some( + 27702321, + ), + }, + Stat { + name: "obd_ping", + units: "usec", + samples: 7, + min: Some( + 8, + ), + max: Some( + 26, + ), + sum: Some( + 112, + ), + sumsquare: Some( + 2020, + ), + }, + Stat { + name: "out_update", + units: "usec", + samples: 21, + min: Some( + 6, + ), + max: Some( + 750, + ), + sum: Some( + 2679, + ), + sumsquare: Some( + 1122351, + ), + }, + ], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_seq", + ), + stats: [ + Stat { + name: "req_waittime", + units: "usec", + samples: 8, + min: Some( + 9, + ), + max: Some( + 38539, + ), + sum: Some( + 38728, + ), + sumsquare: Some( + 1485260732, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 8, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 8, + min: Some( + 1, + ), + max: Some( + 2, + ), + sum: Some( + 10, + ), + sumsquare: Some( + 14, + ), + }, + Stat { + name: "req_timeout", + units: "sec", + samples: 8, + min: Some( + 1, + ), + max: Some( + 10, + ), + sum: Some( + 26, + ), + sumsquare: Some( + 206, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 18, + min: Some( + 64, + ), + max: Some( + 64, + ), + sum: Some( + 1152, + ), + sumsquare: Some( + 73728, + ), + }, + Stat { + name: "seq_query", + units: "usec", + samples: 8, + min: Some( + 6, + ), + max: Some( + 72676, + ), + sum: Some( + 90424, + ), + sumsquare: Some( + 5593607704, + ), + }, + ], + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Mdt, + param: Param( + "md_stats", + ), + target: Target( + "fs-MDT0000", + ), + value: [ + Stat { + name: "getattr", + units: "usecs", + samples: 4, + min: Some( + 0, + ), + max: Some( + 103, + ), + sum: Some( + 195, + ), + sumsquare: Some( + 15003, + ), + }, + Stat { + name: "statfs", + units: "usecs", + samples: 9466, + min: Some( + 0, + ), + max: Some( + 225, + ), + sum: Some( + 117415, + ), + sumsquare: Some( + 2170351, + ), + }, + ], + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Mdt, + param: Param( + "num_exports", + ), + target: Target( + "fs-MDT0000", + ), + value: 32, + }, + ), + ), + Target( + ContendedLocks( + TargetStat { + kind: Mdt, + param: Param( + "contended_locks", + ), + target: Target( + "fs-MDT0000", + ), + value: 32, + }, + ), + ), + Target( + ContendedLocks( + TargetStat { + kind: Ost, + param: Param( + "contended_locks", + ), + target: Target( + "fs-OST0000", + ), + value: 32, + }, + ), + ), + Target( + ContendedLocks( + TargetStat { + kind: Ost, + param: Param( + "contended_locks", + ), + target: Target( + "fs-OST0001", + ), + value: 32, + }, + ), + ), + Target( + ContentionSeconds( + TargetStat { + kind: Mdt, + param: Param( + "contention_seconds", + ), + target: Target( + "fs-MDT0000", + ), + value: 2, + }, + ), + ), + Target( + ContentionSeconds( + TargetStat { + kind: Ost, + param: Param( + "contention_seconds", + ), + target: Target( + "fs-OST0000", + ), + value: 2, + }, + ), + ), + Target( + ContentionSeconds( + TargetStat { + kind: Ost, + param: Param( + "contention_seconds", + ), + target: Target( + "fs-OST0001", + ), + value: 2, + }, + ), + ), + Target( + CtimeAgeLimit( + TargetStat { + kind: Mdt, + param: Param( + "ctime_age_limit", + ), + target: Target( + "fs-MDT0000", + ), + value: 10, + }, + ), + ), + Target( + CtimeAgeLimit( + TargetStat { + kind: Ost, + param: Param( + "ctime_age_limit", + ), + target: Target( + "fs-OST0000", + ), + value: 10, + }, + ), + ), + Target( + CtimeAgeLimit( + TargetStat { + kind: Ost, + param: Param( + "ctime_age_limit", + ), + target: Target( + "fs-OST0001", + ), + value: 10, + }, + ), + ), + Target( + EarlyLockCancel( + TargetStat { + kind: Mdt, + param: Param( + "early_lock_cancel", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + EarlyLockCancel( + TargetStat { + kind: Ost, + param: Param( + "early_lock_cancel", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + EarlyLockCancel( + TargetStat { + kind: Ost, + param: Param( + "early_lock_cancel", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LockCount( + TargetStat { + kind: Mdt, + param: Param( + "lock_count", + ), + target: Target( + "fs-MDT0000", + ), + value: 99, + }, + ), + ), + Target( + LockCount( + TargetStat { + kind: Ost, + param: Param( + "lock_count", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + LockCount( + TargetStat { + kind: Ost, + param: Param( + "lock_count", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LockTimeouts( + TargetStat { + kind: Mdt, + param: Param( + "lock_timeouts", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + LockTimeouts( + TargetStat { + kind: Ost, + param: Param( + "lock_timeouts", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + LockTimeouts( + TargetStat { + kind: Ost, + param: Param( + "lock_timeouts", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LockUnusedCount( + TargetStat { + kind: Mdt, + param: Param( + "lock_unused_count", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + LockUnusedCount( + TargetStat { + kind: Ost, + param: Param( + "lock_unused_count", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + LockUnusedCount( + TargetStat { + kind: Ost, + param: Param( + "lock_unused_count", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LruMaxAge( + TargetStat { + kind: Mdt, + param: Param( + "lru_max_age", + ), + target: Target( + "fs-MDT0000", + ), + value: 3900000, + }, + ), + ), + Target( + LruMaxAge( + TargetStat { + kind: Ost, + param: Param( + "lru_max_age", + ), + target: Target( + "fs-OST0000", + ), + value: 3900000, + }, + ), + ), + Target( + LruMaxAge( + TargetStat { + kind: Ost, + param: Param( + "lru_max_age", + ), + target: Target( + "fs-OST0001", + ), + value: 3900000, + }, + ), + ), + Target( + LruSize( + TargetStat { + kind: Mdt, + param: Param( + "lru_size", + ), + target: Target( + "fs-MDT0000", + ), + value: 400, + }, + ), + ), + Target( + LruSize( + TargetStat { + kind: Ost, + param: Param( + "lru_size", + ), + target: Target( + "fs-OST0000", + ), + value: 400, + }, + ), + ), + Target( + LruSize( + TargetStat { + kind: Ost, + param: Param( + "lru_size", + ), + target: Target( + "fs-OST0001", + ), + value: 400, + }, + ), + ), + Target( + MaxNolockBytes( + TargetStat { + kind: Mdt, + param: Param( + "max_nolock_bytes", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + MaxNolockBytes( + TargetStat { + kind: Ost, + param: Param( + "max_nolock_bytes", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + MaxNolockBytes( + TargetStat { + kind: Ost, + param: Param( + "max_nolock_bytes", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + MaxParallelAst( + TargetStat { + kind: Mdt, + param: Param( + "max_parallel_ast", + ), + target: Target( + "fs-MDT0000", + ), + value: 1024, + }, + ), + ), + Target( + MaxParallelAst( + TargetStat { + kind: Ost, + param: Param( + "max_parallel_ast", + ), + target: Target( + "fs-OST0000", + ), + value: 1024, + }, + ), + ), + Target( + MaxParallelAst( + TargetStat { + kind: Ost, + param: Param( + "max_parallel_ast", + ), + target: Target( + "fs-OST0001", + ), + value: 1024, + }, + ), + ), + Target( + ResourceCount( + TargetStat { + kind: Mdt, + param: Param( + "resource_count", + ), + target: Target( + "fs-MDT0000", + ), + value: 8, + }, + ), + ), + Target( + ResourceCount( + TargetStat { + kind: Ost, + param: Param( + "resource_count", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + ResourceCount( + TargetStat { + kind: Ost, + param: Param( + "resource_count", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + LustreService( + LdlmCanceld( + [ + Stat { + name: "req_waittime", + units: "usec", + samples: 978, + min: Some( + 4, + ), + max: Some( + 4633, + ), + sum: Some( + 250696, + ), + sumsquare: Some( + 339222166, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 978, + min: Some( + 0, + ), + max: Some( + 1, + ), + sum: Some( + 11, + ), + sumsquare: Some( + 11, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 978, + min: Some( + 1, + ), + max: Some( + 3, + ), + sum: Some( + 1368, + ), + sumsquare: Some( + 2266, + ), + }, + Stat { + name: "req_timeout", + units: "sec", + samples: 978, + min: Some( + 1, + ), + max: Some( + 15, + ), + sum: Some( + 12509, + ), + sumsquare: Some( + 185429, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 1974, + min: Some( + 56, + ), + max: Some( + 64, + ), + sum: Some( + 123563, + ), + sumsquare: Some( + 7741359, + ), + }, + Stat { + name: "ldlm_cancel", + units: "usec", + samples: 978, + min: Some( + 2, + ), + max: Some( + 753, + ), + sum: Some( + 12126, + ), + sumsquare: Some( + 997176, + ), + }, + ], + ), + ), + LustreService( + LdlmCbd( + [ + Stat { + name: "req_waittime", + units: "usec", + samples: 134, + min: Some( + 16, + ), + max: Some( + 496, + ), + sum: Some( + 18754, + ), + sumsquare: Some( + 3942630, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 134, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 134, + min: Some( + 1, + ), + max: Some( + 2, + ), + sum: Some( + 175, + ), + sumsquare: Some( + 257, + ), + }, + Stat { + name: "req_timeout", + units: "sec", + samples: 134, + min: Some( + 1, + ), + max: Some( + 15, + ), + sum: Some( + 1753, + ), + sumsquare: Some( + 25993, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 277, + min: Some( + 0, + ), + max: Some( + 1, + ), + sum: Some( + 255, + ), + sumsquare: Some( + 255, + ), + }, + Stat { + name: "ldlm_bl_callback", + units: "usec", + samples: 134, + min: Some( + 3, + ), + max: Some( + 177, + ), + sum: Some( + 2678, + ), + sumsquare: Some( + 115678, + ), + }, + ], + ), + ), +] diff --git a/lustre-collector/src/snapshots/lustre_collector__tests__ex8761_job_stats.snap b/lustre-collector/src/snapshots/lustre_collector__tests__ex8761_job_stats.snap new file mode 100644 index 00000000..4a80340c --- /dev/null +++ b/lustre-collector/src/snapshots/lustre_collector__tests__ex8761_job_stats.snap @@ -0,0 +1,2242 @@ +--- +source: lustre-collector/src/lib.rs +expression: expected +--- +[ + Host( + Memused( + HostStat { + param: Param( + "memused", + ), + value: 242840621, + }, + ), + ), + Host( + MemusedMax( + HostStat { + param: Param( + "memused_max", + ), + value: 244436941, + }, + ), + ), + Host( + LNetMemUsed( + HostStat { + param: Param( + "lnet_memused", + ), + value: 66923896, + }, + ), + ), + Host( + HealthCheck( + HostStat { + param: Param( + "health_check", + ), + value: HealthCheckStat { + healthy: false, + targets: [], + }, + }, + ), + ), + Target( + ConnectedClients( + TargetStat { + kind: Mdt, + param: Param( + "connected_clients", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Mgt, + param: Param( + "filesfree", + ), + target: Target( + "MGS", + ), + value: 32555, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Mdt, + param: Param( + "filesfree", + ), + target: Target( + "fs-MDT0000", + ), + value: 1885252, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Ost, + param: Param( + "filesfree", + ), + target: Target( + "fs-OST0000", + ), + value: 39844, + }, + ), + ), + Target( + FilesFree( + TargetStat { + kind: Ost, + param: Param( + "filesfree", + ), + target: Target( + "fs-OST0001", + ), + value: 39876, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Mgt, + param: Param( + "filestotal", + ), + target: Target( + "MGS", + ), + value: 32768, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Mdt, + param: Param( + "filestotal", + ), + target: Target( + "fs-MDT0000", + ), + value: 1885696, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Ost, + param: Param( + "filestotal", + ), + target: Target( + "fs-OST0000", + ), + value: 40960, + }, + ), + ), + Target( + FilesTotal( + TargetStat { + kind: Ost, + param: Param( + "filestotal", + ), + target: Target( + "fs-OST0001", + ), + value: 40960, + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Mgt, + param: Param( + "fstype", + ), + target: Target( + "MGS", + ), + value: "ldiskfs", + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Mdt, + param: Param( + "fstype", + ), + target: Target( + "fs-MDT0000", + ), + value: "ldiskfs", + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Ost, + param: Param( + "fstype", + ), + target: Target( + "fs-OST0000", + ), + value: "ldiskfs", + }, + ), + ), + Target( + FsType( + TargetStat { + kind: Ost, + param: Param( + "fstype", + ), + target: Target( + "fs-OST0001", + ), + value: "ldiskfs", + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Mgt, + param: Param( + "kbytesavail", + ), + target: Target( + "MGS", + ), + value: 463060, + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Mdt, + param: Param( + "kbytesavail", + ), + target: Target( + "fs-MDT0000", + ), + value: 2365496, + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Ost, + param: Param( + "kbytesavail", + ), + target: Target( + "fs-OST0000", + ), + value: 4037172, + }, + ), + ), + Target( + KBytesAvail( + TargetStat { + kind: Ost, + param: Param( + "kbytesavail", + ), + target: Target( + "fs-OST0001", + ), + value: 4037172, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Mgt, + param: Param( + "kbytesfree", + ), + target: Target( + "MGS", + ), + value: 489272, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Mdt, + param: Param( + "kbytesfree", + ), + target: Target( + "fs-MDT0000", + ), + value: 2599604, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Ost, + param: Param( + "kbytesfree", + ), + target: Target( + "fs-OST0000", + ), + value: 4105984, + }, + ), + ), + Target( + KBytesFree( + TargetStat { + kind: Ost, + param: Param( + "kbytesfree", + ), + target: Target( + "fs-OST0001", + ), + value: 4105984, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Mgt, + param: Param( + "kbytestotal", + ), + target: Target( + "MGS", + ), + value: 491092, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Mdt, + param: Param( + "kbytestotal", + ), + target: Target( + "fs-MDT0000", + ), + value: 2602832, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Ost, + param: Param( + "kbytestotal", + ), + target: Target( + "fs-OST0000", + ), + value: 4108388, + }, + ), + ), + Target( + KBytesTotal( + TargetStat { + kind: Ost, + param: Param( + "kbytestotal", + ), + target: Target( + "fs-OST0001", + ), + value: 4108388, + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Mgt, + param: Param( + "brw_stats", + ), + target: Target( + "MGS", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "block_maps_msec", + unit: "maps", + buckets: [], + }, + ], + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Mdt, + param: Param( + "brw_stats", + ), + target: Target( + "fs-MDT0000", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "block_maps_msec", + unit: "maps", + buckets: [], + }, + ], + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Ost, + param: Param( + "brw_stats", + ), + target: Target( + "fs-OST0000", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "block_maps_msec", + unit: "maps", + buckets: [], + }, + ], + }, + ), + ), + Target( + BrwStats( + TargetStat { + kind: Ost, + param: Param( + "brw_stats", + ), + target: Target( + "fs-OST0001", + ), + value: [ + BrwStats { + name: "pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_pages", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "discont_blocks", + unit: "rpcs", + buckets: [], + }, + BrwStats { + name: "dio_frags", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "rpc_hist", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "io_time", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "disk_iosize", + unit: "ios", + buckets: [], + }, + BrwStats { + name: "block_maps_msec", + unit: "maps", + buckets: [], + }, + ], + }, + ), + ), + Target( + ConnectedClients( + TargetStat { + kind: Mdt, + param: Param( + "connected_clients", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Mgt, + param: Param( + "stats", + ), + target: Target( + "MGS", + ), + value: [ + Stat { + name: "req_waittime", + units: "usecs", + samples: 732, + min: Some( + 4, + ), + max: Some( + 11382, + ), + sum: Some( + 126413, + ), + sumsquare: Some( + 467088731, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 732, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 732, + min: Some( + 1, + ), + max: Some( + 2, + ), + sum: Some( + 815, + ), + sumsquare: Some( + 981, + ), + }, + Stat { + name: "req_timeout", + units: "secs", + samples: 732, + min: Some( + 1, + ), + max: Some( + 15, + ), + sum: Some( + 10653, + ), + sumsquare: Some( + 159423, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 1464, + min: Some( + 61, + ), + max: Some( + 63, + ), + sum: Some( + 92056, + ), + sumsquare: Some( + 5788618, + ), + }, + Stat { + name: "ldlm_plain_enqueue", + units: "reqs", + samples: 128, + min: Some( + 1, + ), + max: Some( + 1, + ), + sum: Some( + 128, + ), + sumsquare: Some( + 128, + ), + }, + Stat { + name: "mgs_connect", + units: "usecs", + samples: 8, + min: Some( + 61, + ), + max: Some( + 131, + ), + sum: Some( + 795, + ), + sumsquare: Some( + 82653, + ), + }, + Stat { + name: "mgs_target_reg", + units: "usecs", + samples: 48, + min: Some( + 73, + ), + max: Some( + 141239, + ), + sum: Some( + 1052185, + ), + sumsquare: Some( + 62203787475, + ), + }, + Stat { + name: "mgs_config_read", + units: "usecs", + samples: 39, + min: Some( + 32, + ), + max: Some( + 71093, + ), + sum: Some( + 114396, + ), + sumsquare: Some( + 5406804200, + ), + }, + Stat { + name: "obd_ping", + units: "usecs", + samples: 21, + min: Some( + 4, + ), + max: Some( + 45, + ), + sum: Some( + 515, + ), + sumsquare: Some( + 15157, + ), + }, + Stat { + name: "llog_origin_handle_open", + units: "usecs", + samples: 80, + min: Some( + 10, + ), + max: Some( + 121, + ), + sum: Some( + 3274, + ), + sumsquare: Some( + 169542, + ), + }, + Stat { + name: "llog_origin_handle_next_block", + units: "usecs", + samples: 336, + min: Some( + 7, + ), + max: Some( + 144265, + ), + sum: Some( + 1944257, + ), + sumsquare: Some( + 137912111925, + ), + }, + Stat { + name: "llog_origin_handle_read_header", + units: "usecs", + samples: 72, + min: Some( + 10, + ), + max: Some( + 101465, + ), + sum: Some( + 848171, + ), + sumsquare: Some( + 51506020451, + ), + }, + ], + }, + ), + ), + Target( + ThreadsMax( + TargetStat { + kind: Mgt, + param: Param( + "threads_max", + ), + target: Target( + "MGS", + ), + value: 32, + }, + ), + ), + Target( + ThreadsMin( + TargetStat { + kind: Mgt, + param: Param( + "threads_min", + ), + target: Target( + "MGS", + ), + value: 3, + }, + ), + ), + Target( + ThreadsStarted( + TargetStat { + kind: Mgt, + param: Param( + "threads_started", + ), + target: Target( + "MGS", + ), + value: 4, + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Mgt, + param: Param( + "num_exports", + ), + target: Target( + "MGS", + ), + value: 8, + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Ost, + param: Param( + "stats", + ), + target: Target( + "fs-OST0000", + ), + value: [ + Stat { + name: "create", + units: "usecs", + samples: 16, + min: Some( + 1, + ), + max: Some( + 20538, + ), + sum: Some( + 84170, + ), + sumsquare: Some( + 1096533070, + ), + }, + Stat { + name: "statfs", + units: "usecs", + samples: 104, + min: Some( + 0, + ), + max: Some( + 17, + ), + sum: Some( + 323, + ), + sumsquare: Some( + 2133, + ), + }, + Stat { + name: "get_info", + units: "usecs", + samples: 8, + min: Some( + 14962, + ), + max: Some( + 77399, + ), + sum: Some( + 526421, + ), + sumsquare: Some( + 37781669655, + ), + }, + ], + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Ost, + param: Param( + "stats", + ), + target: Target( + "fs-OST0001", + ), + value: [ + Stat { + name: "create", + units: "usecs", + samples: 16, + min: Some( + 0, + ), + max: Some( + 30237, + ), + sum: Some( + 107582, + ), + sumsquare: Some( + 1897367894, + ), + }, + Stat { + name: "statfs", + units: "usecs", + samples: 104, + min: Some( + 0, + ), + max: Some( + 40, + ), + sum: Some( + 392, + ), + sumsquare: Some( + 4404, + ), + }, + Stat { + name: "get_info", + units: "usecs", + samples: 8, + min: Some( + 7528, + ), + max: Some( + 67836, + ), + sum: Some( + 245760, + ), + sumsquare: Some( + 10452380450, + ), + }, + ], + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Ost, + param: Param( + "num_exports", + ), + target: Target( + "fs-OST0000", + ), + value: 8, + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Ost, + param: Param( + "num_exports", + ), + target: Target( + "fs-OST0001", + ), + value: 8, + }, + ), + ), + Target( + TotDirty( + TargetStat { + kind: Ost, + param: Param( + "tot_dirty", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + TotDirty( + TargetStat { + kind: Ost, + param: Param( + "tot_dirty", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + TotGranted( + TargetStat { + kind: Ost, + param: Param( + "tot_granted", + ), + target: Target( + "fs-OST0000", + ), + value: 272832, + }, + ), + ), + Target( + TotGranted( + TargetStat { + kind: Ost, + param: Param( + "tot_granted", + ), + target: Target( + "fs-OST0001", + ), + value: 272832, + }, + ), + ), + Target( + TotPending( + TargetStat { + kind: Ost, + param: Param( + "tot_pending", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + TotPending( + TargetStat { + kind: Ost, + param: Param( + "tot_pending", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost", + ), + stats: [ + Stat { + name: "req_waittime", + units: "usecs", + samples: 102, + min: Some( + 10, + ), + max: Some( + 97123, + ), + sum: Some( + 819241, + ), + sumsquare: Some( + 52917251485, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 102, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 102, + min: Some( + 1, + ), + max: Some( + 8, + ), + sum: Some( + 278, + ), + sumsquare: Some( + 1258, + ), + }, + Stat { + name: "req_timeout", + units: "secs", + samples: 102, + min: Some( + 15, + ), + max: Some( + 15, + ), + sum: Some( + 1530, + ), + sumsquare: Some( + 22950, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 207, + min: Some( + 63, + ), + max: Some( + 64, + ), + sum: Some( + 13154, + ), + sumsquare: Some( + 835934, + ), + }, + Stat { + name: "ost_create", + units: "usecs", + samples: 32, + min: Some( + 10, + ), + max: Some( + 30255, + ), + sum: Some( + 192363, + ), + sumsquare: Some( + 3001709813, + ), + }, + Stat { + name: "ost_get_info", + units: "usecs", + samples: 16, + min: Some( + 7556, + ), + max: Some( + 77419, + ), + sum: Some( + 772613, + ), + sumsquare: Some( + 48271976175, + ), + }, + Stat { + name: "ost_connect", + units: "usecs", + samples: 27, + min: Some( + 23, + ), + max: Some( + 1301, + ), + sum: Some( + 4070, + ), + sumsquare: Some( + 3081484, + ), + }, + Stat { + name: "obd_ping", + units: "usecs", + samples: 27, + min: Some( + 2, + ), + max: Some( + 50, + ), + sum: Some( + 514, + ), + sumsquare: Some( + 14540, + ), + }, + ], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_io", + ), + stats: [], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_create", + ), + stats: [ + Stat { + name: "req_waittime", + units: "usecs", + samples: 208, + min: Some( + 7, + ), + max: Some( + 3961, + ), + sum: Some( + 25569, + ), + sumsquare: Some( + 38837139, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 208, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 208, + min: Some( + 1, + ), + max: Some( + 2, + ), + sum: Some( + 262, + ), + sumsquare: Some( + 370, + ), + }, + Stat { + name: "req_timeout", + units: "secs", + samples: 208, + min: Some( + 15, + ), + max: Some( + 15, + ), + sum: Some( + 3120, + ), + sumsquare: Some( + 46800, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 428, + min: Some( + 63, + ), + max: Some( + 64, + ), + sum: Some( + 27386, + ), + sumsquare: Some( + 1752326, + ), + }, + Stat { + name: "ost_statfs", + units: "usecs", + samples: 208, + min: Some( + 4, + ), + max: Some( + 365, + ), + sum: Some( + 5881, + ), + sumsquare: Some( + 328547, + ), + }, + ], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_out", + ), + stats: [], + }, + ), + ), + Target( + Oss( + OssStat { + param: Param( + "ost_seq", + ), + stats: [], + }, + ), + ), + Target( + Stats( + TargetStat { + kind: Mdt, + param: Param( + "md_stats", + ), + target: Target( + "fs-MDT0000", + ), + value: [ + Stat { + name: "statfs", + units: "usecs", + samples: 133, + min: Some( + 0, + ), + max: Some( + 57, + ), + sum: Some( + 1609, + ), + sumsquare: Some( + 26831, + ), + }, + ], + }, + ), + ), + Target( + NumExports( + TargetStat { + kind: Mdt, + param: Param( + "num_exports", + ), + target: Target( + "fs-MDT0000", + ), + value: 31, + }, + ), + ), + Target( + ContendedLocks( + TargetStat { + kind: Mdt, + param: Param( + "contended_locks", + ), + target: Target( + "fs-MDT0000", + ), + value: 32, + }, + ), + ), + Target( + ContendedLocks( + TargetStat { + kind: Ost, + param: Param( + "contended_locks", + ), + target: Target( + "fs-OST0000", + ), + value: 32, + }, + ), + ), + Target( + ContendedLocks( + TargetStat { + kind: Ost, + param: Param( + "contended_locks", + ), + target: Target( + "fs-OST0001", + ), + value: 32, + }, + ), + ), + Target( + ContentionSeconds( + TargetStat { + kind: Mdt, + param: Param( + "contention_seconds", + ), + target: Target( + "fs-MDT0000", + ), + value: 2, + }, + ), + ), + Target( + ContentionSeconds( + TargetStat { + kind: Ost, + param: Param( + "contention_seconds", + ), + target: Target( + "fs-OST0000", + ), + value: 2, + }, + ), + ), + Target( + ContentionSeconds( + TargetStat { + kind: Ost, + param: Param( + "contention_seconds", + ), + target: Target( + "fs-OST0001", + ), + value: 2, + }, + ), + ), + Target( + CtimeAgeLimit( + TargetStat { + kind: Mdt, + param: Param( + "ctime_age_limit", + ), + target: Target( + "fs-MDT0000", + ), + value: 10, + }, + ), + ), + Target( + CtimeAgeLimit( + TargetStat { + kind: Ost, + param: Param( + "ctime_age_limit", + ), + target: Target( + "fs-OST0000", + ), + value: 10, + }, + ), + ), + Target( + CtimeAgeLimit( + TargetStat { + kind: Ost, + param: Param( + "ctime_age_limit", + ), + target: Target( + "fs-OST0001", + ), + value: 10, + }, + ), + ), + Target( + EarlyLockCancel( + TargetStat { + kind: Mdt, + param: Param( + "early_lock_cancel", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + EarlyLockCancel( + TargetStat { + kind: Ost, + param: Param( + "early_lock_cancel", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + EarlyLockCancel( + TargetStat { + kind: Ost, + param: Param( + "early_lock_cancel", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LockCount( + TargetStat { + kind: Mdt, + param: Param( + "lock_count", + ), + target: Target( + "fs-MDT0000", + ), + value: 96, + }, + ), + ), + Target( + LockCount( + TargetStat { + kind: Ost, + param: Param( + "lock_count", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + LockCount( + TargetStat { + kind: Ost, + param: Param( + "lock_count", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LockTimeouts( + TargetStat { + kind: Mdt, + param: Param( + "lock_timeouts", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + LockTimeouts( + TargetStat { + kind: Ost, + param: Param( + "lock_timeouts", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + LockTimeouts( + TargetStat { + kind: Ost, + param: Param( + "lock_timeouts", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LockUnusedCount( + TargetStat { + kind: Mdt, + param: Param( + "lock_unused_count", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + LockUnusedCount( + TargetStat { + kind: Ost, + param: Param( + "lock_unused_count", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + LockUnusedCount( + TargetStat { + kind: Ost, + param: Param( + "lock_unused_count", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + LruMaxAge( + TargetStat { + kind: Mdt, + param: Param( + "lru_max_age", + ), + target: Target( + "fs-MDT0000", + ), + value: 3900000, + }, + ), + ), + Target( + LruMaxAge( + TargetStat { + kind: Ost, + param: Param( + "lru_max_age", + ), + target: Target( + "fs-OST0000", + ), + value: 3900000, + }, + ), + ), + Target( + LruMaxAge( + TargetStat { + kind: Ost, + param: Param( + "lru_max_age", + ), + target: Target( + "fs-OST0001", + ), + value: 3900000, + }, + ), + ), + Target( + LruSize( + TargetStat { + kind: Mdt, + param: Param( + "lru_size", + ), + target: Target( + "fs-MDT0000", + ), + value: 400, + }, + ), + ), + Target( + LruSize( + TargetStat { + kind: Ost, + param: Param( + "lru_size", + ), + target: Target( + "fs-OST0000", + ), + value: 400, + }, + ), + ), + Target( + LruSize( + TargetStat { + kind: Ost, + param: Param( + "lru_size", + ), + target: Target( + "fs-OST0001", + ), + value: 400, + }, + ), + ), + Target( + MaxNolockBytes( + TargetStat { + kind: Mdt, + param: Param( + "max_nolock_bytes", + ), + target: Target( + "fs-MDT0000", + ), + value: 0, + }, + ), + ), + Target( + MaxNolockBytes( + TargetStat { + kind: Ost, + param: Param( + "max_nolock_bytes", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + MaxNolockBytes( + TargetStat { + kind: Ost, + param: Param( + "max_nolock_bytes", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + Target( + MaxParallelAst( + TargetStat { + kind: Mdt, + param: Param( + "max_parallel_ast", + ), + target: Target( + "fs-MDT0000", + ), + value: 1024, + }, + ), + ), + Target( + MaxParallelAst( + TargetStat { + kind: Ost, + param: Param( + "max_parallel_ast", + ), + target: Target( + "fs-OST0000", + ), + value: 1024, + }, + ), + ), + Target( + MaxParallelAst( + TargetStat { + kind: Ost, + param: Param( + "max_parallel_ast", + ), + target: Target( + "fs-OST0001", + ), + value: 1024, + }, + ), + ), + Target( + ResourceCount( + TargetStat { + kind: Mdt, + param: Param( + "resource_count", + ), + target: Target( + "fs-MDT0000", + ), + value: 6, + }, + ), + ), + Target( + ResourceCount( + TargetStat { + kind: Ost, + param: Param( + "resource_count", + ), + target: Target( + "fs-OST0000", + ), + value: 0, + }, + ), + ), + Target( + ResourceCount( + TargetStat { + kind: Ost, + param: Param( + "resource_count", + ), + target: Target( + "fs-OST0001", + ), + value: 0, + }, + ), + ), + LustreService( + LdlmCanceld( + [ + Stat { + name: "req_waittime", + units: "usecs", + samples: 24, + min: Some( + 11, + ), + max: Some( + 9900, + ), + sum: Some( + 19059, + ), + sumsquare: Some( + 129214269, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 24, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 24, + min: Some( + 1, + ), + max: Some( + 1, + ), + sum: Some( + 24, + ), + sumsquare: Some( + 24, + ), + }, + Stat { + name: "req_timeout", + units: "secs", + samples: 24, + min: Some( + 15, + ), + max: Some( + 15, + ), + sum: Some( + 360, + ), + sumsquare: Some( + 5400, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 50, + min: Some( + 63, + ), + max: Some( + 64, + ), + sum: Some( + 3194, + ), + sumsquare: Some( + 204038, + ), + }, + Stat { + name: "ldlm_cancel", + units: "usecs", + samples: 24, + min: Some( + 8, + ), + max: Some( + 97845, + ), + sum: Some( + 98397, + ), + sumsquare: Some( + 9573662057, + ), + }, + ], + ), + ), + LustreService( + LdlmCbd( + [ + Stat { + name: "req_waittime", + units: "usecs", + samples: 4, + min: Some( + 22, + ), + max: Some( + 3563, + ), + sum: Some( + 3683, + ), + sumsquare: Some( + 12701137, + ), + }, + Stat { + name: "req_qdepth", + units: "reqs", + samples: 4, + min: Some( + 0, + ), + max: Some( + 0, + ), + sum: Some( + 0, + ), + sumsquare: Some( + 0, + ), + }, + Stat { + name: "req_active", + units: "reqs", + samples: 4, + min: Some( + 1, + ), + max: Some( + 1, + ), + sum: Some( + 4, + ), + sumsquare: Some( + 4, + ), + }, + Stat { + name: "req_timeout", + units: "secs", + samples: 4, + min: Some( + 15, + ), + max: Some( + 15, + ), + sum: Some( + 60, + ), + sumsquare: Some( + 900, + ), + }, + Stat { + name: "reqbuf_avail", + units: "bufs", + samples: 9, + min: Some( + 1, + ), + max: Some( + 1, + ), + sum: Some( + 9, + ), + sumsquare: Some( + 9, + ), + }, + Stat { + name: "ldlm_bl_callback", + units: "usecs", + samples: 4, + min: Some( + 14, + ), + max: Some( + 64, + ), + sum: Some( + 130, + ), + sumsquare: Some( + 5694, + ), + }, + ], + ), + ), +] diff --git a/lustre-collector/src/snapshots/lustre_collector__tests__parse_mgs_fs_output.snap b/lustre-collector/src/snapshots/lustre_collector__tests__parse_mgs_fs_output.snap new file mode 100644 index 00000000..ef1a800c --- /dev/null +++ b/lustre-collector/src/snapshots/lustre_collector__tests__parse_mgs_fs_output.snap @@ -0,0 +1,24 @@ +--- +source: lustre-collector/src/lib.rs +expression: expected +--- +[ + Target( + FsNames( + TargetStat { + kind: Mgt, + param: Param( + "fsnames", + ), + target: Target( + "MGS", + ), + value: [ + FsName( + "testfs", + ), + ], + }, + ), + ), +] diff --git a/lustre-collector/src/snapshots/lustre_collector__tests__parse_recovery_status_output.snap b/lustre-collector/src/snapshots/lustre_collector__tests__parse_recovery_status_output.snap new file mode 100644 index 00000000..943a0b35 --- /dev/null +++ b/lustre-collector/src/snapshots/lustre_collector__tests__parse_recovery_status_output.snap @@ -0,0 +1,132 @@ +--- +source: lustre-collector/src/lib.rs +expression: expected +--- +[ + Target( + RecoveryStatus( + TargetStat { + kind: Ost, + param: Param( + "recovery_status", + ), + target: Target( + "fs-OST0000", + ), + value: Complete, + }, + ), + ), + Target( + RecoveryDuration( + TargetStat { + kind: Ost, + param: Param( + "recovery_status", + ), + target: Target( + "fs-OST0000", + ), + value: 150, + }, + ), + ), + Target( + RecoveryCompletedClients( + TargetStat { + kind: Ost, + param: Param( + "recovery_status", + ), + target: Target( + "fs-OST0000", + ), + value: 4, + }, + ), + ), + Target( + RecoveryStatus( + TargetStat { + kind: Ost, + param: Param( + "recovery_status", + ), + target: Target( + "fs-OST0001", + ), + value: Complete, + }, + ), + ), + Target( + RecoveryDuration( + TargetStat { + kind: Ost, + param: Param( + "recovery_status", + ), + target: Target( + "fs-OST0001", + ), + value: 150, + }, + ), + ), + Target( + RecoveryCompletedClients( + TargetStat { + kind: Ost, + param: Param( + "recovery_status", + ), + target: Target( + "fs-OST0001", + ), + value: 4, + }, + ), + ), + Target( + RecoveryStatus( + TargetStat { + kind: Mdt, + param: Param( + "recovery_status", + ), + target: Target( + "fs-MDT0000", + ), + value: Complete, + }, + ), + ), + Target( + RecoveryDuration( + TargetStat { + kind: Mdt, + param: Param( + "recovery_status", + ), + target: Target( + "fs-MDT0000", + ), + value: 1760, + }, + ), + ), + Target( + RecoveryCompletedClients( + TargetStat { + kind: Mdt, + param: Param( + "recovery_status", + ), + target: Target( + "fs-MDT0000", + ), + value: 3, + }, + ), + ), +]