github.com/newrelic/go-agent@v3.26.0+incompatible/internal/sysinfo/usage_windows.go (about)

     1  // Copyright 2020 New Relic Corporation. All rights reserved.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package sysinfo
     5  
     6  import (
     7  	"syscall"
     8  	"time"
     9  )
    10  
    11  func filetimeToDuration(ft *syscall.Filetime) time.Duration {
    12  	ns := ft.Nanoseconds()
    13  	return time.Duration(ns)
    14  }
    15  
    16  // GetUsage gathers process times.
    17  func GetUsage() (Usage, error) {
    18  	var creationTime syscall.Filetime
    19  	var exitTime syscall.Filetime
    20  	var kernelTime syscall.Filetime
    21  	var userTime syscall.Filetime
    22  
    23  	handle, err := syscall.GetCurrentProcess()
    24  	if err != nil {
    25  		return Usage{}, err
    26  	}
    27  
    28  	err = syscall.GetProcessTimes(handle, &creationTime, &exitTime, &kernelTime, &userTime)
    29  	if err != nil {
    30  		return Usage{}, err
    31  	}
    32  
    33  	return Usage{
    34  		System: filetimeToDuration(&kernelTime),
    35  		User:   filetimeToDuration(&userTime),
    36  	}, nil
    37  }