mirror of
https://gitlab.cern.ch/wotsubo/psboard-qaqc-postprocess.git
synced 2025-07-02 01:29:28 +09:00
update: log format
This commit is contained in:
parent
eff62d7f09
commit
62a5393cf5
6 changed files with 126 additions and 116 deletions
53
src/main.rs
53
src/main.rs
|
@ -120,8 +120,8 @@ impl FromStr for PsbId {
|
|||
type Err = anyhow::Error;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
if !s.starts_with("PB") {
|
||||
return Err(anyhow!("Must prefixed with PB: {}", s));
|
||||
if !s.starts_with("PS") {
|
||||
return Err(anyhow!("Must prefixed with PS: got: {}", s));
|
||||
}
|
||||
let num = s[2..].parse()?;
|
||||
// TODO: add validation
|
||||
|
@ -137,13 +137,13 @@ impl FromStr for PsbId {
|
|||
#[derive(Debug)]
|
||||
struct MasterBoardResult {
|
||||
id: PsbId,
|
||||
qspif: u8,
|
||||
qspip: u8,
|
||||
recov: u8,
|
||||
power: u8,
|
||||
clock: u8,
|
||||
regac: u8,
|
||||
asdtp: u8,
|
||||
done: u8,
|
||||
reset: u16,
|
||||
result: u8,
|
||||
}
|
||||
|
||||
/// Full result for a single QAQC run from a log file on JATHub master.
|
||||
|
@ -244,6 +244,7 @@ impl MasterLogResult {
|
|||
trace!("Read all PBS assignments");
|
||||
info!("{:?}", assignments);
|
||||
|
||||
// TODO: stricter validation for header?
|
||||
if !lines
|
||||
.next()
|
||||
.context("Invalid log format")??
|
||||
|
@ -315,34 +316,34 @@ impl MasterLogResult {
|
|||
|
||||
let result = MasterBoardResult {
|
||||
id: psbid,
|
||||
qspif: parts
|
||||
.get(1)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid qspif")??,
|
||||
qspip: parts
|
||||
.get(2)
|
||||
.get(1)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid qspip")??,
|
||||
recov: parts
|
||||
.get(3)
|
||||
.get(2)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid recov")??,
|
||||
power: parts
|
||||
.get(3)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid power")??,
|
||||
clock: parts
|
||||
.get(4)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid clock")??,
|
||||
regac: parts
|
||||
asdtp: parts
|
||||
.get(5)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid regac")??,
|
||||
asdtp: parts
|
||||
.context("Invalid asdtp")??,
|
||||
reset: parts
|
||||
.get(6)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid asdtp")??,
|
||||
done: parts
|
||||
.context("Invalid reset")??,
|
||||
result: parts
|
||||
.get(7)
|
||||
.map(|v| v.split_whitespace().next().unwrap().parse())
|
||||
.context("Invalid done")??,
|
||||
.context("Invalid result")??,
|
||||
};
|
||||
|
||||
match board_results.insert(pos, result) {
|
||||
|
@ -378,12 +379,12 @@ pub struct PsbQaqcResult {
|
|||
daughterboard_id: Option<u32>,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
position: Position,
|
||||
qspif: u8,
|
||||
qspip: u8,
|
||||
recov: u8,
|
||||
power: u8,
|
||||
clock: u8,
|
||||
regac: u8,
|
||||
asdtp: u8,
|
||||
reset: u16,
|
||||
qaqc_result: u32,
|
||||
lvds_tx_skew: Option<u32>,
|
||||
ppl_lock_reset_count: Option<i32>,
|
||||
|
@ -397,7 +398,7 @@ pub struct PsbQaqcResult {
|
|||
|
||||
impl PsbQaqcResult {
|
||||
/// Expand [`MasterLogResult`] to [`PsbQaqcResult`].
|
||||
/// Filling unavailable fileds with [`None`]s.
|
||||
/// Filling unavailable fields with [`None`]s.
|
||||
pub fn from_masterlogresult(result: MasterLogResult) -> Vec<Self> {
|
||||
let mut converted = vec![];
|
||||
for (pos, boardresult) in result.board_results {
|
||||
|
@ -405,13 +406,13 @@ impl PsbQaqcResult {
|
|||
motherboard_id: boardresult.id.id,
|
||||
daughterboard_id: None,
|
||||
position: pos,
|
||||
qspif: boardresult.qspif,
|
||||
qspip: boardresult.qspip,
|
||||
recov: boardresult.recov,
|
||||
power: boardresult.power,
|
||||
clock: boardresult.clock,
|
||||
regac: boardresult.regac,
|
||||
asdtp: boardresult.asdtp,
|
||||
qaqc_result: boardresult.done.into(),
|
||||
reset: boardresult.reset,
|
||||
qaqc_result: boardresult.result.into(),
|
||||
lvds_tx_skew: None,
|
||||
ppl_lock_reset_count: None,
|
||||
timestamp: result.datetime,
|
||||
|
@ -557,7 +558,7 @@ mod test {
|
|||
#[test]
|
||||
fn parse_pos_id_line() {
|
||||
assert_eq!(
|
||||
extract_position_id("Position / assigned-ID : A-0-0 / PB0004").unwrap(),
|
||||
extract_position_id("Position / assigned-ID : A-0-0 / PS0004").unwrap(),
|
||||
(
|
||||
Position {
|
||||
major: PositionLayer::A,
|
||||
|
@ -568,7 +569,7 @@ mod test {
|
|||
)
|
||||
);
|
||||
assert_eq!(
|
||||
extract_position_id("Position / assigned-ID : A-1-7 / PB0108").unwrap(),
|
||||
extract_position_id("Position / assigned-ID : A-1-7 / PS0108").unwrap(),
|
||||
(
|
||||
Position {
|
||||
major: PositionLayer::A,
|
||||
|
@ -579,7 +580,7 @@ mod test {
|
|||
)
|
||||
);
|
||||
assert_ne!(
|
||||
extract_position_id("Position / assigned-ID : A-1-7 / PB0108").unwrap(),
|
||||
extract_position_id("Position / assigned-ID : A-1-7 / PS0108").unwrap(),
|
||||
(
|
||||
Position {
|
||||
major: PositionLayer::A,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue