This repository has been archived by the owner on May 21, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
591 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
236
src/llite/snapshots/lustre_collector__llite__tests__parse.snap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | ||
), | ||
}, | ||
], | ||
}, | ||
), | ||
), | ||
], | ||
"", | ||
) |
Oops, something went wrong.