diff options
| author | Jeff Carr <[email protected]> | 2025-03-11 03:34:30 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-03-11 03:34:30 -0500 |
| commit | d2d04da1228d36cfddc0cda357a2037ea7897345 (patch) | |
| tree | ad0143fff7511d3d8e87ae5ab45682b6c1562f4b /windowDroplets.go | |
| parent | e0970840e20a27fc80f4e93ea2a30761fdc032e8 (diff) | |
cleaner droplet table views
Diffstat (limited to 'windowDroplets.go')
| -rw-r--r-- | windowDroplets.go | 160 |
1 files changed, 113 insertions, 47 deletions
diff --git a/windowDroplets.go b/windowDroplets.go index 7bcf456..b7350df 100644 --- a/windowDroplets.go +++ b/windowDroplets.go @@ -4,7 +4,9 @@ package main import ( + "strings" "sync" + "time" "go.wit.com/gui" "go.wit.com/lib/gadgets" @@ -16,6 +18,7 @@ type stdDropletTableWin struct { sync.Mutex win *gadgets.GenericWindow // the machines gui window box *gui.Node // the machines gui parent box widget + pb *virtpb.Droplets // the droplets protobuf TB *virtpb.DropletsTable // the gui table buffer update bool // if the window should be updated } @@ -30,39 +33,29 @@ func (w *stdDropletTableWin) Toggle() { w.win.Toggle() } -func makeDropletsWin() *stdDropletTableWin { +func newDropletsWindow() *stdDropletTableWin { dwin := new(stdDropletTableWin) - dwin.win = gadgets.NewGenericWindow("virtigo current droplets", "who is squirreling around?") + dwin.win = gadgets.NewGenericWindow("virtigo current droplets", "") dwin.win.Custom = func() { log.Info("test delete window here") } - grid := dwin.win.Group.RawGrid() - grid.NewButton("show droplets", func() { - var count int - found := virtpb.NewDroplets() - all := me.droplets.All() - for all.Scan() { - e := all.Next() - count += 1 - found.Append(e) - if count > 20 { - break - } - } - dwin.doDropletsTable(found) - }) + // make a box at the bottom of the window for the protobuf table + dwin.box = dwin.win.Bottom.Box().SetProgName("TBOX") + return dwin +} - /* - grid.NewButton("Save Current", func() { - log.Info("droplets len =", me.droplets.Len()) - me.droplets.Save() - }) - */ +func makeWindownDropletsPB(pb *virtpb.Droplets) *stdDropletTableWin { + dwin := new(stdDropletTableWin) + dwin.win = gadgets.NewGenericWindow("virtigo current droplets", "") + dwin.win.Custom = func() { + log.Info("test delete window here") + } // make a box at the bottom of the window for the protobuf table dwin.box = dwin.win.Bottom.Box().SetProgName("TBOX") - // doTable(me.droplets) + + dwin.doDropletsTable(pb) return dwin } @@ -76,7 +69,7 @@ func (dwin *stdDropletTableWin) doDropletsTable(currentDroplets *virtpb.Droplets } // display the protobuf - dwin.TB = AddDropletsPB(dwin.box, currentDroplets) + dwin.TB = addDropletsPB(dwin.box, currentDroplets) f := func(e *virtpb.Droplet) { log.Info("Triggered. do something here", e.Hostname) // m.Enabled = true @@ -84,34 +77,107 @@ func (dwin *stdDropletTableWin) doDropletsTable(currentDroplets *virtpb.Droplets dwin.TB.Custom(f) } -func AddDropletsPB(tbox *gui.Node, pb *virtpb.Droplets) *virtpb.DropletsTable { +func addDropletsPB(tbox *gui.Node, pb *virtpb.Droplets) *virtpb.DropletsTable { t := pb.NewTable("DropletsPB") t.NewUuid() t.SetParent(tbox) - /* - ctimef := func(e *virtpb.Droplet) string { - ctime := e.Ctime.AsTime() - return ctime.Format("2006/01/02 15:04") - } - t.AddStringFunc("ctime", ctimef) + vp := t.AddButtonFunc("start", func(p *virtpb.Droplet) string { + return "poweron" + }) + vp.Custom = func(d *virtpb.Droplet) { + log.Info("power on the droplet here:", d.Hostname) + } + t.AddHostname() + t.AddMemory() + t.AddCpus() + t.ShowTable() + return t +} - etimef := func(e *virtpb.Droplet) string { - etime := e.Etime.AsTime() - s := etime.Format("2006/01/02 15:04") - if strings.HasPrefix(s, "1970/") { - // just show a blank if it's not set - return "" - } - return s - } - t.AddStringFunc("etime", etimef) - */ +// default window for active running droplets +func (dw *stdDropletTableWin) doInactiveDroplets(pb *virtpb.Droplets) { + dw.Lock() + defer dw.Unlock() + + // erase the old table + if dw.TB != nil { + dw.TB.Delete() + dw.TB = nil + } + + // init the table + dw.pb = pb + t := dw.pb.NewTable("DropletsPB Off") + t.NewUuid() + t.SetParent(dw.box) + + // pick the columns + t.AddHostname() + t.AddMemory() + t.AddCpus() + // final setup and display the table + dw.TB = t + f := func(e *virtpb.Droplet) { + log.Info("Triggered. do something here", e.Hostname) + // m.Enabled = true + } + dw.TB.Custom(f) + dw.TB.ShowTable() +} + +// default window for active running droplets +func (dw *stdDropletTableWin) doActiveDroplets(pb *virtpb.Droplets) { + dw.Lock() + defer dw.Unlock() + if dw.TB != nil { + dw.TB.Delete() + dw.TB = nil + } + + dw.pb = pb + + t := dw.pb.NewTable("DropletsPB On") + t.NewUuid() + + t.SetParent(dw.box) t.AddHostname() - // t.AddAddress() - // t.AddWhere() - // t.AddLocalPort() + t.AddStringFunc("location", func(d *virtpb.Droplet) string { + return d.Current.Hypervisor + }) + t.AddMemory() + t.AddCpus() + t.AddSpicePort() + t.AddTimeFunc("age", func(d *virtpb.Droplet) time.Time { + age := d.Current.OnSince.AsTime() + log.Info("age", d.Hostname, virtpb.FormatDuration(time.Since(age))) + return age + }) + t.AddStringFunc("State", func(d *virtpb.Droplet) string { + if d.Current.State == virtpb.DropletState_ON { + return "ON" + } + if d.Current.State == virtpb.DropletState_OFF { + return "OFF" + } + return "UNKNOWN" + }) + t.AddStringFunc("mac addr", func(d *virtpb.Droplet) string { + var macs []string + for _, n := range d.Networks { + macs = append(macs, n.Mac) + } + tmp := strings.Join(macs, "\n") + return strings.TrimSpace(tmp) + }) t.ShowTable() - return t + + // display the protobuf + dw.TB = t + f := func(e *virtpb.Droplet) { + log.Info("Triggered. do something here", e.Hostname) + // m.Enabled = true + } + dw.TB.Custom(f) } |
