Try on DesignSafe

Step 2: Inspect Job#

A Deep Dive into a Specific Job

by Silvia Mazzoni, DesignSafe, 2025

Using local utilities library
t=OpsUtils.connect_tapis()
 -- Checking Tapis token --
 Token loaded from file. Token is still valid!
 Token expires at: 2025-08-20T22:46:16+00:00
 Token expires in: 1:56:42.210230
-- LOG IN SUCCESSFUL! --

Set Job ID#

Use the id of a completed job you have already run. You cannot use the id of another user’s job.

jobUuid = '4dfa35e1-15cd-48fd-a090-f348544dee1f-007'

______________________________________________________________________________#

Once you’ve identified a job of interest from your list, the next step is to drill down into its details. Tapis provides several functions for this, depending on how much information you need:

  • getJob(job_id) — returns the full configuration and metadata.

  • getJobStatus(job_id) — retrieves only the current status (lightweight polling).

  • getJobHistory(job_id) — shows a timestamped lifecycle of state changes.

These functions allow you to trace how a job was submitted, how it ran, and how it ended, making them essential for debugging, auditing, and performance tuning.

getJob(job_id)#

Purpose:#

Retrieve all available metadata and configuration for a specific job.

Example:#

job = t.jobs.getJob(jobUuid=jobUuid)
print(job)
_fileInputsSpec: None
_parameterSetModel: None
appId: opensees-mp-s3
appVersion: latest
archiveCorrelationId: 2f7852d4-9c67-470d-aef0-64d1341f1f5f
archiveOnAppError: True
archiveSystemDir: /silvia/tapis-jobs-archive/2025-05-07Z/opensees-mp-s3-latest_2025-05-07T22:13:08-4dfa35e1-15cd-48fd-a090-f348544dee1f-007
archiveSystemId: designsafe.storage.default
archiveTransactionId: ad89111a-222a-4e71-9fd2-4691f15cafed
blockedCount: 0
cmdPrefix: None
condition: NORMAL_COMPLETION
coresPerNode: 48
created: 2025-05-07T22:15:14.785522Z
createdby: silvia
createdbyTenant: designsafe
description: opensees-mp-s3-latest submitted by silvia@designsafe
dtnInputCorrelationId: None
dtnInputTransactionId: None
dtnOutputCorrelationId: None
dtnOutputTransactionId: None
dtnSystemId: None
dtnSystemInputDir: None
dtnSystemOutputDir: None
dynamicExecSystem: False
ended: 2025-05-07T22:20:52.718025Z
execSystemConstraints: None
execSystemExecDir: /scratch/05072/silvia/tapis/4dfa35e1-15cd-48fd-a090-f348544dee1f-007
execSystemId: stampede3
execSystemInputDir: /scratch/05072/silvia/tapis/4dfa35e1-15cd-48fd-a090-f348544dee1f-007
execSystemLogicalQueue: skx-dev
execSystemOutputDir: /scratch/05072/silvia/tapis/4dfa35e1-15cd-48fd-a090-f348544dee1f-007
fileInputs: [{"name": "Input Directory", "notes": "{\"selectionMode\":\"directory\"}", "envKey": "inputDirectory", "optional": false, "sourceUrl": "tapis://designsafe.storage.default/silvia/OpenSees/repos/training-OpenSees-on-DesignSafe/_static/OpenSeesScripts", "targetPath": "inputDirectory", "description": "Input directory that includes the tcl script as well as any other required files. Example input is in tapis://designsafe.storage.community/app_examples/opensees/OpenSeesMP", "autoMountLocal": true, "srcSharedAppCtx": "", "destSharedAppCtx": "wma_prtl"}]
id: 42126
inputCorrelationId: 6a36ee1d-2b05-4380-a221-e27dd8bd66b0
inputTransactionId: 2510a293-a91d-481c-baf3-4f89a9ed998a
isMpi: False
jobType: BATCH
lastMessage: Setting job status to FINISHED.
lastUpdated: 2025-05-07T22:20:52.718025Z
maxMinutes: 100
memoryMB: 192000
mpiCmd: None
name: opensees-mp-s3-latest_2025-05-07T22:13:08
nodeCount: 2
notes: {"icon": "OpenSees", "label": "OpenSeesMP", "helpUrl": "https://www.designsafe-ci.org/user-guide/tools/simulation/#opensees-user-guide", "category": "Simulation", "isInteractive": false, "hideNodeCountAndCoresPerNode": false}
owner: silvia
parameterSet: {"appArgs": [{"arg": "OpenSeesMP", "name": "mainProgram", "notes": "{\"isHidden\":true}", "include": null, "description": null}, {"arg": "Ex1many_end.tcl.Canti2D.Push.mp.tcl", "name": "Main Script", "notes": "{\"inputType\":\"fileInput\"}", "include": null, "description": "The filename only of the OpenSees TCL script to execute. This file should reside in the Input Directory specified. To use with test input, use 'freeFieldEffective.tcl'"}], "logConfig": {"stderrFilename": "tapisjob.out", "stdoutFilename": "tapisjob.out"}, "envVariables": [{"key": "_tapisAppId", "notes": null, "value": "opensees-mp-s3", "include": null, "description": null}, {"key": "_tapisAppVersion", "notes": null, "value": "latest", "include": null, "description": null}, {"key": "_tapisArchiveOnAppError", "notes": null, "value": "true", "include": null, "description": null}, {"key": "_tapisArchiveSystemDir", "notes": null, "value": "/silvia/tapis-jobs-archive/2025-05-07Z/opensees-mp-s3-latest_2025-05-07T22:13:08-4dfa35e1-15cd-48fd-a090-f348544dee1f-007", "include": null, "description": null}, {"key": "_tapisArchiveSystemId", "notes": null, "value": "designsafe.storage.default", "include": null, "description": null}, {"key": "_tapisCoresPerNode", "notes": null, "value": "48", "include": null, "description": null}, {"key": "_tapisDynamicExecSystem", "notes": null, "value": "false", "include": null, "description": null}, {"key": "_tapisEffectiveUserId", "notes": null, "value": "silvia", "include": null, "description": null}, {"key": "_tapisExecSystemExecDir", "notes": null, "value": "/scratch/05072/silvia/tapis/4dfa35e1-15cd-48fd-a090-f348544dee1f-007", "include": null, "description": null}, {"key": "_tapisExecSystemHPCQueue", "notes": null, "value": "skx-dev", "include": null, "description": null}, {"key": "_tapisExecSystemId", "notes": null, "value": "stampede3", "include": null, "description": null}, {"key": "_tapisExecSystemInputDir", "notes": null, "value": "/scratch/05072/silvia/tapis/4dfa35e1-15cd-48fd-a090-f348544dee1f-007", "include": null, "description": null}, {"key": "_tapisExecSystemLogicalQueue", "notes": null, "value": "skx-dev", "include": null, "description": null}, {"key": "_tapisExecSystemOutputDir", "notes": null, "value": "/scratch/05072/silvia/tapis/4dfa35e1-15cd-48fd-a090-f348544dee1f-007", "include": null, "description": null}, {"key": "_tapisJobCreateDate", "notes": null, "value": "2025-05-07Z", "include": null, "description": null}, {"key": "_tapisJobCreateTime", "notes": null, "value": "22:15:14.785522177Z", "include": null, "description": null}, {"key": "_tapisJobCreateTimestamp", "notes": null, "value": "2025-05-07T22:15:14.785522177Z", "include": null, "description": null}, {"key": "_tapisJobName", "notes": null, "value": "opensees-mp-s3-latest_2025-05-07T22:13:08", "include": null, "description": null}, {"key": "_tapisJobOwner", "notes": null, "value": "silvia", "include": null, "description": null}, {"key": "_tapisJobUUID", "notes": null, "value": "4dfa35e1-15cd-48fd-a090-f348544dee1f-007", "include": null, "description": null}, {"key": "_tapisJobWorkingDir", "notes": null, "value": "/scratch/05072/silvia/tapis/4dfa35e1-15cd-48fd-a090-f348544dee1f-007", "include": null, "description": null}, {"key": "_tapisMaxMinutes", "notes": null, "value": "100", "include": null, "description": null}, {"key": "_tapisMemoryMB", "notes": null, "value": "192000", "include": null, "description": null}, {"key": "_tapisNodes", "notes": null, "value": "2", "include": null, "description": null}, {"key": "_tapisStderrFilename", "notes": null, "value": "tapisjob.out", "include": null, "description": null}, {"key": "_tapisStdoutFilename", "notes": null, "value": "tapisjob.out", "include": null, "description": null}, {"key": "_tapisSysBatchScheduler", "notes": null, "value": "SLURM", "include": null, "description": null}, {"key": "_tapisSysHost", "notes": null, "value": "stampede3.tacc.utexas.edu", "include": null, "description": null}, {"key": "_tapisSysRootDir", "notes": null, "value": "/", "include": null, "description": null}, {"key": "_tapisTenant", "notes": null, "value": "designsafe", "include": null, "description": null}, {"key": "inputDirectory", "notes": "{}", "value": "inputDirectory", "include": true, "description": "EnvKey from input file: Input Directory"}], "archiveFilter": {"excludes": [], "includes": [], "includeLaunchFiles": true}, "containerArgs": [], "schedulerOptions": [{"arg": "--tapis-profile OpenSees_default", "name": "OpenSees TACC Scheduler Profile", "notes": "{\"isHidden\":true}", "include": null, "description": "Scheduler profile for the default version of OpenSees"}, {"arg": "-A DS-HPC1", "name": "TACC Allocation", "notes": null, "include": null, "description": "The TACC allocation associated with this job execution"}]}
remoteChecksFailed: 0
remoteChecksSuccess: 4
remoteEnded: 2025-05-07T22:17:17.601968Z
remoteJobId: 1874224
remoteJobId2: None
remoteLastStatusCheck: 2025-05-07T22:17:17.595078Z
remoteOutcome: FINISHED
remoteQueue: None
remoteResultInfo: 0:0
remoteStarted: 2025-05-07T22:16:51.791782Z
remoteSubmitRetries: 0
remoteSubmitted: 2025-05-07T22:16:49.606851Z
sharedAppCtx: wma_prtl
sharedAppCtxAttribs: ['SAC_EXEC_SYSTEM_ID', 'SAC_EXEC_SYSTEM_INPUT_DIR', 'SAC_EXEC_SYSTEM_EXEC_DIR', 'SAC_EXEC_SYSTEM_OUTPUT_DIR']
stageAppCorrelationId: b616a64e-a8f6-4a65-9ed0-cb3e29a58869
stageAppTransactionId: 0e2ea3d8-1093-42f0-b8d9-7a3c9d185b33
status: FINISHED
subscriptions: [{"enabled": true, "ttlMinutes": 10080, "description": "Portal job status notification", "deliveryTargets": [{"deliveryMethod": "WEBHOOK", "deliveryAddress": "https://www.designsafe-ci.org/webhooks/jobs/"}], "eventCategoryFilter": "JOB_NEW_STATUS"}]
tags: ['portalName: DESIGNSAFE']
tapisQueue: tapis.jobq.submit.DefaultQueue
tenant: designsafe
trackingId: portals.tjpzgzipxddro0y9h1f8iqna904lyphy
uuid: 4dfa35e1-15cd-48fd-a090-f348544dee1f-007
visible: True

