Skip to content
This repository has been archived by the owner on May 21, 2024. It is now read-only.

Commit

Permalink
Add llite statistics
Browse files Browse the repository at this point in the history
  • Loading branch information
RDruon committed Jul 20, 2023
1 parent a996a70 commit 35cbb71
Show file tree
Hide file tree
Showing 10 changed files with 591 additions and 4 deletions.
15 changes: 15 additions & 0 deletions src/fixtures/valid/valid.txt
Original file line number Diff line number Diff line change
Expand Up @@ -328,3 +328,18 @@ req_active 1 samples [reqs] 1 1 1 1
req_timeout 1 samples [secs] 15 15 15 225
reqbuf_avail 3 samples [bufs] 1 1 3 3
ldlm_bl_callback 1 samples [usecs] 16 16 16 256
llite.ai400x2-ffff9440f1003000.stats=
snapshot_time 1689697369.331040915 secs.nsecs
ioctl 2 samples [reqs]
open 13812423 samples [usec] 1 725287 1027077752 8835364169944
close 13812423 samples [usec] 47 778498 1320315612 17542973849370
readdir 12 samples [usec] 0 4647 6715 22456295
getattr 14812440 samples [usec] 2 320411 1317584841 2110166912709
unlink 6906208 samples [usec] 117 749323 1386719680 23443327087798
mkdir 7906554 samples [usec] 104 1529199 20996782592 1837945636486522
rmdir 6939862 samples [usec] 95 646028 16617944601 635123583760591
mknod 6906208 samples [usec] 119 775827 1454511094 10119157242014
statfs 7 samples [usec] 147 197 1236 220284
inode_permission 251887103 samples [usec] 0 14235 178199279 1102415701
opencount 13812424 samples [reqs] 1 2 20718632 34531048
openclosetime 6906208 samples [usec] 2225920 34405427 163169641155255 11416538743473681487
6 changes: 4 additions & 2 deletions src/ldlm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// license that can be found in the LICENSE file.

use crate::{base_parsers::period, Record};
use combine::{parser::char::string, ParseError, Parser, Stream};
use combine::{attempt, parser::char::string, ParseError, Parser, Stream};

mod ldlm_namespace_parser;
mod ldlm_service_parser;
Expand All @@ -22,5 +22,7 @@ where
I: Stream<Token = char>,
I::Error: ParseError<I::Token, I::Range, I::Position>,
{
(string(LDLM), period()).with(ldlm_namespace_parser::parse().or(ldlm_service_parser::parse()))
(attempt(string(LDLM)), period())
.with(ldlm_namespace_parser::parse().or(ldlm_service_parser::parse()))
.message("while parsing ldlm")
}
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ mod base_parsers;
pub(crate) mod brw_stats_parser;
pub mod error;
pub(crate) mod ldlm;
pub(crate) mod llite;
mod lnetctl_parser;
mod mds;
pub mod mgs;
Expand Down
93 changes: 93 additions & 0 deletions src/llite/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
// Copyright (c) 2023 DDN. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

use crate::{
base_parsers::{param, period, target},
stats_parser::stats,
Param, Record, Stat, Target, TargetStats,
};
use combine::{attempt, choice, parser::char::string, ParseError, Parser, Stream};

pub(crate) const LLITE: &str = "llite";
pub(crate) const STATS: &str = "stats";

pub(crate) fn params() -> Vec<String> {
[STATS]
.into_iter()
.map(|x| format!("{LLITE}.*.{x}"))
.collect()
}

fn target_name<I>() -> impl Parser<I, Output = Target>
where
I: Stream<Token = char>,
I::Error: ParseError<I::Token, I::Range, I::Position>,
{
(
attempt(string(LLITE)).skip(period()),
target().skip(period()),
)
.map(|(_, x)| x)
.message("while parsing llite target_name")
}

enum LliteStat {
Stats(Vec<Stat>),
}

fn llite_stat<I>() -> impl Parser<I, Output = (Param, LliteStat)>
where
I: Stream<Token = char>,
I::Error: ParseError<I::Token, I::Range, I::Position>,
{
choice(((param(STATS), stats().map(LliteStat::Stats)).message("while parsing llite_stat"),))
}

pub(crate) fn parse<I>() -> impl Parser<I, Output = Record>
where
I: Stream<Token = char>,
I::Error: ParseError<I::Token, I::Range, I::Position>,
{
(target_name(), llite_stat())
.map(|(target, (param, value))| match value {
LliteStat::Stats(stats) => TargetStats::Llite(crate::types::LliteStat {
target,
param,
stats,
}),
})
.map(Record::Target)
.message("while parsing llite")
}

