Skip to content

Commit bc44840

Browse files
committed
Endpoint for getting rsyncer info direct from the rsyncer
1 parent 9df4d4e commit bc44840

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/murfey/instrument_server/api.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,26 @@ def restart_rsyncer(session_id: MurfeySessionID, rsyncer_source: RsyncerSource):
219219
return {"success": True}
220220

221221

222+
class RSyncerInfo(BaseModel):
223+
source: str
224+
num_files_transferred: int
225+
num_files_in_queue: int
226+
227+
228+
@router.get("/sessions/{session_id}/rsyncer_info")
229+
def get_rsyncer_info(session_id: MurfeySessionID) -> list[RSyncerInfo]:
230+
info = []
231+
for k, v in controllers[session_id].rsync_processes.items():
232+
info.append(
233+
RSyncerInfo(
234+
source=str(k),
235+
num_files_transferred=v._files_transferred,
236+
num_files_in_queue=v.queue.qsize(),
237+
)
238+
)
239+
return info
240+
241+
222242
class ProcessingParameters(BaseModel):
223243
gain_ref: str
224244
dose_per_frame: Optional[float] = None

src/murfey/server/api/instrument.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,3 +407,29 @@ async def restart_rsyncer(
407407
) as resp:
408408
data = await resp.json()
409409
return data
410+
411+
412+
class RSyncerInfo(BaseModel):
413+
source: str
414+
num_files_transferred: int
415+
num_files_in_queue: int
416+
417+
418+
@router.get("/instruments/{instrument_name}/sessions/{session_id}/rsyncer_info")
419+
async def get_rsyncer_info(
420+
instrument_name: str, session_id: MurfeySessionID
421+
) -> List[RSyncerInfo]:
422+
data = []
423+
machine_config = get_machine_config(instrument_name=instrument_name)[
424+
instrument_name
425+
]
426+
if machine_config.instrument_server_url:
427+
async with lock:
428+
token = instrument_server_tokens[session_id]["access_token"]
429+
async with aiohttp.ClientSession() as clientsession:
430+
async with clientsession.get(
431+
f"{machine_config.instrument_server_url}/sessions/{sanitise(str(session_id))}/rsyncer_info",
432+
headers={"Authorization": f"Bearer {token}"},
433+
) as resp:
434+
data = await resp.json()
435+
return data

0 commit comments

Comments
 (0)