add --connector switch, validation

This commit is contained in:
Bradley Cicenas 2017-06-09 17:35:29 +00:00
parent eeac65da8c
commit d372043a17
5 changed files with 28 additions and 8 deletions

View File

@ -19,7 +19,7 @@ type Docker struct {
lock sync.RWMutex lock sync.RWMutex
} }
func NewDocker() *Docker { func NewDocker() Connector {
// init docker client // init docker client
client, err := api.NewClientFromEnv() client, err := api.NewClientFromEnv()
if err != nil { if err != nil {

View File

@ -7,7 +7,7 @@ import (
var log = logging.Init() var log = logging.Init()
type ContainerSource interface { type Connector interface {
All() container.Containers All() container.Containers
Get(string) (*container.Container, bool) Get(string) (*container.Container, bool)
} }

View File

@ -59,7 +59,7 @@ func getFactory(opts RuncOpts) (libcontainer.Factory, error) {
return libcontainer.New(opts.root, cgroupManager, libcontainer.CriuPath("criu")) return libcontainer.New(opts.root, cgroupManager, libcontainer.CriuPath("criu"))
} }
func NewRunc() *Runc { func NewRunc() Connector {
opts, err := readRuncOpts() opts, err := readRuncOpts()
runcFailOnErr(err) runcFailOnErr(err)

View File

@ -8,16 +8,20 @@ import (
ui "github.com/gizak/termui" ui "github.com/gizak/termui"
) )
var enabledConnectors = map[string]func() connector.Connector{
"docker": connector.NewDocker,
"runc": connector.NewRunc,
}
type GridCursor struct { type GridCursor struct {
selectedID string // id of currently selected container selectedID string // id of currently selected container
filtered container.Containers filtered container.Containers
cSource connector.ContainerSource cSource connector.Connector
} }
func NewGridCursor() *GridCursor { func NewGridCursor(connector string) *GridCursor {
return &GridCursor{ return &GridCursor{
cSource: connector.NewRunc(), cSource: enabledConnectors[connector](),
//cSource: connector.NewDocker(),
} }
} }

18
main.go
View File

@ -4,6 +4,7 @@ import (
"flag" "flag"
"fmt" "fmt"
"os" "os"
"strings"
"github.com/bcicen/ctop/config" "github.com/bcicen/ctop/config"
"github.com/bcicen/ctop/container" "github.com/bcicen/ctop/container"
@ -37,8 +38,11 @@ func main() {
var sortFieldFlag = flag.String("s", "", "select container sort field") var sortFieldFlag = flag.String("s", "", "select container sort field")
var reverseSortFlag = flag.Bool("r", false, "reverse container sort order") var reverseSortFlag = flag.Bool("r", false, "reverse container sort order")
var invertFlag = flag.Bool("i", false, "invert default colors") var invertFlag = flag.Bool("i", false, "invert default colors")
var connectorFlag = flag.String("connector", "docker", "container connector to use")
flag.Parse() flag.Parse()
validConnector(*connectorFlag)
if *versionFlag { if *versionFlag {
fmt.Println(versionStr) fmt.Println(versionStr)
os.Exit(0) os.Exit(0)
@ -75,7 +79,7 @@ func main() {
defer Shutdown() defer Shutdown()
// init grid, cursor, header // init grid, cursor, header
cursor = NewGridCursor() cursor = NewGridCursor(*connectorFlag)
cGrid = compact.NewCompactGrid() cGrid = compact.NewCompactGrid()
header = widgets.NewCTopHeader() header = widgets.NewCTopHeader()
@ -104,6 +108,18 @@ func Shutdown() {
} }
} }
func validConnector(s string) {
if _, ok := enabledConnectors[s]; !ok {
fmt.Printf("invalid connector type: %s", s)
var connectors []string
for k, _ := range enabledConnectors {
connectors = append(connectors, k)
}
fmt.Printf("connector must be one of: %s", strings.Join(connectors, ","))
os.Exit(1)
}
}
// ensure a given sort field is valid // ensure a given sort field is valid
func validSort(s string) { func validSort(s string) {
if _, ok := container.Sorters[s]; !ok { if _, ok := container.Sorters[s]; !ok {