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.
|
// 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)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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")
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user