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 pb.Order = append(pb.Order, "Memory") 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) 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 = "Hostname" all := mt.x.All() for all.Scan() { m := all.Next() r.Vals = append(r.Vals, m.Hostname) log.Info("zoopb: adding hostname", r.Vals) } mt.pb.StringRows = append(mt.pb.StringRows, r) case "Cpus": i := new(guipb.IntRow) i.Header = new(guipb.Widget) i.Header.Name = "Cpus" all := mt.x.All() for all.Scan() { m := all.Next() i.Vals = append(i.Vals, m.Cpus) log.Info("zoopb: adding cpus", i.Vals) } mt.pb.IntRows = append(mt.pb.IntRows, i) case "Memory": i := new(guipb.IntRow) i.Header = new(guipb.Widget) i.Header.Name = "Memories" all := mt.x.All() for all.Scan() { m := all.Next() i.Vals = append(i.Vals, m.Memory) log.Info("zoopb: adding cpus", i.Vals) } mt.pb.IntRows = append(mt.pb.IntRows, i) default: // mt.addFuncRow(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 }