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. // Interface for container operation handlers.
type ContainerHandler interface { type ContainerHandler interface {
ContainerReference() (info.ContainerReference, error)
GetSpec() (*info.ContainerSpec, error) GetSpec() (*info.ContainerSpec, error)
GetStats() (*info.ContainerStats, error) GetStats() (*info.ContainerStats, error)
ListContainers(listType ListType) ([]info.ContainerReference, 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 { if err != nil {
return return
} }
handler = &dockerContainerHandler{ handler, err = newDockerContainerHandler(
client: client, client,
name: name, name,
machineInfoFactory: self.machineInfoFactory, self.machineInfoFactory,
} )
return return
} }

View File

@ -35,10 +35,43 @@ import (
type dockerContainerHandler struct { type dockerContainerHandler struct {
client *docker.Client client *docker.Client
name string name string
aliases []string
machineInfoFactory info.MachineInfoFactory machineInfoFactory info.MachineInfoFactory
container.NoStatsSummary 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) { func (self *dockerContainerHandler) splitName() (string, string, error) {
parent, id := path.Split(self.name) parent, id := path.Split(self.name)
cgroupSelf, err := os.Open("/proc/self/cgroup") cgroupSelf, err := os.Open("/proc/self/cgroup")

View File

@ -26,6 +26,10 @@ type containerListFilter struct {
NoStatsSummary NoStatsSummary
} }
func (self *containerListFilter) ContainerReference() (info.ContainerReference, error) {
return self.handler.ContainerReference()
}
func (self *containerListFilter) GetSpec() (*info.ContainerSpec, error) { func (self *containerListFilter) GetSpec() (*info.ContainerSpec, error) {
return self.handler.GetSpec() 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) 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) { func (self *mockContainerHandler) GetStats() (*info.ContainerStats, error) {
args := self.Called() args := self.Called()
return args.Get(0).(*info.ContainerStats), args.Error(1) 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 return el, nil
} }
func (self *lmctfyContainerHandler) ContainerReference() (info.ContainerReference, error) {
return info.ContainerReference{Name: self.Name}, nil
}
func getExitCode(err error) int { func getExitCode(err error) int {
msg, ok := err.(*exec.ExitError) msg, ok := err.(*exec.ExitError)
if ok { if ok {

View File

@ -36,6 +36,10 @@ func (self *percentilesContainerHandlerWrapper) GetSpec() (*info.ContainerSpec,
return self.handler.GetSpec() return self.handler.GetSpec()
} }
func (self *percentilesContainerHandlerWrapper) ContainerReference() (info.ContainerReference, error) {
return self.handler.ContainerReference()
}
func (self *percentilesContainerHandlerWrapper) updatePrevStats(stats *info.ContainerStats) { func (self *percentilesContainerHandlerWrapper) updatePrevStats(stats *info.ContainerStats) {
if stats == nil || stats.Cpu == nil || stats.Memory == nil { if stats == nil || stats.Cpu == nil || stats.Memory == nil {
// discard incomplete stats // 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) { func (self *replayTrace) GetStats() (*info.ContainerStats, error) {
stats := new(info.ContainerStats) stats := new(info.ContainerStats)
stats.Cpu = new(info.CpuStats) stats.Cpu = new(info.CpuStats)