Skip to main content

GraphQL

Many of the Shakudo Platform features are supported through the platform dashboard as well as GraphQL. GraphQL method is particularly useful when some actions are easier done algorithmically such as spinning up many jobs at once.

Below are some common graphql queries for submission, checking status, etc.


Sessions

Get Sessions

Get a list of Sessions.

query hyperhubSessions($limit: Int!, $email: String, $status: String, $imageType: String) {
hyperHubSessions(orderBy:{startTime: desc}, take: $limit, where: {
hyperplaneUserEmail: {equals: $email},
status: {equals: $status},
}) {
id
hyperplaneUserEmail
status
imageType
jLabUrl
notebookURI
estimatedCost
department
resourceCPUlimit
resourceRAMlimit
resourceCPUrequest
resourceRAMrequest
gpuRequest
startTime
completionTime
}
countHyperHubSessions
}

Cancel a session by session_id

Cancel a Session

mutation($id: String!) {
updateHyperHubSession(where: {id: $id}, data: {
status: {set: "cancelled"}
}) {
id
status
}
}

Count sessions

Count the number of sessions based on the filters provided by the parameters

query hyperhubSessions($email: String, $imageType: String, $status: String) {
hyperHubSessions(where: {
hyperplaneUserEmail: {equals: $email},
imageType: {equals: $imageType}
status: {equals: $status}
}) {
id
}
}

Create a pipeline job

Create a pipeline job with the specified inputs

mutation ($type: String!, $timeout: Int!, $activeTimeout: Int, $maxRetries: Int!, $yamlPath: String!, $exposedPort: String, $schedule: String, $parameters: ParameterCreateNestedManyWithoutPipelineJobInput ) { 
createPipelineJob (data: {
jobType: $type,
timeout: $timeout,
activeTimeout: $activeTimeout
maxRetries: $maxRetries,
pipelineYamlPath: $yamlPath,
exposedPort: $exposedPort,
parameters: $parameters,
schedule: $schedule
}) {
id
pinned
pipelineYamlPath
schedule
status
statusReason
output
startTime
completionTime
daskDashboardUrl
timeout
outputNotebooksPath
activeTimeout
maxRetries
exposedPort
jobType
parameters {
key
value
}
}
}

Cancel a pipeline job

Cancel a job (Stop job from running)

mutation ($id: String!) {
updatePipelineJob(where: {id: $id},
data: {
status: {set: "cancelled"}
}) {
id
}
}

Get a list of jobs

Show the list of jobs

query nextJobs($limit: Int!) {
pipelineJobs(orderBy: [{pinned: desc},{ startTime: desc}], take: $limit) {
id
pipelineYamlPath
schedule
status
output
startTime
completionTime
daskDashboardUrl
timeout
outputNotebooksPath
activeTimeout
maxRetries
jobType
estimatedCost
owner
department
}
}

Get job status

Count the number of jobs based on their statuses. For example, failed, pending, or cancelled jobs. The timeFrame parameter specifies the timeframe which will be considered.

For instance:

  • T_10M = past 10 minutes
  • T_24H = past 24 hours
