diff options
Diffstat (limited to 'doAdminGui.go')
| -rw-r--r-- | doAdminGui.go | 106 |
1 files changed, 81 insertions, 25 deletions
diff --git a/doAdminGui.go b/doAdminGui.go index e7cdf48..11d02f0 100644 --- a/doAdminGui.go +++ b/doAdminGui.go @@ -10,6 +10,7 @@ import ( "fmt" "io/ioutil" "net/http" + "net/url" "os" "os/user" "time" @@ -26,11 +27,15 @@ func (admin *adminT) refresh() { log.Info("virtigo scan here") } - url := argv.Server + if admin.url == nil { + log.Info("admin url == nil") + return + } + msg := []byte(`{"message": "Hello"}`) // display the uptime - if data, err := postData(url+"/uptime", msg); err != nil { + if data, err := postData(admin.url.String()+"/uptime", msg); err != nil { log.Info("/uptime Error:", err) } else { log.Info("Response:", string(data)) @@ -38,7 +43,7 @@ func (admin *adminT) refresh() { } // update the droplet list - if data, err := postData(url+"/DropletsPB", msg); err != nil { + if data, err := postData(admin.url.String()+"/DropletsPB", msg); err != nil { log.Info("/DropletsPB Error:", err) } else { fmt.Println("DropletsPB Response len:", len(data)) @@ -51,7 +56,7 @@ func (admin *adminT) refresh() { } // update the hypervisor list - if data, err := postData(url+"/HypervisorsPB", msg); err != nil { + if data, err := postData(admin.url.String()+"/HypervisorsPB", msg); err != nil { log.Info("Error:", err) } else { fmt.Println("HypervisorsPB Response len:", len(data)) @@ -64,7 +69,7 @@ func (admin *adminT) refresh() { } // update the events list - if data, err := postData(url+"/EventsPB", msg); err != nil { + if data, err := postData(admin.url.String()+"/EventsPB", msg); err != nil { log.Info("Error:", err) } else { fmt.Println("EventsPB Response len:", len(data)) @@ -92,11 +97,12 @@ func (admin *adminT) doAdminGui() { Timeout: 10 * time.Second, // Set a reasonable timeout } - win := gadgets.NewGenericWindow("Virtigo: (run your cluster)", "virtigo stuff") + win := gadgets.NewGenericWindow("Virtigo: (run your cluster)", "localhost") win.Custom = func() { log.Warn("Main window close") os.Exit(0) } + me.gwin = win admin.uptime = win.Group.NewLabel("uptime") @@ -161,6 +167,14 @@ func (admin *adminT) doAdminGui() { // okExit("admin close") }) + me.cmap = make(map[*virtpb.Cluster]*adminT) + for c := range me.clusters.IterAll() { + a := new(adminT) + me.cmap[c] = a + log.Info("found in the config file", c.URL) + a.makeClusterGroup(c) + } + // sit here forever refreshing the GUI for { admin.refresh() @@ -168,6 +182,67 @@ func (admin *adminT) doAdminGui() { } } +func (admin *adminT) makeClusterGroup(c *virtpb.Cluster) { + var err error + admin.url, err = url.Parse(c.URL) + if err != nil { + badExit(err) + } + + group := me.gwin.Bottom.NewGroup(admin.url.Hostname()) + admin.uptime = group.NewLabel("uptime") + + grid := group.RawGrid() + + grid.NewButton("show hypervisors", func() { + if admin.hypervisors == nil { + log.Info("hypervisors not initialized") + return + } + log.Info("Hypervisors len=", admin.hypervisors.Len()) + admin.hwin = newHypervisorsWindow() + admin.hwin.doStdHypervisors(admin.hypervisors) + admin.hwin.win.Custom = func() { + log.Info("hiding table window") + } + }) + + grid.NewButton("droplets", func() { + if admin.droplets == nil { + log.Info("droplets not initialized") + return + } + admin.dwin = newDropletsWindow() + admin.dwin.win.Custom = func() { + log.Info("hiding droplet table window") + } + var found *virtpb.Droplets + found = virtpb.NewDroplets() + all := admin.droplets.All() + for all.Scan() { + vm := all.Next() + if vm.Current.State != virtpb.DropletState_ON { + continue + } + found.Append(vm) + } + admin.dwin.doActiveDroplets(found) + }) + + grid.NewButton("events", func() { + if admin.events == nil { + log.Info("events are not initialized") + return + } + log.Info("Events len=", admin.events.Len()) + admin.ewin = newEventsWindow() + admin.ewin.doStdEvents(admin.events) + admin.ewin.win.Custom = func() { + log.Info("hiding table window") + } + }) +} + func postData(url string, data []byte) ([]byte, error) { req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(data)) if err != nil { @@ -191,22 +266,3 @@ func postData(url string, data []byte) ([]byte, error) { return body, nil } - -/* -func main() { - url := "http://example.com/endpoint" - data := []byte(`{"message": "Hello"}`) - - ticker := time.NewTicker(1 * time.Minute) - defer ticker.Stop() - - for range ticker.C { - response, err := postData(url, data) - if err != nil { - fmt.Println("Error:", err) - } else { - fmt.Println("Response:", string(response)) - } - } -} -*/ |
