Merge pull request #45 from monnand/db-framework
Add ContainerReference() to ContainerHandler().
This commit is contained in:
commit
16611eb4a0
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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")
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user