query {
COUNT_ALL_TOTAL: getJobStat(stat: COUNT_ALL, timeFrame: TOTAL)
COUNT_CANCELLED_TOTAL: getJobStat(stat: COUNT_CANCELLED, timeFrame: TOTAL)
COUNT_DONE_TOTAL: getJobStat(stat: COUNT_DONE, timeFrame: TOTAL)
COUNT_FAILED_TOTAL: getJobStat(stat: COUNT_FAILED, timeFrame: TOTAL)
COUNT_IN_PROGRESS_TOTAL: getJobStat(
stat: COUNT_IN_PROGRESS
timeFrame: TOTAL
)
COUNT_PENDING_TOTAL: getJobStat(stat: COUNT_PENDING, timeFrame: TOTAL)
COUNT_SCHEDULED_TOTAL: getJobStat(stat: COUNT_SCHEDULED, timeFrame: TOTAL)
COUNT_TIMED_OUT_TOTAL: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: TOTAL)
COUNT_ALL_T_10M: getJobStat(stat: COUNT_ALL, timeFrame: T_10M)
COUNT_CANCELLED_T_10M: getJobStat(stat: COUNT_CANCELLED, timeFrame: T_10M)
COUNT_DONE_T_10M: getJobStat(stat: COUNT_DONE, timeFrame: T_10M)
COUNT_FAILED_T_10M: getJobStat(stat: COUNT_FAILED, timeFrame: T_10M)
COUNT_IN_PROGRESS_T_10M: getJobStat(
stat: COUNT_IN_PROGRESS
timeFrame: T_10M
)
COUNT_PENDING_T_10M: getJobStat(stat: COUNT_PENDING, timeFrame: T_10M)
COUNT_SCHEDULED_T_10M: getJobStat(stat: COUNT_SCHEDULED, timeFrame: T_10M)
COUNT_TIMED_OUT_T_10M: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: T_10M)
COUNT_ALL_T_1H: getJobStat(stat: COUNT_ALL, timeFrame: T_1H)
COUNT_CANCELLED_T_1H: getJobStat(stat: COUNT_CANCELLED, timeFrame: T_1H)
COUNT_DONE_T_1H: getJobStat(stat: COUNT_DONE, timeFrame: T_1H)
COUNT_FAILED_T_1H: getJobStat(stat: COUNT_FAILED, timeFrame: T_1H)
COUNT_IN_PROGRESS_T_1H: getJobStat(stat: COUNT_IN_PROGRESS, timeFrame: T_1H)
COUNT_PENDING_T_1H: getJobStat(stat: COUNT_PENDING, timeFrame: T_1H)
COUNT_SCHEDULED_T_1H: getJobStat(stat: COUNT_SCHEDULED, timeFrame: T_1H)
COUNT_TIMED_OUT_T_1H: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: T_1H)
COUNT_ALL_T_24H: getJobStat(stat: COUNT_ALL, timeFrame: T_24H)
COUNT_CANCELLED_T_24H: getJobStat(stat: COUNT_CANCELLED, timeFrame: T_24H)
COUNT_DONE_T_24H: getJobStat(stat: COUNT_DONE, timeFrame: T_24H)
COUNT_FAILED_T_24H: getJobStat(stat: COUNT_FAILED, timeFrame: T_24H)
COUNT_IN_PROGRESS_T_24H: getJobStat(
stat: COUNT_IN_PROGRESS
timeFrame: T_24H
)
COUNT_PENDING_T_24H: getJobStat(stat: COUNT_PENDING, timeFrame: T_24H)
COUNT_SCHEDULED_T_24H: getJobStat(stat: COUNT_SCHEDULED, timeFrame: T_24H)
COUNT_TIMED_OUT_T_24H: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: T_24H)
}

Get scheduled jobs status

Count the number of scheduled jobs based on their statuses. For example, failed, pending, or cancelled jobs. The differnece with the query above is that the belew parameter is added to only count scheduled jobs for each time frame with status: SCHEDULED

