package api import ( "time" ) // MemoryStats holds memory usage related stats type MemoryStats struct { RSS uint64 Cache uint64 Swap uint64 MaxUsage uint64 KernelUsage uint64 KernelMaxUsage uint64 Measured []string } // CpuStats holds cpu usage related stats type CpuStats struct { SystemMode float64 UserMode float64 TotalTicks float64 ThrottledPeriods uint64 ThrottledTime uint64 Percent float64 Measured []string } // ResourceUsage holds information related to cpu and memory stats type ResourceUsage struct { MemoryStats *MemoryStats CpuStats *CpuStats } // TaskResourceUsage holds aggregated resource usage of all processes in a Task // and the resource usage of the individual pids type TaskResourceUsage struct { ResourceUsage *ResourceUsage Timestamp int64 Pids map[string]*ResourceUsage } // AllocResourceUsage holds the aggregated task resource usage of the // allocation. type AllocResourceUsage struct { ResourceUsage *ResourceUsage Tasks map[string]*TaskResourceUsage Timestamp int64 } // RestartPolicy defines how the Nomad client restarts // tasks in a taskgroup when they fail type RestartPolicy struct { Interval time.Duration Attempts int Delay time.Duration Mode string } // The ServiceCheck data model represents the consul health check that // Nomad registers for a Task type ServiceCheck struct { Id string Name string Type string Command string Args []string Path string Protocol string `mapstructure:"port"` PortLabel string `mapstructure:"port"` Interval time.Duration Timeout time.Duration InitialStatus string `mapstructure:"initial_status"` } // The Service model represents a Consul service definition type Service struct { Id string Name string Tags []string PortLabel string `mapstructure:"port"` Checks []ServiceCheck } // LocalDisk is an ephemeral disk object type LocalDisk struct { Sticky bool DiskMB int `mapstructure:"disk"` } // TaskGroup is the unit of scheduling. type TaskGroup struct { Name string Count int Constraints []*Constraint Tasks []*Task RestartPolicy *RestartPolicy LocalDisk *LocalDisk Meta map[string]string } // NewTaskGroup creates a new TaskGroup. func NewTaskGroup(name string, count int) *TaskGroup { return &TaskGroup{ Name: name, Count: count, } } // Constrain is used to add a constraint to a task group. func (g *TaskGroup) Constrain(c *Constraint) *TaskGroup { g.Constraints = append(g.Constraints, c) return g } // AddMeta is used to add a meta k/v pair to a task group func (g *TaskGroup) SetMeta(key, val string) *TaskGroup { if g.Meta == nil { g.Meta = make(map[string]string) } g.Meta[key] = val return g } // AddTask is used to add a new task to a task group. func (g *TaskGroup) AddTask(t *Task) *TaskGroup { g.Tasks = append(g.Tasks, t) return g } // RequireDisk adds a local disk to the task group func (g *TaskGroup) RequireDisk(disk *LocalDisk) *TaskGroup { g.LocalDisk = disk return g } // LogConfig provides configuration for log rotation type LogConfig struct { MaxFiles int MaxFileSizeMB int } // Task is a single process in a task group. type Task struct { Name string Driver string User string Config map[string]interface{} Constraints []*Constraint Env map[string]string Services []Service Resources *Resources Meta map[string]string KillTimeout time.Duration LogConfig *LogConfig Artifacts []*TaskArtifact Vault *Vault } // TaskArtifact is used to download artifacts before running a task. type TaskArtifact struct { GetterSource string GetterOptions map[string]string RelativeDest string } type Vault struct { Policies []string } // NewTask creates and initializes a new Task. func NewTask(name, driver string) *Task { return &Task{ Name: name, Driver: driver, } } // Configure is used to configure a single k/v pair on // the task. func (t *Task) SetConfig(key string, val interface{}) *Task { if t.Config == nil { t.Config = make(map[string]interface{}) } t.Config[key] = val return t } // SetMeta is used to add metadata k/v pairs to the task. func (t *Task) SetMeta(key, val string) *Task { if t.Meta == nil { t.Meta = make(map[string]string) } t.Meta[key] = val return t } // Require is used to add resource requirements to a task. func (t *Task) Require(r *Resources) *Task { t.Resources = r return t } // Constraint adds a new constraints to a single task. func (t *Task) Constrain(c *Constraint) *Task { t.Constraints = append(t.Constraints, c) return t } // SetLogConfig sets a log config to a task func (t *Task) SetLogConfig(l *LogConfig) *Task { t.LogConfig = l return t } // TaskState tracks the current state of a task and events that caused state // transitions. type TaskState struct { State string Events []*TaskEvent } const ( TaskDriverFailure = "Driver Failure" TaskReceived = "Received" TaskFailedValidation = "Failed Validation" TaskStarted = "Started" TaskTerminated = "Terminated" TaskKilling = "Killing" TaskKilled = "Killed" TaskRestarting = "Restarting" TaskNotRestarting = "Not Restarting" TaskDownloadingArtifacts = "Downloading Artifacts" TaskArtifactDownloadFailed = "Failed Artifact Download" TaskDiskExceeded = "Disk Exceeded" ) // TaskEvent is an event that effects the state of a task and contains meta-data // appropriate to the events type. type TaskEvent struct { Type string Time int64 RestartReason string DriverError string ExitCode int Signal int Message string KillTimeout time.Duration KillError string StartDelay int64 DownloadError string ValidationError string }