#[cfg(test)]
mod tests {
use super::*;
use combine::many;
use insta::assert_debug_snapshot;

#[test]
fn test_parse() {
let x = r#"llite.ai400x2-ffff9440f1003000.stats=
snapshot_time 1689697369.331040915 secs.nsecs
ioctl 2 samples [reqs]
open 13812423 samples [usec] 1 725287 1027077752 8835364169944
close 13812423 samples [usec] 47 778498 1320315612 17542973849370
readdir 12 samples [usec] 0 4647 6715 22456295
getattr 14812440 samples [usec] 2 320411 1317584841 2110166912709
unlink 6906208 samples [usec] 117 749323 1386719680 23443327087798
mkdir 7906554 samples [usec] 104 1529199 20996782592 1837945636486522
rmdir 6939862 samples [usec] 95 646028 16617944601 635123583760591
mknod 6906208 samples [usec] 119 775827 1454511094 10119157242014
statfs 7 samples [usec] 147 197 1236 220284
inode_permission 251887103 samples [usec] 0 14235 178199279 1102415701
opencount 13812424 samples [reqs] 1 2 20718632 34531048
openclosetime 6906208 samples [usec] 2225920 34405427 163169641155255 11416538743473681487
"#;

let result: (Vec<_>, _) = many(parse()).parse(x).unwrap();

assert_debug_snapshot!(result)
}
}
236 changes: 236 additions & 0 deletions src/llite/snapshots/lustre_collector__llite__tests__parse.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
---
source: src/llite/mod.rs
expression: result
---
(
[
Target(
Llite(
LliteStat {
target: Target(
"ai400x2-ffff9440f1003000",
),
param: Param(
"stats",
),
stats: [
Stat {
name: "ioctl",
units: "reqs",
samples: 2,
min: None,
max: None,
sum: None,
sumsquare: None,
},
Stat {
name: "open",
units: "usec",
samples: 13812423,
min: Some(
1,
),
max: Some(
725287,
),
sum: Some(
1027077752,
),
sumsquare: Some(
8835364169944,
),
},
Stat {
name: "close",
units: "usec",
samples: 13812423,
min: Some(
47,
),
max: Some(
778498,
),
sum: Some(
1320315612,
),
sumsquare: Some(
17542973849370,
),
},
Stat {
name: "readdir",
units: "usec",
samples: 12,
min: Some(
0,
),
max: Some(
4647,
),
sum: Some(
6715,
),
sumsquare: Some(
22456295,
),
},
Stat {
name: "getattr",
units: "usec",
samples: 14812440,
min: Some(
2,
),
max: Some(
320411,
),
sum: Some(
1317584841,
),
sumsquare: Some(
2110166912709,
),
},
Stat {
name: "unlink",
units: "usec",
samples: 6906208,
min: Some(
117,
),
max: Some(
749323,
),
sum: Some(
1386719680,
),
sumsquare: Some(
23443327087798,
),
},
Stat {
name: "mkdir",
units: "usec",
samples: 7906554,
min: Some(
104,
),
max: Some(
1529199,
),
sum: Some(
20996782592,
),
sumsquare: Some(
1837945636486522,
),
},
Stat {
name: "rmdir",
units: "usec",
samples: 6939862,
min: Some(
95,
),
max: Some(
646028,
),
sum: Some(
16617944601,
),
sumsquare: Some(
635123583760591,
),
},
Stat {
name: "mknod",
units: "usec",
samples: 6906208,
min: Some(
119,
),
max: Some(
775827,
),
sum: Some(
1454511094,
),
sumsquare: Some(
10119157242014,
),
},
Stat {
name: "statfs",
units: "usec",
samples: 7,
min: Some(
147,
),
max: Some(
197,
),
sum: Some(
1236,
),
sumsquare: Some(
220284,
),
},
Stat {
name: "inode_permission",
units: "usec",
samples: 251887103,
min: Some(
0,
),
max: Some(
14235,
),
sum: Some(
178199279,
),
sumsquare: Some(
1102415701,
),
},
Stat {
name: "opencount",
units: "reqs",
samples: 13812424,
min: Some(
1,
),
max: Some(
2,
),
sum: Some(
20718632,
),
sumsquare: Some(
34531048,
),
},
Stat {
name: "openclosetime",
units: "usec",
samples: 6906208,
min: Some(
2225920,
),
max: Some(
34405427,
),
sum: Some(
163169641155255,
),
sumsquare: Some(
11416538743473681487,
),
},
],
},
),
),
],
"",
)
Loading

0 comments on commit 35cbb71

Please sign in to comment.