mirror of https://github.com/k3s-io/k3s
227 lines
5.5 KiB
Go
227 lines
5.5 KiB
Go
// Copyright 2014 Google Inc. All Rights Reserved.
|
|
//
|
|
// Licensed 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 v1
|
|
|
|
type FsInfo struct {
|
|
// Block device associated with the filesystem.
|
|
Device string `json:"device"`
|
|
// DeviceMajor is the major identifier of the device, used for correlation with blkio stats
|
|
DeviceMajor uint64 `json:"-"`
|
|
// DeviceMinor is the minor identifier of the device, used for correlation with blkio stats
|
|
DeviceMinor uint64 `json:"-"`
|
|
|
|
// Total number of bytes available on the filesystem.
|
|
Capacity uint64 `json:"capacity"`
|
|
|
|
// Type of device.
|
|
Type string `json:"type"`
|
|
|
|
// Total number of inodes available on the filesystem.
|
|
Inodes uint64 `json:"inodes"`
|
|
|
|
// HasInodes when true, indicates that Inodes info will be available.
|
|
HasInodes bool `json:"has_inodes"`
|
|
}
|
|
|
|
type Node struct {
|
|
Id int `json:"node_id"`
|
|
// Per-node memory
|
|
Memory uint64 `json:"memory"`
|
|
Cores []Core `json:"cores"`
|
|
Caches []Cache `json:"caches"`
|
|
}
|
|
|
|
type Core struct {
|
|
Id int `json:"core_id"`
|
|
Threads []int `json:"thread_ids"`
|
|
Caches []Cache `json:"caches"`
|
|
}
|
|
|
|
type Cache struct {
|
|
// Size of memory cache in bytes.
|
|
Size uint64 `json:"size"`
|
|
// Type of memory cache: data, instruction, or unified.
|
|
Type string `json:"type"`
|
|
// Level (distance from cpus) in a multi-level cache hierarchy.
|
|
Level int `json:"level"`
|
|
}
|
|
|
|
func (self *Node) FindCore(id int) (bool, int) {
|
|
for i, n := range self.Cores {
|
|
if n.Id == id {
|
|
return true, i
|
|
}
|
|
}
|
|
return false, -1
|
|
}
|
|
|
|
func (self *Node) AddThread(thread int, core int) {
|
|
var coreIdx int
|
|
if core == -1 {
|
|
// Assume one hyperthread per core when topology data is missing.
|
|
core = thread
|
|
}
|
|
ok, coreIdx := self.FindCore(core)
|
|
|
|
if !ok {
|
|
// New core
|
|
core := Core{Id: core}
|
|
self.Cores = append(self.Cores, core)
|
|
coreIdx = len(self.Cores) - 1
|
|
}
|
|
self.Cores[coreIdx].Threads = append(self.Cores[coreIdx].Threads, thread)
|
|
}
|
|
|
|
func (self *Node) AddNodeCache(c Cache) {
|
|
self.Caches = append(self.Caches, c)
|
|
}
|
|
|
|
func (self *Node) AddPerCoreCache(c Cache) {
|
|
for idx := range self.Cores {
|
|
self.Cores[idx].Caches = append(self.Cores[idx].Caches, c)
|
|
}
|
|
}
|
|
|
|
type HugePagesInfo struct {
|
|
// huge page size (in kB)
|
|
PageSize uint64 `json:"page_size"`
|
|
|
|
// number of huge pages
|
|
NumPages uint64 `json:"num_pages"`
|
|
}
|
|
|
|
type DiskInfo struct {
|
|
// device name
|
|
Name string `json:"name"`
|
|
|
|
// Major number
|
|
Major uint64 `json:"major"`
|
|
|
|
// Minor number
|
|
Minor uint64 `json:"minor"`
|
|
|
|
// Size in bytes
|
|
Size uint64 `json:"size"`
|
|
|
|
// I/O Scheduler - one of "none", "noop", "cfq", "deadline"
|
|
Scheduler string `json:"scheduler"`
|
|
}
|
|
|
|
type NetInfo struct {
|
|
// Device name
|
|
Name string `json:"name"`
|
|
|
|
// Mac Address
|
|
MacAddress string `json:"mac_address"`
|
|
|
|
// Speed in MBits/s
|
|
Speed int64 `json:"speed"`
|
|
|
|
// Maximum Transmission Unit
|
|
Mtu int64 `json:"mtu"`
|
|
}
|
|
|
|
type CloudProvider string
|
|
|
|
const (
|
|
GCE CloudProvider = "GCE"
|
|
AWS = "AWS"
|
|
Azure = "Azure"
|
|
Baremetal = "Baremetal"
|
|
UnknownProvider = "Unknown"
|
|
)
|
|
|
|
type InstanceType string
|
|
|
|
const (
|
|
NoInstance InstanceType = "None"
|
|
UnknownInstance = "Unknown"
|
|
)
|
|
|
|
type InstanceID string
|
|
|
|
const (
|
|
UnNamedInstance InstanceID = "None"
|
|
)
|
|
|
|
type MachineInfo struct {
|
|
// The number of cores in this machine.
|
|
NumCores int `json:"num_cores"`
|
|
|
|
// Maximum clock speed for the cores, in KHz.
|
|
CpuFrequency uint64 `json:"cpu_frequency_khz"`
|
|
|
|
// The amount of memory (in bytes) in this machine
|
|
MemoryCapacity uint64 `json:"memory_capacity"`
|
|
|
|
// HugePages on this machine.
|
|
HugePages []HugePagesInfo `json:"hugepages"`
|
|
|
|
// The machine id
|
|
MachineID string `json:"machine_id"`
|
|
|
|
// The system uuid
|
|
SystemUUID string `json:"system_uuid"`
|
|
|
|
// The boot id
|
|
BootID string `json:"boot_id"`
|
|
|
|
// Filesystems on this machine.
|
|
Filesystems []FsInfo `json:"filesystems"`
|
|
|
|
// Disk map
|
|
DiskMap map[string]DiskInfo `json:"disk_map"`
|
|
|
|
// Network devices
|
|
NetworkDevices []NetInfo `json:"network_devices"`
|
|
|
|
// Machine Topology
|
|
// Describes cpu/memory layout and hierarchy.
|
|
Topology []Node `json:"topology"`
|
|
|
|
// Cloud provider the machine belongs to.
|
|
CloudProvider CloudProvider `json:"cloud_provider"`
|
|
|
|
// Type of cloud instance (e.g. GCE standard) the machine is.
|
|
InstanceType InstanceType `json:"instance_type"`
|
|
|
|
// ID of cloud instance (e.g. instance-1) given to it by the cloud provider.
|
|
InstanceID InstanceID `json:"instance_id"`
|
|
}
|
|
|
|
type VersionInfo struct {
|
|
// Kernel version.
|
|
KernelVersion string `json:"kernel_version"`
|
|
|
|
// OS image being used for cadvisor container, or host image if running on host directly.
|
|
ContainerOsVersion string `json:"container_os_version"`
|
|
|
|
// Docker version.
|
|
DockerVersion string `json:"docker_version"`
|
|
|
|
// Docker API Version
|
|
DockerAPIVersion string `json:"docker_api_version"`
|
|
|
|
// cAdvisor version.
|
|
CadvisorVersion string `json:"cadvisor_version"`
|
|
// cAdvisor git revision.
|
|
CadvisorRevision string `json:"cadvisor_revision"`
|
|
}
|
|
|
|
type MachineInfoFactory interface {
|
|
GetMachineInfo() (*MachineInfo, error)
|
|
GetVersionInfo() (*VersionInfo, error)
|
|
}
|