Adding cAdvisor API to get image usage information.

This commit is contained in:
Victor Marmol 2015-03-15 18:40:34 -07:00
parent 879a39bcc4
commit 303a1f7ea1
5 changed files with 38 additions and 0 deletions

View File

@ -18,6 +18,7 @@ package cadvisor
import (
cadvisorApi "github.com/google/cadvisor/info/v1"
cadvisorApi2 "github.com/google/cadvisor/info/v2"
)
// Fake cAdvisor implementation.
@ -37,3 +38,7 @@ func (c *Fake) DockerContainer(name string, req *cadvisorApi.ContainerInfoReques
func (c *Fake) MachineInfo() (*cadvisorApi.MachineInfo, error) {
return new(cadvisorApi.MachineInfo), nil
}
func (c *Fake) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) {
return cadvisorApi2.FsInfo{}, nil
}

View File

@ -25,8 +25,10 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/golang/glog"
cadvisorFs "github.com/google/cadvisor/fs"
cadvisorHttp "github.com/google/cadvisor/http"
cadvisorApi "github.com/google/cadvisor/info/v1"
cadvisorApi2 "github.com/google/cadvisor/info/v2"
"github.com/google/cadvisor/manager"
"github.com/google/cadvisor/storage/memory"
"github.com/google/cadvisor/utils/sysfs"
@ -110,3 +112,19 @@ func (self *cadvisorClient) ContainerInfo(name string, req *cadvisorApi.Containe
func (self *cadvisorClient) MachineInfo() (*cadvisorApi.MachineInfo, error) {
return self.GetMachineInfo()
}
func (self *cadvisorClient) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) {
res, err := self.GetFsInfo(cadvisorFs.LabelDockerImages)
if err != nil {
return cadvisorApi2.FsInfo{}, err
}
if len(res) == 0 {
return cadvisorApi2.FsInfo{}, fmt.Errorf("failed to find information for the filesystem containing Docker images")
}
// TODO(vmarmol): Handle this better when Docker has more than one image filesystem.
if len(res) > 1 {
glog.Warningf("More than one Docker images filesystem: %#v. Only using the first one", res)
}
return res[0], nil
}

View File

@ -18,6 +18,7 @@ package cadvisor
import (
cadvisorApi "github.com/google/cadvisor/info/v1"
cadvisorApi2 "github.com/google/cadvisor/info/v2"
"github.com/stretchr/testify/mock"
)
@ -44,3 +45,8 @@ func (c *Mock) MachineInfo() (*cadvisorApi.MachineInfo, error) {
args := c.Called()
return args.Get(0).(*cadvisorApi.MachineInfo), args.Error(1)
}
func (c *Mock) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) {
args := c.Called()
return args.Get(0).(cadvisorApi2.FsInfo), args.Error(1)
}

View File

@ -22,6 +22,7 @@ import (
"errors"
cadvisorApi "github.com/google/cadvisor/info/v1"
cadvisorApi2 "github.com/google/cadvisor/info/v2"
)
type cadvisorUnsupported struct {
@ -46,3 +47,7 @@ func (self *cadvisorUnsupported) ContainerInfo(name string, req *cadvisorApi.Con
func (self *cadvisorUnsupported) MachineInfo() (*cadvisorApi.MachineInfo, error) {
return nil, unsupportedErr
}
func (self *cadvisorUnsupported) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) {
return cadvisorApi2.FsInfo{}, unsupportedErr
}

View File

@ -18,6 +18,7 @@ package cadvisor
import (
cadvisorApi "github.com/google/cadvisor/info/v1"
cadvisorApi2 "github.com/google/cadvisor/info/v2"
)
// Interface is an abstract interface for testability. It abstracts the interface to cAdvisor.
@ -25,4 +26,7 @@ type Interface interface {
DockerContainer(name string, req *cadvisorApi.ContainerInfoRequest) (cadvisorApi.ContainerInfo, error)
ContainerInfo(name string, req *cadvisorApi.ContainerInfoRequest) (*cadvisorApi.ContainerInfo, error)
MachineInfo() (*cadvisorApi.MachineInfo, error)
// Returns usage information about the filesystem holding Docker images.
DockerImagesFsInfo() (cadvisorApi2.FsInfo, error)
}