Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion bundler/src/permissionables/sessions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ impl Sessions {
sessionId as session_id,
proposalNumber as proposal_number,
visit_number,
beamLineName as beamline
beamLineName as beamline,
UNIX_TIMESTAMP(BLSession.startDate) as start_time,
UNIX_TIMESTAMP(BLSession.endDate) as end_time
FROM
BLSession
JOIN Proposal USING (proposalId)
Expand All @@ -42,6 +44,10 @@ pub struct Session {
visit_number: u32,
/// The beamline the session took place on
beamline: String,
/// The session start time expressed as a Unix timestamp in seconds.
start_time: i64,
/// The session end time expressed as a Unix timestamp in seconds.
end_time: i64,
}

/// A row from ISPyB detailing the beamline a session took place on
Expand All @@ -54,6 +60,10 @@ struct SessionRow {
visit_number: u32,
/// The beamline the session took place on
beamline: String,
/// The session start time expressed as a Unix timestamp in seconds.
start_time: i64,
/// The session end time expressed as a Unix timestamp in seconds.
end_time: i64,
}

#[allow(clippy::missing_docs_in_private_items)]
Expand All @@ -62,6 +72,8 @@ struct RawSessionRow {
proposal_number: Option<String>,
visit_number: Option<u32>,
beamline: Option<String>,
start_time: Option<i64>,
end_time: Option<i64>,
}

impl TryFrom<RawSessionRow> for SessionRow {
Expand All @@ -76,6 +88,8 @@ impl TryFrom<RawSessionRow> for SessionRow {
.parse()?,
visit_number: value.visit_number.unwrap_or_default(),
beamline: value.beamline.ok_or(anyhow::anyhow!("Beamline was NULL"))?,
start_time: value.start_time.unwrap_or_default(),
end_time: value.end_time.unwrap_or_default(),
})
}
}
Expand All @@ -91,6 +105,8 @@ impl FromIterator<RawSessionRow> for Sessions {
proposal_number: session_row.proposal_number,
visit_number: session_row.visit_number,
beamline: session_row.beamline,
start_time: session_row.start_time,
end_time: session_row.end_time,
},
);
}
Expand Down Expand Up @@ -128,6 +144,8 @@ mod tests {
proposal_number: 10030,
visit_number: 10,
beamline: "i12".to_string(),
start_time: 1778662800,
end_time: 1778691600,
},
);
expected.insert(
Expand All @@ -136,6 +154,8 @@ mod tests {
proposal_number: 10030,
visit_number: 11,
beamline: "i22".to_string(),
start_time: 1778576400,
end_time: 1778605200,
},
);
expected.insert(
Expand All @@ -144,6 +164,8 @@ mod tests {
proposal_number: 10030,
visit_number: 12,
beamline: "b13".to_string(),
start_time: 1778490000,
end_time: 1778518800,
},
);
expected.insert(
Expand All @@ -152,6 +174,8 @@ mod tests {
proposal_number: 10031,
visit_number: 10,
beamline: "p99".to_string(),
start_time: 1778403600,
end_time: 1778432400,
},
);
expected.insert(
Expand All @@ -160,6 +184,8 @@ mod tests {
proposal_number: 10031,
visit_number: 11,
beamline: "i22".to_string(),
start_time: 1778317200,
end_time: 1778346000,
},
);
assert_eq!(expected, sessions.0);
Expand Down
6 changes: 4 additions & 2 deletions bundler/tests/fixtures/beamline_sessions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ INSERT INTO
`sessionId`,
`proposalId`,
`visit_number`,
`beamLineName`
`beamLineName`,
`startDate`,
`endDate`
)
VALUES (40, 30, 10, "i12"), (41, 30, 11, "i22"), (42, 30, 12, "b13"), (43, 31, 10, "p99"), (44, 31, 11, "i22");
VALUES (40, 30, 10, "i12",'2026-05-13 09:00:00', '2026-05-13 17:00:00') , (41, 30, 11, "i22",'2026-05-12 09:00:00', '2026-05-12 17:00:00'), (42, 30, 12, "b13",'2026-05-11 09:00:00', '2026-05-11 17:00:00'), (43, 31, 10, "p99",'2026-05-10 09:00:00', '2026-05-10 17:00:00'), (44, 31, 11, "i22",'2026-05-9 09:00:00', '2026-05-9 17:00:00');
Loading