query {
COUNT_ALL_TOTAL: getJobStat(stat: COUNT_ALL, timeFrame: TOTAL, status: SCHEDULED)
COUNT_CANCELLED_TOTAL: getJobStat(stat: COUNT_CANCELLED, timeFrame: TOTAL, status: SCHEDULED)
COUNT_DONE_TOTAL: getJobStat(stat: COUNT_DONE, timeFrame: TOTAL, status: SCHEDULED)
COUNT_FAILED_TOTAL: getJobStat(stat: COUNT_FAILED, timeFrame: TOTAL, status: SCHEDULED)
COUNT_IN_PROGRESS_TOTAL: getJobStat(
stat: COUNT_IN_PROGRESS
timeFrame: TOTAL
)
COUNT_PENDING_TOTAL: getJobStat(stat: COUNT_PENDING, timeFrame: TOTAL, status: SCHEDULED)
COUNT_SCHEDULED_TOTAL: getJobStat(stat: COUNT_SCHEDULED, timeFrame: TOTAL, status: SCHEDULED)
COUNT_TIMED_OUT_TOTAL: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: TOTAL, status: SCHEDULED)
COUNT_ALL_T_10M: getJobStat(stat: COUNT_ALL, timeFrame: T_10M)
COUNT_CANCELLED_T_10M: getJobStat(stat: COUNT_CANCELLED, timeFrame: T_10M, status: SCHEDULED)
COUNT_DONE_T_10M: getJobStat(stat: COUNT_DONE, timeFrame: T_10M, status: SCHEDULED)
COUNT_FAILED_T_10M: getJobStat(stat: COUNT_FAILED, timeFrame: T_10M, status: SCHEDULED)
COUNT_IN_PROGRESS_T_10M: getJobStat(
stat: COUNT_IN_PROGRESS
timeFrame: T_10M
)
COUNT_PENDING_T_10M: getJobStat(stat: COUNT_PENDING, timeFrame: T_10M, status: SCHEDULED)
COUNT_SCHEDULED_T_10M: getJobStat(stat: COUNT_SCHEDULED, timeFrame: T_10M, status: SCHEDULED)
COUNT_TIMED_OUT_T_10M: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: T_10M, status: SCHEDULED)
COUNT_ALL_T_1H: getJobStat(stat: COUNT_ALL, timeFrame: T_1H, status: SCHEDULED)
COUNT_CANCELLED_T_1H: getJobStat(stat: COUNT_CANCELLED, timeFrame: T_1H, status: SCHEDULED)
COUNT_DONE_T_1H: getJobStat(stat: COUNT_DONE, timeFrame: T_1H, status: SCHEDULED)
COUNT_FAILED_T_1H: getJobStat(stat: COUNT_FAILED, timeFrame: T_1H, status: SCHEDULED)
COUNT_IN_PROGRESS_T_1H: getJobStat(stat: COUNT_IN_PROGRESS, timeFrame: T_1H, status: SCHEDULED)
COUNT_PENDING_T_1H: getJobStat(stat: COUNT_PENDING, timeFrame: T_1H, status: SCHEDULED)
COUNT_SCHEDULED_T_1H: getJobStat(stat: COUNT_SCHEDULED, timeFrame: T_1H, status: SCHEDULED)
COUNT_TIMED_OUT_T_1H: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: T_1H, status: SCHEDULED)
COUNT_ALL_T_24H: getJobStat(stat: COUNT_ALL, timeFrame: T_24H)
COUNT_CANCELLED_T_24H: getJobStat(stat: COUNT_CANCELLED, timeFrame: T_24H, status: SCHEDULED)
COUNT_DONE_T_24H: getJobStat(stat: COUNT_DONE, timeFrame: T_24H, status: SCHEDULED)
COUNT_FAILED_T_24H: getJobStat(stat: COUNT_FAILED, timeFrame: T_24H, status: SCHEDULED)
COUNT_IN_PROGRESS_T_24H: getJobStat(
stat: COUNT_IN_PROGRESS
timeFrame: T_24H
, status: SCHEDULED
)
COUNT_PENDING_T_24H: getJobStat(stat: COUNT_PENDING, timeFrame: T_24H, status: SCHEDULED)
COUNT_SCHEDULED_T_24H: getJobStat(stat: COUNT_SCHEDULED, timeFrame: T_24H, status: SCHEDULED)
COUNT_TIMED_OUT_T_24H: getJobStat(stat: COUNT_TIMED_OUT, timeFrame: T_24H, status: SCHEDULED)
}

Get a list of services

Get list of services - services are pipeline jobs which have an active timeout and timeout of -1 (Never ending jobs)

query nextJobs($offset: Int, $limit: Int!, $status: String!) {
pipelineJobs(orderBy: [{pinned: desc},{ startTime: desc}], take: $limit, skip: $offset, where: {
AND: [
{activeTimeout: {equals: -1}},
{timeout: {equals: -1}},
{status: {equals: $status}}
]
}) {
id
exposedPort
pinned
pipelineYamlPath
schedule
status
statusReason
startTime
completionTime
daskDashboardUrl
timeout
output
outputNotebooksPath
activeTimeout
duration
jobType
schedule
estimatedCost
owner
department
maxRetries
}
}

Jobs

Submit a pipeline job

mutation submitJob { 
createPipelineJob (data: {
jobType: "basic",
timeout: 1500,
activeTimeout: 1000,
maxRetries: 5,
pipelineYamlPath: "example_pipeline.yaml",
parameters: {
create: [
{key: "a_param", value: "pass parameters as strings"},
]
}
}) {
id
runId
}
}

Cancel a job

mutation cancelJob {
updatePipelineJob(
where: { id: "your-job-id" }
data: { status: { set: "cancelled" } }
) {
id
}
}

Cancel all scheduled jobs

mutation cancelScheduledJob {
updateManyPipelineJob(
where: { status: { equals: "scheduled" } }
data: { status: { set: "cancelled" } }
) {
count
}
}

Check the status of a job

query checkStatus {
pipelineJob (where: {id: "your-job-id"}){
status
}
}

Get job parameters

Get the list of parameters for a pipeline job

query nextJobs($id: String!) {
pipelineJobs(where: {id: {equals: $id}}) {
parameters {
key
value
id
pipelineJobId
}
}
}

Detele job parameters

Delete a parameter for a pipeline job

mutation($jobId: String!, $parameterId: String!) {
updatePipelineJob(where: {id: $jobId},
data: {
parameters: {disconnect: {id: $parameterId}}
}) {
id
}
}

Update job parameters

Update the parameter key and value

mutation ($parameterId: String!, $keyValue: String, $valueValue: String) {
updateParameter(where: {id: $parameterId}, data: {
key: {set: $keyValue}
value: {set: $valueValue}
}) {
id
}
}