From 01d38689a1f8f0ae93f3b6572dbf57fbf05fe86b Mon Sep 17 00:00:00 2001 From: Peter Holloway Date: Wed, 12 Feb 2025 14:21:58 +0000 Subject: [PATCH] Add time based placeholders for scan/visit templates {ts_hms} for HourMinuteSecond, eg 142117 {ts_ymd} for YearMonthDay, eg 20250221 --- src/graphql.rs | 6 +++++- src/paths.rs | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/graphql.rs b/src/graphql.rs index 826c6f4..babf300 100644 --- a/src/graphql.rs +++ b/src/graphql.rs @@ -37,7 +37,7 @@ use axum::{Extension, Json, Router}; use axum_extra::headers::authorization::Bearer; use axum_extra::headers::Authorization; use axum_extra::TypedHeader; -use chrono::{Datelike, Local}; +use chrono::{DateTime, Datelike, Local}; use tokio::net::TcpListener; use tracing::{info, instrument, trace, warn}; @@ -147,6 +147,7 @@ struct VisitPath { struct ScanPaths { visit: VisitPath, subdirectory: Subdirectory, + timestamp: DateTime, } /// GraphQL type to provide current configuration for a beamline @@ -301,6 +302,8 @@ impl FieldSource for ScanPaths { ScanField::Subdirectory => self.subdirectory.to_string().into(), ScanField::ScanNumber => self.visit.info.scan_number().to_string().into(), ScanField::Beamline(bl) => self.visit.resolve(bl), + ScanField::YearMonthDay => self.timestamp.format("%Y%m%d").to_string().into(), + ScanField::HourMinuteSecond => self.timestamp.format("%H%M%S").to_string().into(), } } } @@ -427,6 +430,7 @@ impl Mutation { visit, info: next_scan, }, + timestamp: Local::now(), subdirectory: sub.unwrap_or_default(), }) } diff --git a/src/paths.rs b/src/paths.rs index d775a7e..b0c7a2e 100644 --- a/src/paths.rs +++ b/src/paths.rs @@ -31,6 +31,8 @@ pub enum BeamlineField { pub enum ScanField { Subdirectory, ScanNumber, + YearMonthDay, + HourMinuteSecond, Beamline(BeamlineField), } @@ -57,6 +59,8 @@ impl Display for ScanField { ScanField::Subdirectory => f.write_str("subdirectory"), ScanField::ScanNumber => f.write_str("scan_number"), ScanField::Beamline(bl) => write!(f, "{bl}"), + ScanField::YearMonthDay => f.write_str("ts_ymd"), + ScanField::HourMinuteSecond => f.write_str("ts_hms"), } } } @@ -100,6 +104,8 @@ impl TryFrom for ScanField { match value.as_str() { "scan_number" => Ok(ScanField::ScanNumber), "subdirectory" => Ok(ScanField::Subdirectory), + "ts_hms" => Ok(ScanField::HourMinuteSecond), + "ts_ymd" => Ok(ScanField::YearMonthDay), _ => Ok(ScanField::Beamline(BeamlineField::try_from(value)?)), } }