types/process.go (75 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package types import "time" // Process is the main wrapper for gathering information on a process type Process interface { CPUTimer // Info returns process info. // It may return partial information if the provider // implementation is unable to collect all the necessary data. Info() (ProcessInfo, error) Memory() (MemoryInfo, error) User() (UserInfo, error) Parent() (Process, error) PID() int } // ProcessInfo contains basic stats about a process type ProcessInfo struct { Name string `json:"name"` PID int `json:"pid"` PPID int `json:"ppid"` CWD string `json:"cwd"` Exe string `json:"exe"` Args []string `json:"args"` StartTime time.Time `json:"start_time"` } // UserInfo contains information about the UID and GID // values of a process. type UserInfo struct { // UID is the user ID. // On Linux and Darwin (macOS) this is the real user ID. // On Windows, this is the security identifier (SID) of the // user account of the process access token. UID string `json:"uid"` // On Linux and Darwin (macOS) this is the effective user ID. // On Windows, this is empty. EUID string `json:"euid"` // On Linux and Darwin (macOS) this is the saved user ID. // On Windows, this is empty. SUID string `json:"suid"` // GID is the primary group ID. // On Linux and Darwin (macOS) this is the real group ID. // On Windows, this is the security identifier (SID) of the // primary group of the process access token. GID string `json:"gid"` // On Linux and Darwin (macOS) this is the effective group ID. // On Windows, this is empty. EGID string `json:"egid"` // On Linux and Darwin (macOS) this is the saved group ID. // On Windows, this is empty. SGID string `json:"sgid"` } // Environment is the interface that wraps the Environment method. // Environment returns variables for a process type Environment interface { Environment() (map[string]string, error) } // OpenHandleEnumerator is the interface that wraps the OpenHandles method. // OpenHandles lists the open file handles. type OpenHandleEnumerator interface { OpenHandles() ([]string, error) } // OpenHandleCounter is the interface that wraps the OpenHandleCount method. // OpenHandleCount returns the number of open file handles. type OpenHandleCounter interface { OpenHandleCount() (int, error) } // CPUTimer is the interface that wraps the CPUTime method. // CPUTime returns CPU time info type CPUTimer interface { // CPUTime returns a CPUTimes structure for // the host or some process. // // The User and System fields are guaranteed // to be populated for all platforms, and // for both hosts and processes. // This may return types.ErrNotImplemented // if the provider cannot implement collection of this data. CPUTime() (CPUTimes, error) } // CPUTimes contains CPU timing stats for a process type CPUTimes struct { User time.Duration `json:"user"` System time.Duration `json:"system"` Idle time.Duration `json:"idle,omitempty"` IOWait time.Duration `json:"iowait,omitempty"` IRQ time.Duration `json:"irq,omitempty"` Nice time.Duration `json:"nice,omitempty"` SoftIRQ time.Duration `json:"soft_irq,omitempty"` Steal time.Duration `json:"steal,omitempty"` } // Total returns the total CPU time func (cpu CPUTimes) Total() time.Duration { return cpu.User + cpu.System + cpu.Idle + cpu.IOWait + cpu.IRQ + cpu.Nice + cpu.SoftIRQ + cpu.Steal } // MemoryInfo contains memory stats for a process type MemoryInfo struct { Resident uint64 `json:"resident_bytes"` Virtual uint64 `json:"virtual_bytes"` Metrics map[string]uint64 `json:"raw,omitempty"` // Other memory related metrics. } // SeccompInfo contains seccomp info for a process type SeccompInfo struct { Mode string `json:"mode"` NoNewPrivs *bool `json:"no_new_privs,omitempty"` // Added in kernel 4.10. } // CapabilityInfo contains capability set info. type CapabilityInfo struct { Inheritable []string `json:"inheritable"` Permitted []string `json:"permitted"` Effective []string `json:"effective"` Bounding []string `json:"bounding"` Ambient []string `json:"ambient"` } // Capabilities is the interface that wraps the Capabilities method. // Capabilities returns capabilities for a process type Capabilities interface { Capabilities() (*CapabilityInfo, error) } // Seccomp is the interface that wraps the Seccomp method. // Seccomp returns seccomp info on Linux type Seccomp interface { Seccomp() (*SeccompInfo, error) }