added container menu closes #28

This commit is contained in:
Peter Reisinger
2017-11-20 11:09:36 +00:00
parent e1ec264345
commit 436266b1a4
8 changed files with 163 additions and 3 deletions

View File

@@ -8,6 +8,7 @@ import (
"github.com/bcicen/ctop/connector/collector"
"github.com/bcicen/ctop/container"
api "github.com/fsouza/go-dockerclient"
"github.com/bcicen/ctop/connector/manager"
)
type Docker struct {
@@ -132,8 +133,10 @@ func (cm *Docker) MustGet(id string) *container.Container {
if !ok {
// create collector
collector := collector.NewDocker(cm.client, id)
// create manager
manager := manager.NewDocker(cm.client, id)
// create container
c = container.New(id, collector)
c = container.New(id, collector, manager)
cm.lock.Lock()
cm.containers[id] = c
cm.lock.Unlock()

View File

@@ -0,0 +1,44 @@
package manager
import (
api "github.com/fsouza/go-dockerclient"
"fmt"
)
type Docker struct {
id string
client *api.Client
}
func NewDocker(client *api.Client, id string) *Docker {
return &Docker{
id: id,
client: client,
}
}
func (dc *Docker) Start() error {
c, err := dc.client.InspectContainer(dc.id)
if err != nil {
return fmt.Errorf("cannot inspect container: %v", err)
}
if err := dc.client.StartContainer(c.ID, c.HostConfig); err != nil {
return fmt.Errorf("cannot start container: %v", err)
}
return nil
}
func (dc *Docker) Stop() error {
if err := dc.client.StopContainer(dc.id, 3); err != nil {
return fmt.Errorf("cannot stop container: %v", err)
}
return nil
}
func (dc *Docker) Remove() error {
if err := dc.client.RemoveContainer(api.RemoveContainerOptions{ID: dc.id}); err != nil {
return fmt.Errorf("cannot remove container: %v", err)
}
return nil
}

View File

@@ -0,0 +1,7 @@
package manager
type Manager interface {
Start() error
Stop() error
Remove() error
}

19
connector/manager/mock.go Normal file
View File

@@ -0,0 +1,19 @@
package manager
type Mock struct {}
func NewMock() *Mock {
return &Mock{}
}
func (m *Mock) Start() error {
return nil
}
func (m *Mock) Stop() error {
return nil
}
func (m *Mock) Remove() error {
return nil
}

View File

@@ -11,6 +11,7 @@ import (
"github.com/bcicen/ctop/container"
"github.com/jgautheron/codename-generator"
"github.com/nu7hatch/gouuid"
"github.com/bcicen/ctop/connector/manager"
)
type Mock struct {
@@ -40,7 +41,8 @@ func (cs *Mock) Init() {
func (cs *Mock) makeContainer(aggression int64) {
collector := collector.NewMock(aggression)
c := container.New(makeID(), collector)
manager := manager.NewMock()
c := container.New(makeID(), collector, manager)
c.SetMeta("name", makeName())
c.SetState(makeState())
cs.containers = append(cs.containers, c)