Skip to content

Commit e1145b1

Browse files
committed
Endpoint for getting rsyncer info direct from the rsyncer
1 parent a9c44ae commit e1145b1

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
@@ -232,6 +232,26 @@ def restart_rsyncer(session_id: MurfeySessionID, rsyncer_source: RsyncerSource):
232232
return {"success": True}
233233

234234

235+
class RSyncerInfo(BaseModel):
236+
source: str
237+
num_files_transferred: int
238+
num_files_in_queue: int
239+
240+
241+
@router.get("/sessions/{session_id}/rsyncer_info")
242+
def get_rsyncer_info(session_id: MurfeySessionID) -> list[RSyncerInfo]:
243+
info = []
244+
for k, v in controllers[session_id].rsync_processes.items():
245+
info.append(
246+
RSyncerInfo(
247+
source=str(k),
248+
num_files_transferred=v._files_transferred,
249+
num_files_in_queue=v.queue.qsize(),
250+
)
251+
)
252+
return info
253+
254+
235255
class ProcessingParameters(BaseModel):
236256
gain_ref: str
237257
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
@@ -428,3 +428,29 @@ async def restart_rsyncer(
428428
) as resp:
429429
data = await resp.json()
430430
return data
431+
432+
433+
class RSyncerInfo(BaseModel):
434+
source: str
435+
num_files_transferred: int
436+
num_files_in_queue: int
437+
438+
439+
@router.get("/instruments/{instrument_name}/sessions/{session_id}/rsyncer_info")
440+
async def get_rsyncer_info(
441+
instrument_name: str, session_id: MurfeySessionID
442+
) -> List[RSyncerInfo]:
443+
data = []
444+
machine_config = get_machine_config(instrument_name=instrument_name)[
445+
instrument_name
446+
]
447+
if machine_config.instrument_server_url:
448+
async with lock:
449+
token = instrument_server_tokens[session_id]["access_token"]
450+
async with aiohttp.ClientSession() as clientsession:
451+
async with clientsession.get(
452+
f"{machine_config.instrument_server_url}/sessions/{sanitise(str(session_id))}/rsyncer_info",
453+
headers={"Authorization": f"Bearer {token}"},
454+
) as resp:
455+
data = await resp.json()
456+
return data

0 commit comments

Comments
 (0)