Skip to content

Commit 852c694

Browse files
authored
Upload parent appid to ispyb (#351)
Optionally use scaling_id to get parent app_id and upload it into AutoProcProgram table when registering processing.
1 parent b9a581b commit 852c694

3 files changed

Lines changed: 42 additions & 16 deletions

File tree

requirements.conda.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
drmaa
22
hdf5plugin
3-
ispyb>=11.1.0
3+
ispyb>=11.1.2
44
junit-xml>=1.9
55
marshmallow-sqlalchemy
66
minio>=7.1.0

src/dlstbx/crud.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,22 @@ def get_ssx_events_for_dcid(
368368
return query.all()
369369

370370

371+
def get_app_id_for_scaling_id(
372+
session: sqlalchemy.orm.session.Session,
373+
scaling_id: int,
374+
) -> int:
375+
query = (
376+
session.query(models.AutoProc.autoProcProgramId)
377+
.join(
378+
models.AutoProcScaling,
379+
models.AutoProcScaling.autoProcId == models.AutoProc.autoProcId,
380+
)
381+
.filter(models.AutoProcScaling.autoProcScalingId == scaling_id)
382+
)
383+
result = query.first()
384+
return result.autoProcProgramId
385+
386+
371387
def insert_xray_centring(
372388
xrc: schemas.XrayCentring,
373389
session: sqlalchemy.orm.session.Session,

src/dlstbx/services/ispybsvc.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os.path
55
import pathlib
66
import time
7+
from datetime import datetime
78
from typing import List
89

910
import ispyb.sqlalchemy
@@ -323,11 +324,21 @@ def do_store_dimple_failure(self, parameters, **kwargs):
323324
)
324325
return False
325326

326-
def do_register_processing(self, parameters, **kwargs):
327+
def do_register_processing(
328+
self, parameters, session: sqlalchemy.orm.Session, **kwargs
329+
):
327330
program = parameters("program")
328331
cmdline = parameters("cmdline")
329-
environment = parameters("environment") or ""
332+
environment = parameters("environment") or {}
330333
upstream_source = parameters("upstream_source") or ""
334+
scaling_id = parameters("scaling_id") or environment.get("scaling_id")
335+
if isinstance(scaling_id, list):
336+
scaling_id = scaling_id[0]
337+
parent_appid = (
338+
crud.get_app_id_for_scaling_id(session, int(scaling_id))
339+
if scaling_id
340+
else None
341+
)
331342
processingpipelineid = self.get_pipeline_id(program, upstream_source)
332343
if isinstance(environment, dict):
333344
environment = ", ".join(
@@ -339,21 +350,20 @@ def do_register_processing(self, parameters, **kwargs):
339350
self.log.error("Invalid processing id '%s'", rpid)
340351
return False
341352
try:
342-
result = self.ispyb.mx_processing.upsert_program_ex(
343-
job_id=rpid,
344-
name=program,
345-
command=cmdline,
346-
environment=environment,
347-
pipeline_id=processingpipelineid,
353+
new_app = ispyb.sqlalchemy.AutoProcProgram(
354+
processingJobId=rpid,
355+
processingPrograms=program,
356+
processingCommandLine=cmdline,
357+
processingEnvironment=environment,
358+
processingPipelineId=processingpipelineid,
359+
parentAutoProcProgramId=parent_appid,
360+
recordTimeStamp=datetime.now(),
348361
)
362+
session.add(new_app)
363+
session.commit()
364+
result = new_app.autoProcProgramId
349365
self.log.info(
350-
"Registered new program '%s' for processing id '%s' with command line '%s' and environment '%s' and pipeline id '%s' with result '%s'.",
351-
program,
352-
rpid,
353-
cmdline,
354-
environment,
355-
processingpipelineid,
356-
result,
366+
f"Registered new program '{program}' for processing id '{rpid}' with command line '{cmdline}' and environment '{environment}', pipeline id '{processingpipelineid}' and parent program id '{parent_appid}' with result '{result}'.",
357367
)
358368
return {"success": True, "return_value": result}
359369
except ispyb.ISPyBException as e:

0 commit comments

Comments
 (0)