package processtime import ( "fmt" "time" "github.com/go-logr/logr" "github.com/shirou/gopsutil/process" ) type ProcessTime struct { log logr.Logger } func NewProcessTime(log logr.Logger) *ProcessTime { return &ProcessTime{ log.WithName("processtime"), } } func (p ProcessTime) UpTime(processName string) (int, error) { processes, err := process.Processes() if err != nil { return 0, err } for _, process := range processes { name, err := process.Name() if err != nil || name != processName { continue } createTimeMilli, err := process.CreateTime() if err != nil { p.log.Info(processName + ": " + err.Error()) continue } createTime := time.UnixMilli(createTimeMilli) upTime := int(time.Since(createTime).Seconds()) return upTime, nil } return 0, fmt.Errorf("Couldn't get uptime for %s", processName) }