// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file). // All rights reserved. Use of this source code is governed by an MIT-style // license that can be found in the LICENSE file. //+build !windows,!solaris package main import ( "syscall" "time" ) func init() { go trackCPUUsage() } func trackCPUUsage() { var prevUsage int64 var prevTime = time.Now().UnixNano() var rusage syscall.Rusage for _ = range time.NewTicker(time.Second).C { syscall.Getrusage(syscall.RUSAGE_SELF, &rusage) curTime := time.Now().UnixNano() timeDiff := curTime - prevTime curUsage := rusage.Utime.Nano() + rusage.Stime.Nano() usageDiff := curUsage - prevUsage cpuUsageLock.Lock() copy(cpuUsagePercent[1:], cpuUsagePercent[0:]) cpuUsagePercent[0] = 100 * float64(usageDiff) / float64(timeDiff) cpuUsageLock.Unlock() prevTime = curTime prevUsage = curUsage } }