...
1 package processtime
2
3 import (
4 "fmt"
5 "time"
6
7 "github.com/go-logr/logr"
8 "github.com/shirou/gopsutil/process"
9 )
10
11 type ProcessTime struct {
12 log logr.Logger
13 }
14
15 func NewProcessTime(log logr.Logger) *ProcessTime {
16 return &ProcessTime{
17 log.WithName("processtime"),
18 }
19 }
20
21 func (p ProcessTime) UpTime(processName string) (int, error) {
22 processes, err := process.Processes()
23 if err != nil {
24 return 0, err
25 }
26
27 for _, process := range processes {
28 name, err := process.Name()
29 if err != nil || name != processName {
30 continue
31 }
32
33 createTimeMilli, err := process.CreateTime()
34 if err != nil {
35 p.log.Info(processName + ": " + err.Error())
36 continue
37 }
38
39 createTime := time.UnixMilli(createTimeMilli)
40 upTime := int(time.Since(createTime).Seconds())
41 return upTime, nil
42 }
43
44 return 0, fmt.Errorf("Couldn't get uptime for %s", processName)
45 }
46
View as plain text