diff --git a/connector/collector/proc.go b/connector/collector/proc.go index ce6aee5..96dcad0 100644 --- a/connector/collector/proc.go +++ b/connector/collector/proc.go @@ -1,3 +1,5 @@ +// +build !darwin + package collector import ( diff --git a/connector/collector/runc.go b/connector/collector/runc.go index b12d325..c167495 100644 --- a/connector/collector/runc.go +++ b/connector/collector/runc.go @@ -1,3 +1,5 @@ +// +build !darwin + package collector import ( diff --git a/connector/docker.go b/connector/docker.go index 3e7e5a4..2aec177 100644 --- a/connector/docker.go +++ b/connector/docker.go @@ -1,4 +1,3 @@ -// +build ignore package connector import ( diff --git a/connector/enabled_darwin.go b/connector/enabled_darwin.go new file mode 100644 index 0000000..d68c6c6 --- /dev/null +++ b/connector/enabled_darwin.go @@ -0,0 +1,7 @@ +// +build !linux + +package connector + +var enabled = map[string]func() Connector{ + "docker": NewDocker, +} diff --git a/connector/enabled_linux.go b/connector/enabled_linux.go new file mode 100644 index 0000000..76e3bab --- /dev/null +++ b/connector/enabled_linux.go @@ -0,0 +1,8 @@ +// +build !darwin + +package connector + +var enabled = map[string]func() Connector{ + "docker": NewDocker, + "runc": NewRunc, +} diff --git a/connector/main.go b/connector/main.go index 562827c..dfc6f00 100644 --- a/connector/main.go +++ b/connector/main.go @@ -1,12 +1,25 @@ package connector import ( + "fmt" + "github.com/bcicen/ctop/container" "github.com/bcicen/ctop/logging" ) var log = logging.Init() +func ByName(s string) (Connector, error) { + if _, ok := enabled[s]; !ok { + msg := fmt.Sprintf("invalid connector type \"%s\"\nconnector must be one of:", s) + for k, _ := range enabled { + msg += fmt.Sprintf("\n %s", k) + } + return nil, fmt.Errorf(msg) + } + return enabled[s](), nil +} + type Connector interface { All() container.Containers Get(string) (*container.Container, bool) diff --git a/connector/runc.go b/connector/runc.go index b983571..f3ea77c 100644 --- a/connector/runc.go +++ b/connector/runc.go @@ -1,3 +1,5 @@ +// +build !darwin + package connector import ( diff --git a/cursor.go b/cursor.go index 532db74..778ad83 100644 --- a/cursor.go +++ b/cursor.go @@ -8,11 +8,6 @@ import ( ui "github.com/gizak/termui" ) -var enabledConnectors = map[string]func() connector.Connector{ - "docker": connector.NewDocker, - "runc": connector.NewRunc, -} - type GridCursor struct { selectedID string // id of currently selected container filtered container.Containers @@ -20,12 +15,6 @@ type GridCursor struct { isScrolling bool // toggled when actively scrolling } -func NewGridCursor(connectorName string) *GridCursor { - return &GridCursor{ - cSource: enabledConnectors[connectorName](), - } -} - func (gc *GridCursor) Len() int { return len(gc.filtered) } func (gc *GridCursor) Selected() *container.Container { diff --git a/main.go b/main.go index a0dd34e..e80bb67 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,9 @@ import ( "flag" "fmt" "os" - "strings" "github.com/bcicen/ctop/config" + "github.com/bcicen/ctop/connector" "github.com/bcicen/ctop/container" "github.com/bcicen/ctop/cwidgets/compact" "github.com/bcicen/ctop/logging" @@ -41,8 +41,6 @@ func main() { var connectorFlag = flag.String("connector", "docker", "container connector to use") flag.Parse() - validConnector(*connectorFlag) - if *versionFlag { fmt.Println(versionStr) os.Exit(0) @@ -88,7 +86,11 @@ func main() { defer Shutdown() // init grid, cursor, header - cursor = NewGridCursor(*connectorFlag) + conn, err := connector.ByName(*connectorFlag) + if err != nil { + panic(err) + } + cursor = &GridCursor{cSource: conn} cGrid = compact.NewCompactGrid() header = widgets.NewCTopHeader() @@ -108,18 +110,6 @@ func Shutdown() { } } -func validConnector(s string) { - if _, ok := enabledConnectors[s]; !ok { - fmt.Printf("invalid connector type: %s\n", s) - var connectors []string - for k, _ := range enabledConnectors { - connectors = append(connectors, k) - } - fmt.Printf("connector must be one of: %s\n", strings.Join(connectors, ",")) - os.Exit(1) - } -} - // ensure a given sort field is valid func validSort(s string) { if _, ok := container.Sorters[s]; !ok { @@ -131,7 +121,7 @@ func validSort(s string) { func panicExit() { if r := recover(); r != nil { Shutdown() - fmt.Printf("panic: %s\n", r) + fmt.Printf("error: %s\n", r) os.Exit(1) } }