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)