mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 13:50:01 +00:00 
			
		
		
		
	godep restore pushd $GOPATH/src/github.com/appc/spec git co master popd go get go4.org/errorutil rm -rf Godeps godep save ./... git add vendor git add -f $(git ls-files --other vendor/) git co -- Godeps/LICENSES Godeps/.license_file_state Godeps/OWNERS
		
			
				
	
	
		
			142 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) 2013 Phillip Bond
 | |
| // Licensed under the MIT License
 | |
| // see file LICENSE
 | |
| 
 | |
| package systemstat
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // CPUSample is an object that represents the breakdown of time spent by the
 | |
| // CPU in various types of tasks. Two CPUSamples are required to find the
 | |
| // average usage over time, represented by the CPUAverage object. The CPUSample
 | |
| // is taken from the line "cpu" from /proc/stat in the Linux kernel.
 | |
| //
 | |
| // Summarized from the proc(5) man page:
 | |
| // /proc/stat :
 | |
| //        kernel/system  statistics.   Varies  with  architecture.
 | |
| type CPUSample struct {
 | |
| 	User    uint64    // time spent in user mode
 | |
| 	Nice    uint64    // time spent in user mode with low priority (nice)
 | |
| 	System  uint64    // time spent in system mode
 | |
| 	Idle    uint64    // time spent in the idle task
 | |
| 	Iowait  uint64    // time spent waiting for I/O to complete (since Linux 2.5.41)
 | |
| 	Irq     uint64    // time spent servicing  interrupts  (since  2.6.0-test4)
 | |
| 	SoftIrq uint64    // time spent servicing softirqs (since 2.6.0-test4)
 | |
| 	Steal   uint64    // time spent in other OSes when running in a virtualized environment
 | |
| 	Guest   uint64    // time spent running a virtual CPU for guest operating systems under the control of the Linux kernel.
 | |
| 	Name    string    // name of the line in /proc/stat; cpu, cpu1, etc
 | |
| 	Time    time.Time // when the sample was taken
 | |
| 	Total   uint64    // total of all time fields
 | |
| }
 | |
| 
 | |
| type ProcCPUSample struct {
 | |
| 	User         float64   // time spent in user mode
 | |
| 	System       float64   // time spent in system mode
 | |
| 	Time         time.Time // when the sample was taken
 | |
| 	Total        float64   // total of all time fields
 | |
| 	ProcMemUsedK int64
 | |
| }
 | |
| 
 | |
| type ProcCPUAverage struct {
 | |
| 	UserPct            float64   // time spent in user mode
 | |
| 	SystemPct          float64   // time spent in system mode
 | |
| 	TotalPct           float64   // total of all time fields
 | |
| 	PossiblePct        float64   // total of all time fields
 | |
| 	CumulativeTotalPct float64   // total of all time throughout process life
 | |
| 	Time               time.Time // when the sample was taken
 | |
| 	Seconds            float64   // how many seconds between the two samples
 | |
| }
 | |
| 
 | |
| // SimpleCPUAverage is an object that represents the average cpu usage over a
 | |
| // time period. It is calculated by taking the difference between two
 | |
| // CPUSamples (whose units are clock ticks), dividing by the number of elapsed
 | |
| // ticks between the samples, and converting to a percent. It is a simplified version of the CPUAverage in that it only accounts for time in the Idle task and all other time (Busy).
 | |
| type SimpleCPUAverage struct {
 | |
| 	BusyPct float64 // percent of time spent by CPU performing all non-idle tasks
 | |
| 	IdlePct float64 // percent of time spent by CPU in the idle task
 | |
| }
 | |
| 
 | |
| // CPUAverage is an object that represents the average cpu usage over a
 | |
| // time period. It is calculated by taking the difference between two
 | |
| // CPUSamples (whose units are clock ticks), dividing by the number of elapsed
 | |
| // ticks between the samples, and converting to a percent.
 | |
| type CPUAverage struct {
 | |
| 	UserPct    float64
 | |
| 	NicePct    float64
 | |
| 	SystemPct  float64
 | |
| 	IdlePct    float64
 | |
| 	IowaitPct  float64
 | |
| 	IrqPct     float64
 | |
| 	SoftIrqPct float64
 | |
| 	StealPct   float64
 | |
| 	GuestPct   float64
 | |
| 	Time       time.Time
 | |
| 	Seconds    float64 // how many seconds between the two samples
 | |
| }
 | |
| 
 | |
| type MemSample struct {
 | |
| 	Buffers   uint64
 | |
| 	Cached    uint64
 | |
| 	MemTotal  uint64
 | |
| 	MemUsed   uint64
 | |
| 	MemFree   uint64
 | |
| 	SwapTotal uint64
 | |
| 	SwapUsed  uint64
 | |
| 	SwapFree  uint64
 | |
| 	Time      time.Time
 | |
| }
 | |
| 
 | |
| type LoadAvgSample struct {
 | |
| 	One     float64
 | |
| 	Five    float64
 | |
| 	Fifteen float64
 | |
| 	Time    time.Time
 | |
| }
 | |
| 
 | |
| type UptimeSample struct {
 | |
| 	Uptime float64
 | |
| 	Time   time.Time
 | |
| }
 | |
| 
 | |
| // GetCPUAverage returns the average cpu usage between two CPUSamples.
 | |
| func GetCPUAverage(first CPUSample, second CPUSample) CPUAverage {
 | |
| 	return getCPUAverage(first, second)
 | |
| }
 | |
| 
 | |
| // GetSimpleCPUAverage returns an aggregated average cpu usage between two CPUSamples.
 | |
| func GetSimpleCPUAverage(first CPUSample, second CPUSample) SimpleCPUAverage {
 | |
| 	return getSimpleCPUAverage(first, second)
 | |
| }
 | |
| 
 | |
| // GetProcCPUAverage returns the average cpu usage of this running process
 | |
| func GetProcCPUAverage(first ProcCPUSample, second ProcCPUSample, procUptime float64) (avg ProcCPUAverage) {
 | |
| 	return getProcCPUAverage(first, second, procUptime)
 | |
| }
 | |
| 
 | |
| // GetCPUSample takes a snapshot of kernel statistics from the /proc/stat file.
 | |
| func GetCPUSample() (samp CPUSample) {
 | |
| 	return getCPUSample("/proc/stat")
 | |
| }
 | |
| 
 | |
| // GetProcCPUSample takes a snapshot of kernel statistics from the /proc/stat file.
 | |
| func GetProcCPUSample() (samp ProcCPUSample) {
 | |
| 	return getProcCPUSample()
 | |
| }
 | |
| 
 | |
| // GetUptime takes a snapshot of load info from the /proc/loadavg file.
 | |
| func GetUptime() (samp UptimeSample) {
 | |
| 	return getUptime("/proc/uptime")
 | |
| }
 | |
| 
 | |
| // GetLoadAvgSample takes a snapshot of load info from the /proc/loadavg file.
 | |
| func GetLoadAvgSample() (samp LoadAvgSample) {
 | |
| 	return getLoadAvgSample("/proc/loadavg")
 | |
| }
 | |
| 
 | |
| // GetMemSample takes a snapshot of memory info from the /proc/meminfo file.
 | |
| func GetMemSample() (samp MemSample) {
 | |
| 	return getMemSample("/proc/meminfo")
 | |
| }
 |