Task System
Tasks for remote command execution
Our platform uses a task system to communicate with the Host Agents installed on all your hosts (BM and VM). A Task as such is a wrapper for one or more commands sent to a Host Agent. This wrapper keeps track of which command is currently being executed and its execution status. A Task can also contain a schedule time, allowing Tasks to be performed somewhere in the future. You can find an API example below.
Task Actions
Tasks are made up of TaskAction elements, each describing a single command to be executed by a host agent. A Task consists of one or more TaskActions. Each TaskAction has a status field to inform you about the result of command execution.
Task Action Examples
Here are some examples of TaskAction types, to give you an idea:
- Download a build archive (e.g. your game server build, or a sidecar build)
- Extract a build archive
- Stop an instance
- Deploy a build [to an instance]
- Start an instance
These are the most frequently used actions and are also basic building blocks with which we can can deploy / update / control your instances. These actions also exactly describe an instance deployment task. So whenever any type of instance is deployed for you, we create a task containing the actions described above. These 6 actions are combined into 1 Task.
Here is a more thorough example of the actions of an instance deployment Task. These also contain the parameters that each action requires in order to operate properly:
[
{
"idx": 0,
"actionType": "Download software build",
"requiredParams": {
"buildId": "The ID of the applicationBuild. Its build archive will be downloaded."
}
},
{
"idx": 1,
"actionType": "Extract software build",
"requiredParams": {
"buildId": "The ID of the applicationBuild. This action will extract the build archive that has been downloaded."
}
},
{
"idx": 2,
"actionType": "Stop instance",
"requiredParams": {
"methodId": "The ID of the stop-method, indicating how you want to stop the application instance.",
"timeout": "If the stop-method is graceful, you can indicate a maximum time to wait here, before the application instance is forcefully terminated."
}
},
{
"idx": 3,
"actionType": "Deploy software build to instance",
"requiredParams": {
"buildId": "The ID of the applicationBuild. This action expects the build archive to already have been downloaded and extracted onto the host."
}
},
{
"idx": 4,
"actionType": "Start instance",
"requiredParams": null
}
]
Task Status (API example)
When you create a Task, you will be given a Task ID. With this ID you can at any time check the status of the task. when doing that via the API you will get something like this:
HTTP request
GET /v3/applicationInstance/task/12278257
Request body
none
Response body
[
{
"id": 12278257,
"batchId": 0,
"categoryId": 2,
"entityId": 2897954287466354361,
"currentActionIdx": 6,
"executeAt": 1563469175,
"lastActivityAt": 1563469176,
"finishedAt": 1563469176,
"resultCode": 127,
"resultText": "Done"
}
]
Property | Description |
---|---|
id | The Task ID |
batchId | The TaskBatch ID, in case this Task was part of a larger batch |
categoryId | Task category. Normally 2, meaning ApplicationInstance |
entityId | The ID of the entity (application instance) this Task was performed on |
currentActionIdx | Index of the TaskAction currently being executed. If the Task itself is yet to be performed, this will be -1 |
executeAt | If 0, the Task will be executed as soon as possible. Otherwise it contains the unix timestamp of when the Task has been or will be executed |
lastActivityAt | Unix timestamp of when the system received a sign of life for this Task |
finishedAt | Unix timestamp of when this task finished processing |
resultCode | The result of the Task in numerical form |
resultText | The result of the Task in human readable form |
Task Result Codes
A Task will reflect its status through the resultCode
property. It will be one of the following values:
- 0: Pending Task execution
- 1: In progress
- 2: Paused
- 124: Cancelled
- 125: Timed out
- 126: Done, with error (the error can be found in the
resultText
field - 127: Done
Task Batch
When executing the same command for multiple application instances, we create a task per instance and collect them all within a TaskBatch. When a TaskBatch is submitted, you will be given a TaskBatch ID. This allows you to easily track the execution result of all tasks within a batch.
HTTP request
GET /v3/applicationInstance/taskBatch/9
Request body
none
Response body
[
{
"id": 9,
"createdAt": 1559829929,
"executeAt": 1559829929,
"finishedAt": 1559829934,
"numTasks": 8,
"numTasksOk": 8,
"numTasksFailed": 0,
"numTasksCancelled": 0,
"taskIds": {
"11238257": 127,
"11238258": 127,
"11238259": 127,
"11238260": 127,
"11238261": 127,
"11238262": 127,
"11238263": 127,
"11238264": 127
}
}
]
Property | Value type | Description |
---|---|---|
id | int | A unique TaskBatch identifier |
createdAt | int | Unix timestamp of creation time |
executeAt | int | Unix timestamp of execution time |
finishedAt | int | Unix timestamp of when the last Tasks was finished executing |
numTasks | int | Total number of Tasks in this TaskBatch |
numTasksOk | int | Number of successfully executed Tasks |
numTasksFailed | int | Number of failed Tasks |
numTasksCancelled | int | Number of cancelled Tasks |
taskIds | [int] | Array of key-value pairs indicating Task ID vs Task Result Code |
Cancelling a Task
You can cancel a (scheduled) Task by calling DELETE /v3/applicationInstance/task/{taskId}
.
The Task's result code will then be set to 124 (Cancelled).
Note
At this time, there is no roll-back mechanism for already performed actions.
Pausing a Task
You can pause a (running) task by calling PUT /v3/applicationInstance/task/{taskId}
.
To un-pause a paused Task, call the same endpoint.
Note that when a Task is paused, no other Tasks for the same ApplicationInstance can be run, until the paused Task is un-paused and finished again.