// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main // An app to submit patches for the 30 GO GUI repos import ( "fmt" "os" "time" "go.wit.com/gui" "go.wit.com/lib/gadgets" "go.wit.com/lib/protobuf/zoopb" "go.wit.com/log" ) func debug() { for { time.Sleep(90 * time.Second) log.Info("TODO: zookeeper scan here. repo count =") } } func doGui() { me.myGui = gui.New() me.myGui.InitEmbed(resources) me.myGui.Default() mainWindow := gadgets.RawBasicWindow("Zookeeper: (inventory your cluster)") mainWindow.Make() mainWindow.Show() mainWindow.Custom = func() { log.Warn("Main window close") os.Exit(0) } drawWindow(mainWindow) // sits here forever debug() } func drawWindow(win *gadgets.BasicWindow) { box := win.Box() vbox := box.NewVerticalBox("BOX2") group1 := vbox.NewGroup("Zookeeper Settings") grid := group1.NewGrid("buildOptions", 0, 0) /* var tbwin *tableWindow grid.NewButton("show zoo", func() { win.Disable() defer win.Enable() if tbwin == nil { log.Info("show zoo here") tbwin = makeTableWindow() tbwin.showTable(me.machines) } if tbwin.Hidden() { tbwin.Show() } else { tbwin.Hide() } return }) grid.NewButton("update table", func() { newwin := makeTableWindow() newwin.showTable(me.machines) newwin.Show() }) */ var testWin *genericWindow grid.NewButton("machine list", func() { if testWin != nil { testWin.Toggle() return } testWin = makeMachineWindow(me.machines) }) var test2 *genericWindow grid.NewButton("test2", func() { if test2 != nil { test2.Toggle() return } test2 = makeMachineWindow(me.machines) }) /* grid.NewButton("me.machines.ShowTable()", func() { t := me.machines.NewTable("test 2") t.AddHostname() t.AddMemory() t.AddCpus() t.AddStringFunc("sMB", func(m *zoopb.Machine) string { return fmt.Sprintf("%d mb", m.Memory/(1024*1024)) }) t.AddStringFunc("zood", func(m *zoopb.Machine) string { return findVersion(m, "zood") }) t.AddTimeFunc("age", func(m *zoopb.Machine) time.Time { return m.Laststamp.AsTime() }) t.ShowTable() }) grid.NewButton("ConfigSave(me.machines)", func() { log.Info("saving config...") me.machines.ConfigSave() }) grid.NewButton("ConfigSave(me.machines2)", func() { log.Info("saving config...") me.machines2.ConfigSave() }) */ } /* func (tw *tableWindow) showTable(allm *zoopb.Machines) { all := allm.All() for all.Scan() { m := all.Next() tw.grid.NewLabel(m.Hostname) tw.grid.NewLabel(fmt.Sprintf("%d", m.Cpus)) gb := m.Memory / (1024 * 1024) ms := fmt.Sprintf("%d MB", gb) tw.grid.NewLabel(ms) tw.grid.NewLabel(m.Distro) tw.grid.NewLabel(findVersion(m, "zood")) tw.grid.NewLabel(findVersion(m, "bash")) dur := m.Laststamp.AsTime() tw.grid.NewLabel(fmt.Sprintf("%v", time.Since(dur))) tw.grid.NewButton("upgrade", func() { log.Info("figure out upgrade", m.Hostname) }) tw.grid.NextRow() } } */ func findVersion(m *zoopb.Machine, pkgname string) string { zood := m.Packages.FindByName(pkgname) if zood == nil { return "n/a" } return zood.Version } func makeMachineWindow(pb *zoopb.Machines) *genericWindow { win := initGenericWindow("Machines registered with Zookeeper", "Buttons of things") grid := win.group.RawGrid() grid.NewButton("List", func() { log.Info("list...") }) grid.NewButton("more", func() { log.Info("?") }) grid.NextRow() grid.NewButton("smore", func() { log.Info("smore") }) tbox := win.win.Box().Vertical() // a vertical box (like a stack of books) t := pb.NewTable("test 2") t.SetParent(tbox) t.AddHostname() t.AddMemory() t.AddCpus() t.AddStringFunc("sMB", func(m *zoopb.Machine) string { return fmt.Sprintf("%d mb", m.Memory/(1024*1024)) }) t.AddStringFunc("zood", func(m *zoopb.Machine) string { return findVersion(m, "zood") }) t.AddTimeFunc("age", func(m *zoopb.Machine) time.Time { return m.Laststamp.AsTime() }) t.ShowTable() return win }