From 9df3ea740e3b00882703936c4695b93613813637 Mon Sep 17 00:00:00 2001 From: Rohit Jnagal Date: Fri, 13 Mar 2015 21:45:03 +0000 Subject: [PATCH] Add /machine endpoint for 2.0 Only difference from v1 /machine is that both h/w and s/w state is included. --- api/versions.go | 31 ++++++++++++++++++ info/v2/machine.go | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 info/v2/machine.go diff --git a/api/versions.go b/api/versions.go index 710e2f4e..89b7c57c 100644 --- a/api/versions.go +++ b/api/versions.go @@ -37,6 +37,8 @@ const ( specApi = "spec" eventsApi = "events" storageApi = "storage" + attributesApi = "attributes" + versionApi = "version" typeName = "name" typeDocker = "docker" ) @@ -309,6 +311,35 @@ func (self *version2_0) SupportedRequestTypes() []string { func (self *version2_0) HandleRequest(requestType string, request []string, m manager.Manager, w http.ResponseWriter, r *http.Request) error { switch requestType { + case versionApi: + glog.V(2).Infof("Api - Version") + versionInfo, err := m.GetVersionInfo() + if err != nil { + return err + } + return writeResult(versionInfo.CadvisorVersion, w) + case attributesApi: + glog.V(2).Info("Api - Attributes") + + machineInfo, err := m.GetMachineInfo() + if err != nil { + return err + } + versionInfo, err := m.GetVersionInfo() + if err != nil { + return err + } + info := v2.GetAttributes(machineInfo, versionInfo) + return writeResult(info, w) + case machineApi: + glog.V(2).Info("Api - Machine") + + // TODO(rjnagal): Move machineInfo from v1. + machineInfo, err := m.GetMachineInfo() + if err != nil { + return err + } + return writeResult(machineInfo, w) case summaryApi: containerName := getContainerName(request) glog.V(2).Infof("Api - Summary(%v)", containerName) diff --git a/info/v2/machine.go b/info/v2/machine.go new file mode 100644 index 00000000..21929793 --- /dev/null +++ b/info/v2/machine.go @@ -0,0 +1,80 @@ +// Copyright 2015 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 v2 + +import ( + // TODO(rjnagal): Move structs from v1. + "github.com/google/cadvisor/info/v1" +) + +type Attributes 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"` + + // cAdvisor version. + CadvisorVersion string `json:"cadvisor_version"` + + // 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 int64 `json:"memory_capacity"` + + // The machine id + MachineID string `json:"machine_id"` + + // The system uuid + SystemUUID string `json:"system_uuid"` + + // Filesystems on this machine. + Filesystems []v1.FsInfo `json:"filesystems"` + + // Disk map + DiskMap map[string]v1.DiskInfo `json:"disk_map"` + + // Network devices + NetworkDevices []v1.NetInfo `json:"network_devices"` + + // Machine Topology + // Describes cpu/memory layout and hierarchy. + Topology []v1.Node `json:"topology"` +} + +func GetAttributes(mi *v1.MachineInfo, vi *v1.VersionInfo) Attributes { + return Attributes{ + KernelVersion: vi.KernelVersion, + ContainerOsVersion: vi.ContainerOsVersion, + DockerVersion: vi.DockerVersion, + CadvisorVersion: vi.CadvisorVersion, + NumCores: mi.NumCores, + CpuFrequency: mi.CpuFrequency, + MemoryCapacity: mi.MemoryCapacity, + MachineID: mi.MachineID, + SystemUUID: mi.SystemUUID, + Filesystems: mi.Filesystems, + DiskMap: mi.DiskMap, + NetworkDevices: mi.NetworkDevices, + Topology: mi.Topology, + } +}