open-nomad/api/tasks.go

254 lines
5.9 KiB
Go
Raw Normal View History

2015-09-09 20:02:39 +00:00
package api
import (
"time"
)
2016-05-27 22:24:22 +00:00
// MemoryStats holds memory usage related stats
2016-04-29 20:03:02 +00:00
type MemoryStats struct {
RSS uint64
Cache uint64
Swap uint64
MaxUsage uint64
KernelUsage uint64
KernelMaxUsage uint64
2016-06-10 02:45:41 +00:00
Measured []string
2016-04-29 20:03:02 +00:00
}
2016-05-27 22:24:22 +00:00
// CpuStats holds cpu usage related stats
2016-05-21 07:49:17 +00:00
type CpuStats struct {
2016-05-19 21:06:19 +00:00
SystemMode float64
UserMode float64
TotalTicks float64
2016-04-29 20:03:02 +00:00
ThrottledPeriods uint64
ThrottledTime uint64
2016-05-19 21:06:19 +00:00
Percent float64
2016-06-10 02:45:41 +00:00
Measured []string
2016-04-29 20:03:02 +00:00
}
2016-05-27 22:24:22 +00:00
// ResourceUsage holds information related to cpu and memory stats
type ResourceUsage struct {
2016-04-29 20:03:02 +00:00
MemoryStats *MemoryStats
2016-05-21 07:49:17 +00:00
CpuStats *CpuStats
}
2016-05-27 22:24:22 +00:00
// TaskResourceUsage holds aggregated resource usage of all processes in a Task
// and the resource usage of the individual pids
type TaskResourceUsage struct {
ResourceUsage *ResourceUsage
2016-05-27 22:24:22 +00:00
Timestamp int64
Pids map[string]*ResourceUsage
2016-04-29 20:03:02 +00:00
}
// 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
2015-10-31 04:28:56 +00:00
}
// The ServiceCheck data model represents the consul health check that
// Nomad registers for a Task
type ServiceCheck struct {
2016-08-23 20:49:37 +00:00
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"`
}
2016-05-15 16:41:34 +00:00
// 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"`
}
2015-09-09 20:02:39 +00:00
// 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
2015-09-09 20:02:39 +00:00
}
// NewTaskGroup creates a new TaskGroup.
2015-09-10 00:59:18 +00:00
func NewTaskGroup(name string, count int) *TaskGroup {
2015-09-09 20:02:39 +00:00
return &TaskGroup{
2015-12-18 20:17:13 +00:00
Name: name,
Count: count,
2015-09-09 20:02:39 +00:00
}
}
// 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
}
2016-08-26 03:10:25 +00:00
// 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
}
2015-09-09 20:02:39 +00:00
// Task is a single process in a task group.
type Task struct {
Name string
Driver string
User string
2015-11-14 04:51:30 +00:00
Config map[string]interface{}
2015-09-09 20:02:39 +00:00
Constraints []*Constraint
Env map[string]string
Services []Service
2015-09-09 20:02:39 +00:00
Resources *Resources
Meta map[string]string
KillTimeout time.Duration
LogConfig *LogConfig
Artifacts []*TaskArtifact
2016-08-17 04:32:25 +00:00
Vault *Vault
}
2016-03-16 03:21:52 +00:00
// TaskArtifact is used to download artifacts before running a task.
type TaskArtifact struct {
GetterSource string
GetterOptions map[string]string
RelativeDest string
2015-09-09 20:02:39 +00:00
}
2016-08-17 04:32:25 +00:00
type Vault struct {
Policies []string
}
2015-09-09 20:02:39 +00:00
// 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.
2016-08-22 16:35:25 +00:00
func (t *Task) SetConfig(key string, val interface{}) *Task {
2015-09-09 20:02:39 +00:00
if t.Config == nil {
2015-11-14 04:51:30 +00:00
t.Config = make(map[string]interface{})
2015-09-09 20:02:39 +00:00
}
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
}
2015-09-10 00:29:43 +00:00
// Constraint adds a new constraints to a single task.
func (t *Task) Constrain(c *Constraint) *Task {
t.Constraints = append(t.Constraints, c)
return t
}
2015-11-12 23:28:22 +00:00
2016-02-10 21:36:47 +00:00
// SetLogConfig sets a log config to a task
func (t *Task) SetLogConfig(l *LogConfig) *Task {
t.LogConfig = l
return t
}
2015-11-12 23:28:22 +00:00
// TaskState tracks the current state of a task and events that caused state
2016-05-15 16:41:34 +00:00
// transitions.
2015-11-12 23:28:22 +00:00
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"
2015-11-12 23:28:22 +00:00
)
// 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
2015-11-12 23:28:22 +00:00
}