package zoopb import ( "go.wit.com/gui" "go.wit.com/lib/protobuf/guipb" "go.wit.com/log" ) func (x *Machines) NewTable(title string) *MachinesTable { t := new(MachinesTable) t.x = x pb := new(guipb.Table) pb.Title = title t.pb = pb return t } func (t *MachinesTable) AddStringFunc(title string, f func(*Machine) string) { t.pb.Order = append(t.pb.Order, title) sf := new(MachineStringFunc) sf.title = title sf.f = f t.stringFuncs = append(t.stringFuncs, sf) } func (t *MachinesTable) AddHostname() { log.Info("zoopb: GOT TO AddHostname()") t.pb.Order = append(t.pb.Order, "Hostname") t.pb.Order = append(t.pb.Order, "Cpus") t.pb.Order = append(t.pb.Order, "Memory") } func (mt *MachinesTable) doStringFunc(name string) { for _, sf := range mt.stringFuncs { if sf.title != name { continue } log.Info("zoopb: found stringfunc name:", name) r := new(guipb.StringRow) r.Header = new(guipb.Widget) r.Header.Name = name all := mt.x.All() for all.Scan() { m := all.Next() r.Vals = append(r.Vals, sf.f(m)) log.Info("zoopb: adding", name, r.Vals) } mt.pb.StringRows = append(mt.pb.StringRows, r) return } } func (mt *MachinesTable) MakeTable() { for _, name := range mt.pb.Order { log.Info("zoopb: looking for row name()", name) switch name { case "Hostname": r := new(guipb.StringRow) r.Header = new(guipb.Widget) r.Header.Name = name all := mt.x.All() for all.Scan() { m := all.Next() r.Vals = append(r.Vals, m.Hostname) log.Info("zoopb: adding", name, r.Vals) } mt.pb.StringRows = append(mt.pb.StringRows, r) continue case "Cpus": i := new(guipb.IntRow) i.Header = new(guipb.Widget) i.Header.Name = name all := mt.x.All() for all.Scan() { m := all.Next() i.Vals = append(i.Vals, m.Cpus) log.Info("zoopb: adding", name, i.Vals) } mt.pb.IntRows = append(mt.pb.IntRows, i) continue case "Memory": i := new(guipb.IntRow) i.Header = new(guipb.Widget) i.Header.Name = name all := mt.x.All() for all.Scan() { m := all.Next() i.Vals = append(i.Vals, m.Memory) log.Info("zoopb: adding", name, i.Vals) } mt.pb.IntRows = append(mt.pb.IntRows, i) continue default: // mt.addFuncRow(name) } log.Info("zoopb: didn't find name. trying StringFuncs", name) mt.doStringFunc(name) } } /* func (mt *MachinesTable) addRow(name string) { i := new(guipb.IntRow) i.Header = new(guipb.Widget) i.Header.Name = "Memories" all := t.x.All() for all.Scan() { m := all.Next() i.Vals = append(i.Vals, m.Memory) log.Info("zoopb: adding cpus", i.Vals) } t.pb.IntRows = append(t.pb.IntRows, i) } */ func (mt *MachinesTable) ShowTable() { log.Info("zoopb.ShowTable() SENDING TO GUI") mt.MakeTable() gui.ShowTable(mt.pb) } type MachineStringFunc struct { title string f func(*Machine) string } type MachinesTable struct { // gt *gui.NodeTable pb *guipb.Table x *Machines hostnames []string stringFuncs []*MachineStringFunc // columns []*gui.NodeColumn // order []*gui.NodeColumn }