diff --git a/README.md b/README.md index 531ed52..93dfecd 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ Option | Description `-s` | select initial container sort field `-scale-cpu` | show cpu as % of system total `-v` | output version information and exit -`-shell` | specify shell (default: sh) +`-shell` | exec shell to use (default: sh) ### Keybindings diff --git a/config/file.go b/config/file.go index 2fff0ab..77f33e9 100644 --- a/config/file.go +++ b/config/file.go @@ -90,6 +90,13 @@ func Write() (path string, err error) { } } + // remove prior to writing new file + if err := os.Remove(path); err != nil { + if !os.IsNotExist(err) { + return path, err + } + } + file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0644) if err != nil { return path, fmt.Errorf("failed to open config for writing: %s", err) diff --git a/connector/manager/main.go b/connector/manager/main.go index f65aad3..1fcae1d 100644 --- a/connector/manager/main.go +++ b/connector/manager/main.go @@ -1,5 +1,9 @@ package manager +import "errors" + +var ActionNotImplErr = errors.New("action not implemented") + type Manager interface { Start() error Stop() error diff --git a/connector/manager/mock.go b/connector/manager/mock.go index f6fd62f..0438f86 100644 --- a/connector/manager/mock.go +++ b/connector/manager/mock.go @@ -7,29 +7,29 @@ func NewMock() *Mock { } func (m *Mock) Start() error { - return nil + return ActionNotImplErr } func (m *Mock) Stop() error { - return nil + return ActionNotImplErr } func (m *Mock) Remove() error { - return nil + return ActionNotImplErr } func (m *Mock) Pause() error { - return nil + return ActionNotImplErr } func (m *Mock) Unpause() error { - return nil + return ActionNotImplErr } func (m *Mock) Restart() error { - return nil + return ActionNotImplErr } func (m *Mock) Exec(cmd []string) error { - return nil + return ActionNotImplErr } diff --git a/connector/manager/runc.go b/connector/manager/runc.go index 07a4b58..c4dd277 100644 --- a/connector/manager/runc.go +++ b/connector/manager/runc.go @@ -7,29 +7,29 @@ func NewRunc() *Runc { } func (rc *Runc) Start() error { - return nil + return ActionNotImplErr } func (rc *Runc) Stop() error { - return nil + return ActionNotImplErr } func (rc *Runc) Remove() error { - return nil + return ActionNotImplErr } func (rc *Runc) Pause() error { - return nil + return ActionNotImplErr } func (rc *Runc) Unpause() error { - return nil + return ActionNotImplErr } func (rc *Runc) Restart() error { - return nil + return ActionNotImplErr } func (rc *Runc) Exec(cmd []string) error { - return nil + return ActionNotImplErr } diff --git a/connector/mock.go b/connector/mock.go index d96496b..3478851 100644 --- a/connector/mock.go +++ b/connector/mock.go @@ -32,11 +32,11 @@ func (cs *Mock) Init() { rand.Seed(int64(time.Now().Nanosecond())) for i := 0; i < 4; i++ { - cs.makeContainer(3) + cs.makeContainer(3, true) } for i := 0; i < 16; i++ { - cs.makeContainer(1) + cs.makeContainer(1, false) } } @@ -50,12 +50,28 @@ func (cs *Mock) Wait() struct{} { return <-ch } -func (cs *Mock) makeContainer(aggression int64) { +var healthStates = []string{"starting", "healthy", "unhealthy"} + +func (cs *Mock) makeContainer(aggression int64, health bool) { collector := collector.NewMock(aggression) manager := manager.NewMock() c := container.New(makeID(), collector, manager) c.SetMeta("name", makeName()) c.SetState(makeState()) + if health { + var i int + c.SetMeta("health", healthStates[i]) + go func() { + for { + i++ + if i >= len(healthStates) { + i = 0 + } + c.SetMeta("health", healthStates[i]) + time.Sleep(12 * time.Second) + } + }() + } cs.containers = append(cs.containers, c) } diff --git a/main.go b/main.go index cd6a184..ea1ea7c 100644 --- a/main.go +++ b/main.go @@ -46,7 +46,7 @@ func main() { invertFlag = flag.Bool("i", false, "invert default colors") scaleCpu = flag.Bool("scale-cpu", false, "show cpu as % of system total") connectorFlag = flag.String("connector", "docker", "container connector to use") - defaultShell = flag.String("shell", "", "default shell") + defaultShell = flag.String("shell", "sh", "exec shell to use") ) flag.Parse() @@ -65,7 +65,9 @@ func main() { // init global config and read config file if exists config.Init() - config.Read() + if err := config.Read(); err != nil { + log.Warningf("reading config: %s", err) + } // override default config values with command line flags if *filterFlag != "" {