From b3a438e93b47f03474f3008e5901dbb1758424a3 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Fri, 9 May 2025 11:00:27 +0100 Subject: [PATCH 1/8] Check for recipes in machine configuration when deciding whether to redirect to processing parameters page --- src/routes/Session.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/Session.tsx b/src/routes/Session.tsx index 3b13c49..4e7b1b7 100644 --- a/src/routes/Session.tsx +++ b/src/routes/Session.tsx @@ -257,7 +257,9 @@ const Session = () => { setSelectedDirectory(mcfg["data_directories"][0]); } - useEffect(() => {getSessionProcessingParameterData(sessid).then((params) => {if(params === null) navigate(`/new_session/parameters/${sessid}`);})}) + const recipesDefined = machineConfig ? machineConfig.recipes ? Object.keys(machineConfig.recipes).length !== 0: false: false; + + useEffect(() => {getSessionProcessingParameterData(sessid).then((params) => {if(params === null && recipesDefined) navigate(`/new_session/parameters/${sessid}`);})}) useEffect(() => {getMachineConfigData().then((mcfg) => handleMachineConfig(mcfg))}, []); From c06716ed62cab5331af31431cf4b60670ec84e1a Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Fri, 9 May 2025 11:44:05 +0100 Subject: [PATCH 2/8] Skip processing parameters screen if no recipes are defined in machine configuration --- src/routes/MultigridSetup.tsx | 4 +++- src/routes/SessionSetup.tsx | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/MultigridSetup.tsx b/src/routes/MultigridSetup.tsx index 4ec0eff..c8063b5 100644 --- a/src/routes/MultigridSetup.tsx +++ b/src/routes/MultigridSetup.tsx @@ -49,6 +49,8 @@ const MultigridSetup = () => { const handleDirectorySelection = (e: React.ChangeEvent) => setSelectedDirectory(e.target.value); + const recipesDefined = machineConfig ? machineConfig.recipes ? Object.keys(machineConfig.recipes).length !== 0: false: false; + const handleSelection = () => { if (typeof sessid !== "undefined"){ setupMultigridWatcher( @@ -140,7 +142,7 @@ const MultigridSetup = () => { w={{ base: "100%", md: "19.6%" }} _hover={{ textDecor: "none" }} as={LinkRouter} - to={`../new_session/parameters/${sessid}`} + to={recipesDefined ? `../new_session/parameters/${sessid}`: `../sessions/${sessid}`} > { ? 3 : 0 : 3; - let navigate = useNavigate(); return (
From 17daa8183a97dc2339a4cada40c3cead3bc90249 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Fri, 9 May 2025 14:20:08 +0100 Subject: [PATCH 3/8] Start multigrid watcher from directory selection page if we are skipping the processing parameters page --- src/routes/MultigridSetup.tsx | 3 ++- src/routes/SessionSetup.tsx | 5 +---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/routes/MultigridSetup.tsx b/src/routes/MultigridSetup.tsx index c8063b5..b68e5ed 100644 --- a/src/routes/MultigridSetup.tsx +++ b/src/routes/MultigridSetup.tsx @@ -16,7 +16,7 @@ import { ArrowForwardIcon } from "@chakra-ui/icons"; import { Link as LinkRouter, useLoaderData, useParams } from "react-router-dom"; import { components } from "schema/main"; -import { setupMultigridWatcher } from "loaders/multigridSetup"; +import { setupMultigridWatcher, startMultigridWatcher } from "loaders/multigridSetup"; import { getSessionData } from "loaders/session_clients"; import { SetupStepper } from "components/setupStepper"; import React, { useEffect } from "react"; @@ -60,6 +60,7 @@ const MultigridSetup = () => { } as MultigridWatcherSpec, parseInt(sessid), ); + if(!recipesDefined) startMultigridWatcher(parseInt(sessid)); } }; diff --git a/src/routes/SessionSetup.tsx b/src/routes/SessionSetup.tsx index 4327cec..bfdb916 100644 --- a/src/routes/SessionSetup.tsx +++ b/src/routes/SessionSetup.tsx @@ -1,9 +1,6 @@ import { Button, Box, - FormControl, - FormLabel, - Input, RadioGroup, Radio, Stack, @@ -12,7 +9,7 @@ import { Heading, } from "@chakra-ui/react"; import { getForm } from "components/forms"; -import { Link as LinkRouter, useParams, useLoaderData, useNavigate } from "react-router-dom"; +import { Link as LinkRouter, useParams, useLoaderData } from "react-router-dom"; import { SetupStepper } from "components/setupStepper"; import { components } from "schema/main"; import { getProcessingParameterData } from "loaders/processingParameters"; From 817fb8816ebe7040ed394c4da7764903b482b500 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Tue, 13 May 2025 13:12:49 +0100 Subject: [PATCH 4/8] Await API calls inside an async function --- src/routes/MultigridSetup.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/MultigridSetup.tsx b/src/routes/MultigridSetup.tsx index b68e5ed..3ed8b83 100644 --- a/src/routes/MultigridSetup.tsx +++ b/src/routes/MultigridSetup.tsx @@ -51,16 +51,16 @@ const MultigridSetup = () => { const recipesDefined = machineConfig ? machineConfig.recipes ? Object.keys(machineConfig.recipes).length !== 0: false: false; - const handleSelection = () => { + const handleSelection = async () => { if (typeof sessid !== "undefined"){ - setupMultigridWatcher( + await setupMultigridWatcher( { source: selectedDirectory, skip_existing_processing: skipExistingProcessing, } as MultigridWatcherSpec, parseInt(sessid), ); - if(!recipesDefined) startMultigridWatcher(parseInt(sessid)); + if(!recipesDefined) await startMultigridWatcher(parseInt(sessid)); } }; From 1e83c1370fd9f445e422a177abc10dc05c2dc6f9 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Fri, 9 May 2025 16:56:59 +0100 Subject: [PATCH 5/8] Start multigrid watcher without processing if processing parameters skipped --- src/loaders/multigridSetup.tsx | 31 ++++++++++++++++++++++++------- src/loaders/sessionSetup.tsx | 1 - src/routes/SessionSetup.tsx | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/loaders/multigridSetup.tsx b/src/loaders/multigridSetup.tsx index c9f9a01..2d458e6 100644 --- a/src/loaders/multigridSetup.tsx +++ b/src/loaders/multigridSetup.tsx @@ -22,15 +22,32 @@ export const setupMultigridWatcher = async ( export const startMultigridWatcher = async ( sessionId: number, + process: boolean = true, ) => { - const response = await client.post( - `sessions/${sessionId}/start_multigrid_watcher`, - {}, - ); + if(process){ + const response = await client.post( + `sessions/${sessionId}/start_multigrid_watcher`, + {}, + ); - if (response.status !== 200) { - return null; + if (response.status !== 200) { + return null; + } + + return response.data; } + else{ + const response = await client.post( + `sessions/${sessionId}/start_multigrid_watcher?process=false`, + {}, + ); - return response.data; + if (response.status !== 200) { + return null; + } + + return response.data; + } + + return null; }; diff --git a/src/loaders/sessionSetup.tsx b/src/loaders/sessionSetup.tsx index d9b9647..6fc5f72 100644 --- a/src/loaders/sessionSetup.tsx +++ b/src/loaders/sessionSetup.tsx @@ -19,4 +19,3 @@ export const registerProcessingParameters = async ( return response.data; }; - diff --git a/src/routes/SessionSetup.tsx b/src/routes/SessionSetup.tsx index bfdb916..0146a06 100644 --- a/src/routes/SessionSetup.tsx +++ b/src/routes/SessionSetup.tsx @@ -141,7 +141,7 @@ const SessionSetup = () => { as={LinkRouter} to={`../sessions/${sessid}`} > - + From 12cce62514e035ffd40375f1c1205c9632995f39 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Mon, 12 May 2025 10:02:13 +0100 Subject: [PATCH 6/8] When skipping processing, update the session to reflect that no processing should happen and let the Murfey server deal with the rest --- src/loaders/multigridSetup.tsx | 34 +++++++++------------------------ src/loaders/session_clients.tsx | 11 +++++++++++ src/routes/SessionSetup.tsx | 11 +++++++++-- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/loaders/multigridSetup.tsx b/src/loaders/multigridSetup.tsx index 2d458e6..5526c2b 100644 --- a/src/loaders/multigridSetup.tsx +++ b/src/loaders/multigridSetup.tsx @@ -22,32 +22,16 @@ export const setupMultigridWatcher = async ( export const startMultigridWatcher = async ( sessionId: number, - process: boolean = true, ) => { - if(process){ - const response = await client.post( - `sessions/${sessionId}/start_multigrid_watcher`, - {}, - ); - - if (response.status !== 200) { - return null; - } - - return response.data; - } - else{ - const response = await client.post( - `sessions/${sessionId}/start_multigrid_watcher?process=false`, - {}, - ); - - if (response.status !== 200) { - return null; - } - - return response.data; + const response = await client.post( + `sessions/${sessionId}/start_multigrid_watcher`, + {}, + ); + + if (response.status !== 200) { + return null; } - return null; + return response.data; + }; diff --git a/src/loaders/session_clients.tsx b/src/loaders/session_clients.tsx index 2f1de98..cde0dab 100644 --- a/src/loaders/session_clients.tsx +++ b/src/loaders/session_clients.tsx @@ -72,6 +72,17 @@ export const createSession = async (visit: string, sessionName: string, instrume return response.data; }; +export const updateSession = async (sessionID: number, process: boolean = true) => { + const response = await client.post( + `sessions/${sessionID}?process=${process ? 'true': 'false'}`, + {}, + ); + if (response.status !== 200) { + return null; + } + return response.data; +} + export const deleteSessionData = async (sessid: number) => { const response = await client.delete(`sessions/${sessid}`); if (response.status !== 200) { diff --git a/src/routes/SessionSetup.tsx b/src/routes/SessionSetup.tsx index 0146a06..649b95b 100644 --- a/src/routes/SessionSetup.tsx +++ b/src/routes/SessionSetup.tsx @@ -14,7 +14,7 @@ import { SetupStepper } from "components/setupStepper"; import { components } from "schema/main"; import { getProcessingParameterData } from "loaders/processingParameters"; import { startMultigridWatcher } from "loaders/multigridSetup"; -import { getSessionData } from "loaders/session_clients"; +import { getSessionData, updateSession } from "loaders/session_clients"; import { registerProcessingParameters } from "loaders/sessionSetup"; import React, { useEffect } from "react"; @@ -49,6 +49,13 @@ const SessionSetup = () => { } }; + const handleSkip = () => { + if (sessid !== undefined){ + updateSession(parseInt(sessid), false); + startMultigridWatcher(parseInt(sessid)); + } + } + if (session) getProcessingParameterData(session.session.id.toString()).then((params) => setProcParams(params), @@ -141,7 +148,7 @@ const SessionSetup = () => { as={LinkRouter} to={`../sessions/${sessid}`} > - + From cbf7993dabb7086fbdd1ceb86b8743b20d0550d4 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Tue, 13 May 2025 13:56:36 +0100 Subject: [PATCH 7/8] Do not redirect if processing disabled --- src/routes/Session.tsx | 12 ++++++------ src/routes/SessionSetup.tsx | 2 +- src/schema/main.ts | 5 +++++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/routes/Session.tsx b/src/routes/Session.tsx index 4e7b1b7..1bcd75f 100644 --- a/src/routes/Session.tsx +++ b/src/routes/Session.tsx @@ -257,17 +257,17 @@ const Session = () => { setSelectedDirectory(mcfg["data_directories"][0]); } - const recipesDefined = machineConfig ? machineConfig.recipes ? Object.keys(machineConfig.recipes).length !== 0: false: false; - - useEffect(() => {getSessionProcessingParameterData(sessid).then((params) => {if(params === null && recipesDefined) navigate(`/new_session/parameters/${sessid}`);})}) - - useEffect(() => {getMachineConfigData().then((mcfg) => handleMachineConfig(mcfg))}, []); - useEffect(() => { getSessionData(sessid).then((sess) => setSession(sess.session)); setUUID(uuid4()); }, []); + const recipesDefined = machineConfig ? machineConfig.recipes ? Object.keys(machineConfig.recipes).length !== 0: false: false; + + useEffect(() => {getSessionProcessingParameterData(sessid).then((params) => {if(params === null && recipesDefined && session !== undefined && session.process) navigate(`/new_session/parameters/${sessid}`);})}) + + useEffect(() => {getMachineConfigData().then((mcfg) => handleMachineConfig(mcfg))}, []); + const parseWebsocketMessage = (message: any) => { let parsedMessage: any = {}; try { diff --git a/src/routes/SessionSetup.tsx b/src/routes/SessionSetup.tsx index 649b95b..38a62ef 100644 --- a/src/routes/SessionSetup.tsx +++ b/src/routes/SessionSetup.tsx @@ -148,7 +148,7 @@ const SessionSetup = () => { as={LinkRouter} to={`../sessions/${sessid}`} > - + diff --git a/src/schema/main.ts b/src/schema/main.ts index 9a9eb50..9cad56c 100644 --- a/src/schema/main.ts +++ b/src/schema/main.ts @@ -1833,6 +1833,11 @@ export interface components { * @default */ instrument_name?: string; + /** + * Process + * @default + */ + process?: boolean; }; /** SessionClients */ SessionClients: { From 54d2ff61d0f3138ce222bb6fcd6881a4f1acc366 Mon Sep 17 00:00:00 2001 From: Eu Pin Tien Date: Wed, 14 May 2025 09:34:20 +0100 Subject: [PATCH 8/8] 'handleSkip' function needs to wait for the Session database entry to be updated --- src/routes/SessionSetup.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/SessionSetup.tsx b/src/routes/SessionSetup.tsx index 38a62ef..917e75f 100644 --- a/src/routes/SessionSetup.tsx +++ b/src/routes/SessionSetup.tsx @@ -49,9 +49,9 @@ const SessionSetup = () => { } }; - const handleSkip = () => { + const handleSkip = async () => { if (sessid !== undefined){ - updateSession(parseInt(sessid), false); + await updateSession(parseInt(sessid), false); startMultigridWatcher(parseInt(sessid)); } }