Merge pull request #45 from monnand/db-framework

Add ContainerReference() to ContainerHandler().
This commit is contained in:
Victor Marmol 2014-06-13 15:34:16 -07:00
commit 16611eb4a0
8 changed files with 62 additions and 5 deletions

View File

@ -30,6 +30,7 @@ type ListType int
// Interface for container operation handlers.
type ContainerHandler interface {
ContainerReference() (info.ContainerReference, error)
GetSpec() (*info.ContainerSpec, error)
GetStats() (*info.ContainerStats, error)
ListContainers(listType ListType) ([]info.ContainerReference, error)

View File

@ -40,11 +40,11 @@ func (self *dockerFactory) NewContainerHandler(name string) (handler container.C
if err != nil {
return
}
handler = &dockerContainerHandler{
client: client,
name: name,
machineInfoFactory: self.machineInfoFactory,
}
handler, err = newDockerContainerHandler(
client,
name,
self.machineInfoFactory,
)
return
}

View File

@ -35,10 +35,43 @@ import (
type dockerContainerHandler struct {
client *docker.Client
name string
aliases []string
machineInfoFactory info.MachineInfoFactory
container.NoStatsSummary
}
func newDockerContainerHandler(
client *docker.Client,
name string,
machineInfoFactory info.MachineInfoFactory,
) (container.ContainerHandler, error) {
handler := &dockerContainerHandler{
client: client,
name: name,
machineInfoFactory: machineInfoFactory,
}
if !handler.isDockerContainer() {
return handler, nil
}
_, id, err := handler.splitName()
if err != nil {
return nil, fmt.Errorf("invalid docker container %v: %v", name, err)
}
ctnr, err := client.InspectContainer(id)
if err != nil {
return nil, fmt.Errorf("unable to inspect container %v: %v", name, err)
}
handler.aliases = append(handler.aliases, ctnr.Name)
return handler, nil
}
func (self *dockerContainerHandler) ContainerReference() (info.ContainerReference, error) {
return info.ContainerReference{
Name: self.name,
Aliases: self.aliases,
}, nil
}
func (self *dockerContainerHandler) splitName() (string, string, error) {
parent, id := path.Split(self.name)
cgroupSelf, err := os.Open("/proc/self/cgroup")

View File

@ -26,6 +26,10 @@ type containerListFilter struct {
NoStatsSummary
}
func (self *containerListFilter) ContainerReference() (info.ContainerReference, error) {
return self.handler.ContainerReference()
}
func (self *containerListFilter) GetSpec() (*info.ContainerSpec, error) {
return self.handler.GetSpec()
}

View File

@ -32,6 +32,11 @@ func (self *mockContainerHandler) GetSpec() (*info.ContainerSpec, error) {
return args.Get(0).(*info.ContainerSpec), args.Error(1)
}
func (self *mockContainerHandler) ContainerReference() (info.ContainerReference, error) {
args := self.Called()
return args.Get(0).(info.ContainerReference), args.Error(1)
}
func (self *mockContainerHandler) GetStats() (*info.ContainerStats, error) {
args := self.Called()
return args.Get(0).(*info.ContainerStats), args.Error(1)

View File

@ -47,6 +47,10 @@ func New(name string) (container.ContainerHandler, error) {
return el, nil
}
func (self *lmctfyContainerHandler) ContainerReference() (info.ContainerReference, error) {
return info.ContainerReference{Name: self.Name}, nil
}
func getExitCode(err error) int {
msg, ok := err.(*exec.ExitError)
if ok {

View File

@ -36,6 +36,10 @@ func (self *percentilesContainerHandlerWrapper) GetSpec() (*info.ContainerSpec,
return self.handler.GetSpec()
}
func (self *percentilesContainerHandlerWrapper) ContainerReference() (info.ContainerReference, error) {
return self.handler.ContainerReference()
}
func (self *percentilesContainerHandlerWrapper) updatePrevStats(stats *info.ContainerStats) {
if stats == nil || stats.Cpu == nil || stats.Memory == nil {
// discard incomplete stats

View File

@ -94,6 +94,12 @@ func containerWithTrace(duration time.Duration, cpuUsages []uint64, memUsages []
}
}
func (self *replayTrace) ContainerReference() (info.ContainerReference, error) {
return info.ContainerReference{
Name: "replay",
}, nil
}
func (self *replayTrace) GetStats() (*info.ContainerStats, error) {
stats := new(info.ContainerStats)
stats.Cpu = new(info.CpuStats)