github.com/hernad/nomad@v1.6.112/drivers/docker/util/stats_windows.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package util 5 6 import ( 7 "runtime" 8 9 docker "github.com/fsouza/go-dockerclient" 10 cstructs "github.com/hernad/nomad/client/structs" 11 "github.com/hernad/nomad/helper/stats" 12 ) 13 14 var ( 15 // The statistics the Docker driver exposes 16 DockerMeasuredCPUStats = []string{"Throttled Periods", "Throttled Time", "Percent"} 17 DockerMeasuredMemStats = []string{"RSS", "Usage", "Max Usage"} 18 ) 19 20 func DockerStatsToTaskResourceUsage(s *docker.Stats) *cstructs.TaskResourceUsage { 21 ms := &cstructs.MemoryStats{ 22 RSS: s.MemoryStats.PrivateWorkingSet, 23 Usage: s.MemoryStats.Commit, 24 MaxUsage: s.MemoryStats.CommitPeak, 25 Measured: DockerMeasuredMemStats, 26 } 27 28 cpuPercent := 0.0 29 30 // https://github.com/moby/moby/blob/cbb885b07af59225eef12a8159e70d1485616d57/integration-cli/docker_api_stats_test.go#L47-L58 31 // Max number of 100ns intervals between the previous time read and now 32 possIntervals := uint64(s.Read.Sub(s.PreRead).Nanoseconds()) // Start with number of ns intervals 33 possIntervals /= 100 // Convert to number of 100ns intervals 34 possIntervals *= uint64(s.NumProcs) // Multiple by the number of processors 35 36 // Intervals used 37 intervalsUsed := s.CPUStats.CPUUsage.TotalUsage - s.PreCPUStats.CPUUsage.TotalUsage 38 39 // Percentage avoiding divide-by-zero 40 if possIntervals > 0 { 41 cpuPercent = float64(intervalsUsed) / float64(possIntervals) * 100.0 42 } 43 44 cs := &cstructs.CpuStats{ 45 ThrottledPeriods: s.CPUStats.ThrottlingData.ThrottledPeriods, 46 ThrottledTime: s.CPUStats.ThrottlingData.ThrottledTime, 47 Percent: cpuPercent, 48 TotalTicks: (cpuPercent / 100) * float64(stats.CpuTotalTicks()) / float64(runtime.NumCPU()), 49 Measured: DockerMeasuredCPUStats, 50 } 51 52 return &cstructs.TaskResourceUsage{ 53 ResourceUsage: &cstructs.ResourceUsage{ 54 MemoryStats: ms, 55 CpuStats: cs, 56 }, 57 Timestamp: s.Read.UTC().UnixNano(), 58 } 59 }