lib/iron_titan/models/job.rb in iron_titan-0.1.1 vs lib/iron_titan/models/job.rb in iron_titan-0.2.0
- old
+ new
@@ -1,127 +1,120 @@
=begin
Titan API
The ultimate, language agnostic, container based job processing framework.
-OpenAPI spec version: 0.1.1
+OpenAPI spec version: 0.2.0
Generated by: https://github.com/swagger-api/swagger-codegen.git
=end
require 'date'
module IronTitan
class Job
- # Docker image to use for job.
- attr_accessor :image
+ # Payload for the job. This is what you pass into each job to make it do something.
+ attr_accessor :payload
- # If this field is set, then this job is a retry of a previous job. retry_from_id points to the previous job.
- attr_accessor :retry_from_id
+ # Number of seconds to wait before queueing the job for consumption for the first time. Must be a positive integer. Jobs with a delay start in state \"delayed\" and transition to \"running\" after delay seconds.
+ attr_accessor :delay
- # Time when job was submitted.
- attr_accessor :created_at
+ # Maximum runtime in seconds. If a consumer retrieves the job, but does not change it's status within timeout seconds, the job is considered failed, with reason timeout (Titan may allow a small grace period). The consumer should also kill the job after timeout seconds. If a consumer tries to change status after Titan has already timed out the job, the consumer will be ignored.
+ attr_accessor :timeout
- # Priority of the job. 3 levels from 0-2. Default 0.
+ # Priority of the job. Higher has more priority. 3 levels from 0-2. Jobs at same priority are processed in FIFO order.
attr_accessor :priority
- # Time in seconds to wait before next attempt. Default 60.
+ # Number of automatic retries this job is allowed. A retry will be attempted if a task fails. Max 25.\nAutomatic retries are performed by titan when a task reaches a failed state and has `max_retries` > 0. A retry is performed by queueing a new job with the same image id and payload. The new job's max_retries is one less than the original. The new job's `retry_of` field is set to the original Job ID. Titan will delay the new job for retries_delay seconds before queueing it. Cancelled or successful tasks are never automatically retried.
+ attr_accessor :max_retries
+
+ # Time in seconds to wait before retrying the job. Must be a non-negative integer.
attr_accessor :retries_delay
- # Сorresponding error message, only when status=='error'.
- attr_accessor :error
+ # Unique identifier representing a specific job.
+ attr_accessor :id
- # Maximum runtime in seconds. If job runs for longer, it will be killed. Default 60 seconds.
- attr_accessor :timeout
+ # States and valid transitions.\n\n +---------+\n +---------> delayed <----------------+\n +----+----+ |\n | |\n | |\n +----v----+ |\n +---------> queued <----------------+\n +----+----+ *\n | *\n | retry * creates new job\n +----v----+ *\n | running | *\n +--+-+-+--+ |\n +---------|-|-|-----+-------------+\n +---|---------+ | +-----|---------+ |\n | | | | | |\n+-----v---^-+ +--v-------^+ +--v---^-+\n| succeeded | | cancelled | | failed |\n+-----------+ +-----------+ +--------+\n\n* delayed - has a delay.\n* queued - Ready to be consumed when it's turn comes.\n* running - Currently consumed by a runner which will attempt to process it.\n* succeeded - (or complete? success/error is common javascript terminology)\n* failed - Something went wrong. In this case more information can be obtained\n by inspecting the \"reason\" field.\n - timeout\n - killed - forcibly killed by worker due to resource restrictions or access\n violations.\n - bad_exit - exited with non-zero status due to program termination/crash.\n* cancelled - cancelled via API. More information in the reason field.\n - client_request - Request was cancelled by a client. See \"details\" for any\n details.
+ attr_accessor :status
- # Max number of retries. A retry will be attempted if a task fails. Default 3. TODO: naming: retries or max_retries?
- attr_accessor :retries
+ # Image to execute to run this Job. Get details via the /image/{id} endpoint.
+ attr_accessor :image_id
- # Time when job completed, whether it was successul or failed.
- attr_accessor :completed_at
+ attr_accessor :reason
- # Number of seconds to wait before starting. Default 0.
- attr_accessor :delay
+ # Some description of the reason this Job is in current state. Used only for presentation purposes. Should be human-readable.
+ attr_accessor :details
- # Payload for the job. This is what you pass into each job to make it do something.
- attr_accessor :payload
+ # Time when job was submitted. Always in UTC.
+ attr_accessor :created_at
- # Docker image to use for job. Default is the same as the 'image' parameter.
- attr_accessor :name
-
- # Time when job started execution.
+ # Time when job started execution. Always in UTC.
attr_accessor :started_at
- # Unique identifier representing a specific job.
- attr_accessor :id
+ # Time when job completed, whether it was successul or failed. Always in UTC.
+ attr_accessor :completed_at
- # If this field is set, then this job was retried and RetryId points to new job.
- attr_accessor :retry_id
+ # If this field is set, then this job is a retry of the ID in this field.
+ attr_accessor :retry_of
- # Status of job. One of: [pending, running, success, error, timeout]
- attr_accessor :status
-
# Attribute mapping from ruby-style variable name to JSON key.
def self.attribute_map
{
- :'image' => :'image',
+ :'payload' => :'payload',
- :'retry_from_id' => :'retry_from_id',
+ :'delay' => :'delay',
- :'created_at' => :'created_at',
+ :'timeout' => :'timeout',
:'priority' => :'priority',
+ :'max_retries' => :'max_retries',
+
:'retries_delay' => :'retries_delay',
- :'error' => :'error',
+ :'id' => :'id',
- :'timeout' => :'timeout',
+ :'status' => :'status',
- :'retries' => :'retries',
+ :'image_id' => :'image_id',
- :'completed_at' => :'completed_at',
+ :'reason' => :'reason',
- :'delay' => :'delay',
+ :'details' => :'details',
- :'payload' => :'payload',
+ :'created_at' => :'created_at',
- :'name' => :'name',
-
:'started_at' => :'started_at',
- :'id' => :'id',
+ :'completed_at' => :'completed_at',
- :'retry_id' => :'retry_id',
+ :'retry_of' => :'retry_of'
- :'status' => :'status'
-
}
end
# Attribute type mapping.
def self.swagger_types
{
- :'image' => :'String',
- :'retry_from_id' => :'String',
- :'created_at' => :'DateTime',
+ :'payload' => :'String',
+ :'delay' => :'Integer',
+ :'timeout' => :'Integer',
:'priority' => :'Integer',
+ :'max_retries' => :'Integer',
:'retries_delay' => :'Integer',
- :'error' => :'String',
- :'timeout' => :'Integer',
- :'retries' => :'Integer',
- :'completed_at' => :'DateTime',
- :'delay' => :'Integer',
- :'payload' => :'String',
- :'name' => :'String',
- :'started_at' => :'DateTime',
:'id' => :'String',
- :'retry_id' => :'String',
- :'status' => :'String'
+ :'status' => :'String',
+ :'image_id' => :'String',
+ :'reason' => :'Reason',
+ :'details' => :'String',
+ :'created_at' => :'DateTime',
+ :'started_at' => :'DateTime',
+ :'completed_at' => :'DateTime',
+ :'retry_of' => :'String'
}
end
def initialize(attributes = {})
@@ -129,105 +122,119 @@
# convert string to symbol for hash key
attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
- if attributes[:'image']
- self.image = attributes[:'image']
+ if attributes[:'payload']
+ self.payload = attributes[:'payload']
end
- if attributes[:'retry_from_id']
- self.retry_from_id = attributes[:'retry_from_id']
+ if attributes[:'delay']
+ self.delay = attributes[:'delay']
+ else
+ self.delay = 0
end
- if attributes[:'created_at']
- self.created_at = attributes[:'created_at']
+ if attributes[:'timeout']
+ self.timeout = attributes[:'timeout']
+ else
+ self.timeout = 60
end
if attributes[:'priority']
self.priority = attributes[:'priority']
+ else
+ self.priority = 0
end
+ if attributes[:'max_retries']
+ self.max_retries = attributes[:'max_retries']
+ else
+ self.max_retries = 3
+ end
+
if attributes[:'retries_delay']
self.retries_delay = attributes[:'retries_delay']
+ else
+ self.retries_delay = 60
end
- if attributes[:'error']
- self.error = attributes[:'error']
+ if attributes[:'id']
+ self.id = attributes[:'id']
end
- if attributes[:'timeout']
- self.timeout = attributes[:'timeout']
+ if attributes[:'status']
+ self.status = attributes[:'status']
end
- if attributes[:'retries']
- self.retries = attributes[:'retries']
+ if attributes[:'image_id']
+ self.image_id = attributes[:'image_id']
end
- if attributes[:'completed_at']
- self.completed_at = attributes[:'completed_at']
+ if attributes[:'reason']
+ self.reason = attributes[:'reason']
end
- if attributes[:'delay']
- self.delay = attributes[:'delay']
+ if attributes[:'details']
+ self.details = attributes[:'details']
end
- if attributes[:'payload']
- self.payload = attributes[:'payload']
+ if attributes[:'created_at']
+ self.created_at = attributes[:'created_at']
end
- if attributes[:'name']
- self.name = attributes[:'name']
- end
-
if attributes[:'started_at']
self.started_at = attributes[:'started_at']
end
- if attributes[:'id']
- self.id = attributes[:'id']
+ if attributes[:'completed_at']
+ self.completed_at = attributes[:'completed_at']
end
- if attributes[:'retry_id']
- self.retry_id = attributes[:'retry_id']
+ if attributes[:'retry_of']
+ self.retry_of = attributes[:'retry_of']
end
- if attributes[:'status']
- self.status = attributes[:'status']
+ end
+
+ # Custom attribute writer method checking allowed values (enum).
+ def status=(status)
+ allowed_values = ["delayed", "queued", "running", "succeeded", "failed", "cancelled"]
+ if status && !allowed_values.include?(status)
+ fail "invalid value for 'status', must be one of #{allowed_values}"
end
-
+ @status = status
end
# Check equality by comparing each attribute.
def ==(o)
return true if self.equal?(o)
self.class == o.class &&
- image == o.image &&
- retry_from_id == o.retry_from_id &&
- created_at == o.created_at &&
+ payload == o.payload &&
+ delay == o.delay &&
+ timeout == o.timeout &&
priority == o.priority &&
+ max_retries == o.max_retries &&
retries_delay == o.retries_delay &&
- error == o.error &&
- timeout == o.timeout &&
- retries == o.retries &&
- completed_at == o.completed_at &&
- delay == o.delay &&
- payload == o.payload &&
- name == o.name &&
- started_at == o.started_at &&
id == o.id &&
- retry_id == o.retry_id &&
- status == o.status
+ status == o.status &&
+ image_id == o.image_id &&
+ reason == o.reason &&
+ details == o.details &&
+ created_at == o.created_at &&
+ started_at == o.started_at &&
+ completed_at == o.completed_at &&
+ retry_of == o.retry_of
end
# @see the `==` method
def eql?(o)
self == o
end
# Calculate hash code according to all attributes.
def hash
- [image, retry_from_id, created_at, priority, retries_delay, error, timeout, retries, completed_at, delay, payload, name, started_at, id, retry_id, status].hash
+ [payload, delay, timeout, priority, max_retries, retries_delay, id, status, image_id, reason, details, created_at, started_at, completed_at, retry_of].hash
end
# build the object from hash
def build_from_hash(attributes)
return nil unless attributes.is_a?(Hash)