Returns full configuration, including:

  • Job metadata

  • App parameters

  • Execution system

  • Archive system

  • Resource usage (nodes, memory, cores)

⚠️ Note: Not every job will include every field — for example, startTime, endTime, or childJobs might be null if the job hasn’t started or isn’t part of a workflow.

Common Queryable Fields#

These fields can be accessed from job objects returned by listJobs():

Field

Description

id

Unique job ID

owner

Username of the job submitter

tenant

Tapis tenant the job belongs to

appId

ID of the application the job is based on

status

Current job status (e.g., PENDING, RUNNING, FINISHED, FAILED)

created

Timestamp when job was created

lastUpdated

Timestamp when job was last modified

archiveSystemId

ID of the system where job output is archived

archivePath

Path to archived output

execSystemId

Execution system used to run the job

ownerString

Same as owner, often used in filters

parameterSet

Parameters passed to the job

uuid

Universally unique identifier

parentUuid

UUID of a parent job (for child/sub-jobs)

tags

List of user-defined tags on the job

Job Status Values (for Filtering)#

Common values you can use for the status field:

  • PENDING

  • STAGING_INPUTS

  • RUNNING

  • FINISHED

  • FAILED

  • CANCELLED

  • PAUSED

  • BLOCKED

You can filter jobs by status like:

