github.com/diptanu/nomad@v0.5.7-0.20170516172507-d72e86cbe3d9/client/structs/structs.go (about)

     1  package structs
     2  
     3  // MemoryStats holds memory usage related stats
     4  type MemoryStats struct {
     5  	RSS            uint64
     6  	Cache          uint64
     7  	Swap           uint64
     8  	MaxUsage       uint64
     9  	KernelUsage    uint64
    10  	KernelMaxUsage uint64
    11  
    12  	// A list of fields whose values were actually sampled
    13  	Measured []string
    14  }
    15  
    16  func (ms *MemoryStats) Add(other *MemoryStats) {
    17  	ms.RSS += other.RSS
    18  	ms.Cache += other.Cache
    19  	ms.Swap += other.Swap
    20  	ms.MaxUsage += other.MaxUsage
    21  	ms.KernelUsage += other.KernelUsage
    22  	ms.KernelMaxUsage += other.KernelMaxUsage
    23  	ms.Measured = joinStringSet(ms.Measured, other.Measured)
    24  }
    25  
    26  // CpuStats holds cpu usage related stats
    27  type CpuStats struct {
    28  	SystemMode       float64
    29  	UserMode         float64
    30  	TotalTicks       float64
    31  	ThrottledPeriods uint64
    32  	ThrottledTime    uint64
    33  	Percent          float64
    34  
    35  	// A list of fields whose values were actually sampled
    36  	Measured []string
    37  }
    38  
    39  func (cs *CpuStats) Add(other *CpuStats) {
    40  	cs.SystemMode += other.SystemMode
    41  	cs.UserMode += other.UserMode
    42  	cs.TotalTicks += other.TotalTicks
    43  	cs.ThrottledPeriods += other.ThrottledPeriods
    44  	cs.ThrottledTime += other.ThrottledTime
    45  	cs.Percent += other.Percent
    46  	cs.Measured = joinStringSet(cs.Measured, other.Measured)
    47  }
    48  
    49  // ResourceUsage holds information related to cpu and memory stats
    50  type ResourceUsage struct {
    51  	MemoryStats *MemoryStats
    52  	CpuStats    *CpuStats
    53  }
    54  
    55  func (ru *ResourceUsage) Add(other *ResourceUsage) {
    56  	ru.MemoryStats.Add(other.MemoryStats)
    57  	ru.CpuStats.Add(other.CpuStats)
    58  }
    59  
    60  // TaskResourceUsage holds aggregated resource usage of all processes in a Task
    61  // and the resource usage of the individual pids
    62  type TaskResourceUsage struct {
    63  	ResourceUsage *ResourceUsage
    64  	Timestamp     int64
    65  	Pids          map[string]*ResourceUsage
    66  }
    67  
    68  // AllocResourceUsage holds the aggregated task resource usage of the
    69  // allocation.
    70  type AllocResourceUsage struct {
    71  	// ResourceUsage is the summation of the task resources
    72  	ResourceUsage *ResourceUsage
    73  
    74  	// Tasks contains the resource usage of each task
    75  	Tasks map[string]*TaskResourceUsage
    76  
    77  	// The max timestamp of all the Tasks
    78  	Timestamp int64
    79  }
    80  
    81  // joinStringSet takes two slices of strings and joins them
    82  func joinStringSet(s1, s2 []string) []string {
    83  	lookup := make(map[string]struct{}, len(s1))
    84  	j := make([]string, 0, len(s1))
    85  	for _, s := range s1 {
    86  		j = append(j, s)
    87  		lookup[s] = struct{}{}
    88  	}
    89  
    90  	for _, s := range s2 {
    91  		if _, ok := lookup[s]; !ok {
    92  			j = append(j, s)
    93  		}
    94  	}
    95  
    96  	return j
    97  }
    98  
    99  // FSIsolation is an enumeration to describe what kind of filesystem isolation
   100  // a driver supports.
   101  type FSIsolation int
   102  
   103  const (
   104  	// FSIsolationNone means no isolation. The host filesystem is used.
   105  	FSIsolationNone FSIsolation = 0
   106  
   107  	// FSIsolationChroot means the driver will use a chroot on the host
   108  	// filesystem.
   109  	FSIsolationChroot FSIsolation = 1
   110  
   111  	// FSIsolationImage means the driver uses an image.
   112  	FSIsolationImage FSIsolation = 2
   113  )
   114  
   115  func (f FSIsolation) String() string {
   116  	switch f {
   117  	case 0:
   118  		return "none"
   119  	case 1:
   120  		return "chroot"
   121  	case 2:
   122  		return "image"
   123  	default:
   124  		return "INVALID"
   125  	}
   126  }