...

Source file src/edge-infra.dev/pkg/sds/lib/process/processtime/processtime.go

Documentation: edge-infra.dev/pkg/sds/lib/process/processtime

     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