From d261a220dff941701ed4e55faec8fe096d0d8f5d Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Tue, 3 Jun 2025 23:48:40 -0500 Subject: [PATCH] send a create droplet event & unmarshal response --- doAdminGui.go | 9 ++- windowDropletCreate.go | 124 +++++++++++++++++++++++++++++++++++++++++ windowDroplets.go | 15 ++++- 3 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 windowDropletCreate.go diff --git a/doAdminGui.go b/doAdminGui.go index 1909fe1..3e4fddb 100644 --- a/doAdminGui.go +++ b/doAdminGui.go @@ -400,8 +400,10 @@ func (admin *adminT) postEvent(e *virtpb.Event) error { return err } + url := admin.url.String() + "/event" + // update the droplet list - if data, err := postData(admin.url.String()+"/event", msg); err != nil { + if data, err := postData(url, msg); err != nil { log.Info("postEvent() /event Error:", err) return err } else { @@ -409,11 +411,14 @@ func (admin *adminT) postEvent(e *virtpb.Event) error { log.Println("postEvent() result marshal failed", err, "len(dat) =", len(data)) log.Println("postEvent() data =", string(data)) return err + } else { + log.Println("postEvent() result marshal worked on len(dat) =", len(data)) + log.Println("postEvent() result =", result.FormatTEXT()) } } if result.Error != "" { return fmt.Errorf("%s", result.Error) } - log.Printf("Event worked: %s\n", result.DropletUuid) + log.Printf("Event worked to %s uuid=%s\n", url, result.DropletUuid) return nil } diff --git a/windowDropletCreate.go b/windowDropletCreate.go new file mode 100644 index 0000000..e61eac7 --- /dev/null +++ b/windowDropletCreate.go @@ -0,0 +1,124 @@ +// 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" + "strconv" + + "go.wit.com/gui" + "go.wit.com/lib/gadgets" + "go.wit.com/lib/protobuf/virtpb" + "go.wit.com/log" +) + +func (admin *adminT) createDropletWindow() *gadgets.GenericWindow { + d := new(virtpb.Droplet) + + win := gadgets.NewGenericWindow("Create Droplet "+d.Hostname, "settings") + win.Custom = func() { + log.Warn("edit window close") + } + + grid := win.Group.RawGrid() + + var save *gui.Node + + grid.NewLabel("name") + name := grid.NewTextbox("new2.wit.com") + d.Hostname = "new2.wit.com" + name.SetText(d.Hostname) + name.Custom = func() { + if d.Hostname == name.String() { + return + } + d.Hostname = name.String() + log.Info("changed droplet name to", d.Hostname) + save.Enable() + } + grid.NextRow() + + mem := gadgets.NewBasicEntry(grid, "memory (GB)") + mem.SetText("16") + d.Memory = int64(16 * 1024 * 2024 * 1024) + grid.NextRow() + mem.Custom = func() { + newmem, err := strconv.Atoi(mem.String()) + if err != nil { + log.Info("mem value error", mem.String(), err) + mem.SetText(fmt.Sprintf("%d", d.Memory/(1024*1024*1024))) + return + } + if newmem < 1 { + log.Info("mem can not be < 1") + mem.SetText(fmt.Sprintf("%d", d.Memory/(1024*1024*1024))) + return + } + d.Memory = int64(newmem * (1024 * 2024 * 1024)) + log.Info("changed mem value. new val =", d.Memory) + + save.Enable() + } + grid.NextRow() // each entry is on it's own row + + cpus := gadgets.NewBasicEntry(grid, "cpus") + cpus.SetText("4") + d.Cpus = int64(4) + cpus.Custom = func() { + newcpu, err := strconv.Atoi(cpus.String()) + if err != nil { + log.Info("cpus value error", cpus.String(), err) + cpus.SetText(fmt.Sprintf("%d", d.Cpus)) + return + } + if newcpu < 1 { + log.Info("cpus can not be < 1") + cpus.SetText(fmt.Sprintf("%d", d.Cpus)) + return + } + d.Cpus = int64(newcpu) + log.Info("changed cpus value. new val =", d.Cpus) + + save.Enable() + } + grid.NextRow() // each entry is on it's own row + + grid.NewButton("dump pb.FormatTEXT()", func() { + t := d.FormatTEXT() + log.Info(t) + }) + + save = grid.NewButton("postEvent() EDIT", func() { + log.Info("save droplet changes here") + + e := new(virtpb.Event) + e.Etype = virtpb.EventType_EDIT + e.Droplet = d + + if err := admin.postEvent(e); err != nil { + log.Info("event edit err", err) + } else { + log.Info("admin.postEvent() worked (?)") + } + }) + + save = grid.NewButton("postEvent() ADD", func() { + log.Info("save droplet changes here") + + e := new(virtpb.Event) + e.Etype = virtpb.EventType_ADD + e.Droplet = d + + if err := admin.postEvent(e); err != nil { + log.Info("event edit err", err) + } else { + log.Info("admin.postEvent() worked (?)") + } + }) + + // save.Disable() + return win +} diff --git a/windowDroplets.go b/windowDroplets.go index 6b84373..14052fc 100644 --- a/windowDroplets.go +++ b/windowDroplets.go @@ -73,6 +73,11 @@ func newDropletsWindow(admin *adminT) *stdDropletTableWin { dwin.doInactiveDroplets(found) }) + grid.NewButton("Create", func() { + log.Info("create droplet here") + admin.createDropletWindow() + }) + // make a box at the bottom of the window for the protobuf table dwin.box = dwin.win.Bottom.Box().SetProgName("TBOX") return dwin @@ -173,7 +178,15 @@ func (dw *stdDropletTableWin) doActiveDroplets(pb *virtpb.Droplets) { log.Info("data", string(data), "err =", err) } - t.AddHostname() + // t.AddHostname() + vp := t.AddButtonFunc("Hostname", func(p *virtpb.Droplet) string { + return p.Hostname + }) + vp.Custom = func(d *virtpb.Droplet) { + log.Info("edit droplet here", d.Hostname) + dw.admin.editDropletWindow(d) + } + t.AddStringFunc("location", func(d *virtpb.Droplet) string { return d.Current.Hypervisor })