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
}
func NewDocker() *Docker {
func NewDocker() Connector {
// init docker client
client, err := api.NewClientFromEnv()
if err != nil {

View File

@ -7,7 +7,7 @@ import (
var log = logging.Init()
type ContainerSource interface {
type Connector interface {
All() container.Containers
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"))
}
func NewRunc() *Runc {
func NewRunc() Connector {
opts, err := readRuncOpts()
runcFailOnErr(err)

View File

@ -8,16 +8,20 @@ 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
cSource connector.ContainerSource
cSource connector.Connector
}
func NewGridCursor() *GridCursor {
func NewGridCursor(connector string) *GridCursor {
return &GridCursor{
cSource: connector.NewRunc(),
//cSource: connector.NewDocker(),
cSource: enabledConnectors[connector](),
}
}

18
main.go
View File

@ -4,6 +4,7 @@ import (
"flag"
"fmt"
"os"
"strings"
"github.com/bcicen/ctop/config"
"github.com/bcicen/ctop/container"
@ -37,8 +38,11 @@ func main() {
var sortFieldFlag = flag.String("s", "", "select container sort field")
var reverseSortFlag = flag.Bool("r", false, "reverse container sort order")
var invertFlag = flag.Bool("i", false, "invert default colors")
var connectorFlag = flag.String("connector", "docker", "container connector to use")
flag.Parse()
validConnector(*connectorFlag)
if *versionFlag {
fmt.Println(versionStr)
os.Exit(0)
@ -75,7 +79,7 @@ func main() {
defer Shutdown()
// init grid, cursor, header
cursor = NewGridCursor()
cursor = NewGridCursor(*connectorFlag)
cGrid = compact.NewCompactGrid()
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
func validSort(s string) {
if _, ok := container.Sorters[s]; !ok {