getJobStatus(job_id)#

Purpose:#

Get the current status only.

Example:#

status = t.jobs.getJobStatus(jobUuid=jobUuid)
print(status)
condition: NORMAL_COMPLETION
status: FINISHED

Lightweight — ideal for polling loops.

getJobHistory(job_id)#

Purpose:#

Retrieve a timestamped history of job status changes.

Example:#

history = t.jobs.getJobHistory(jobUuid=jobUuid)
for event in history:
    print(event)
    print('--')
created: 2025-05-07T22:15:18.083053Z
description: {"newJobStatus":"PENDING","oldJobStatus":null,"jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: PENDING."}
event: JOB_NEW_STATUS
eventDetail: PENDING
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:15:18.162371Z
description: {"action":"added","numSubscriptions":1,"jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"A change to the job's subscriptions has occurred.  1 subscription(s) created with job submission."}
event: JOB_SUBSCRIPTION
eventDetail: ADDED
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:15:19.129898Z
description: {"newJobStatus":"PROCESSING_INPUTS","oldJobStatus":"PENDING","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: PROCESSING_INPUTS. The previous job status was PENDING."}
event: JOB_NEW_STATUS
eventDetail: PROCESSING_INPUTS
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:15:20.182194Z
description: {"newJobStatus":"STAGING_INPUTS","oldJobStatus":"PROCESSING_INPUTS","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: STAGING_INPUTS. The previous job status was PROCESSING_INPUTS."}
event: JOB_NEW_STATUS
eventDetail: STAGING_INPUTS
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:16:06.546626Z
description: {"transferStatus":"COMPLETED","transactionId":"2510a293-a91d-481c-baf3-4f89a9ed998a","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"A request to stage job input files has been submitted. Files service staging transaction 2510a293-a91d-481c-baf3-4f89a9ed998a in state COMPLETED for job 4dfa35e1-15cd-48fd-a090-f348544dee1f-007 in tenant designsafe."}
event: JOB_INPUT_TRANSACTION_ID
eventDetail: COMPLETED
transferSummary: 
completeTransfers: 112
created: 2025-05-07T22:15:20.327744Z
endTime: 2025-05-07T22:16:02.659808Z
errorMessage: None
estimatedTotalBytes: 2859879
startTime: 2025-05-07T22:15:35.461582Z
status: COMPLETED
totalBytesTransferred: 2859879
totalTransfers: 112
uuid: 2510a293-a91d-481c-baf3-4f89a9ed998a
transferTaskUuid: 2510a293-a91d-481c-baf3-4f89a9ed998a
--

created: 2025-05-07T22:16:06.585914Z
description: {"newJobStatus":"STAGING_JOB","oldJobStatus":"STAGING_INPUTS","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: STAGING_JOB. The previous job status was STAGING_INPUTS."}
event: JOB_NEW_STATUS
eventDetail: STAGING_JOB
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:16:48.916378Z
description: {"newJobStatus":"SUBMITTING_JOB","oldJobStatus":"STAGING_JOB","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: SUBMITTING_JOB. The previous job status was STAGING_JOB."}
event: JOB_NEW_STATUS
eventDetail: SUBMITTING_JOB
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:16:49.619544Z
description: {"newJobStatus":"QUEUED","oldJobStatus":"SUBMITTING_JOB","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: QUEUED. The previous job status was SUBMITTING_JOB."}
event: JOB_NEW_STATUS
eventDetail: QUEUED
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:16:51.803666Z
description: {"newJobStatus":"RUNNING","oldJobStatus":"QUEUED","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: RUNNING. The previous job status was QUEUED."}
event: JOB_NEW_STATUS
eventDetail: RUNNING
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:17:17.635728Z
description: {"newJobStatus":"ARCHIVING","oldJobStatus":"RUNNING","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: ARCHIVING. The previous job status was RUNNING."}
event: JOB_NEW_STATUS
eventDetail: ARCHIVING
transferSummary: 

transferTaskUuid: None
--

created: 2025-05-07T22:20:49.126545Z
description: {"transferStatus":"COMPLETED","transactionId":"ad89111a-222a-4e71-9fd2-4691f15cafed","jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"A request to archive job output files has been submitted. Files service archiving transaction ad89111a-222a-4e71-9fd2-4691f15cafed in state COMPLETED for job 4dfa35e1-15cd-48fd-a090-f348544dee1f-007 in tenant designsafe."}
event: JOB_ARCHIVE_TRANSACTION_ID
eventDetail: COMPLETED
transferSummary: 
completeTransfers: 5069
created: 2025-05-07T22:17:18.895979Z
endTime: 2025-05-07T22:20:21.744321Z
errorMessage: None
estimatedTotalBytes: 150885718
startTime: 2025-05-07T22:17:30.040657Z
status: COMPLETED
totalBytesTransferred: 150885718
totalTransfers: 5069
uuid: ad89111a-222a-4e71-9fd2-4691f15cafed
transferTaskUuid: ad89111a-222a-4e71-9fd2-4691f15cafed
--

created: 2025-05-07T22:20:52.736325Z
description: {"newJobStatus":"FINISHED","oldJobStatus":"ARCHIVING","blockedCount":0,"condition":"NORMAL_COMPLETION","remoteJobId":"1874224","remoteJobId2":null,"remoteOutcome":"FINISHED","remoteResultInfo":"0:0","remoteQueue":null,"remoteSubmitted":"2025-05-07T22:17:17.601968445Z","remoteStarted":null,"remoteEnded":null,"jobName":"opensees-mp-s3-latest_2025-05-07T22:13:08","jobUuid":"4dfa35e1-15cd-48fd-a090-f348544dee1f-007","jobOwner":"silvia","message":"The job has transitioned to a new status: FINISHED. The previous job status was ARCHIVING."}
event: JOB_NEW_STATUS
eventDetail: FINISHED
transferSummary: 

transferTaskUuid: None
--

Useful for debugging, auditing, or analyzing runtime progression.

We will look at these commands in more details in this training module.