diff options
Diffstat (limited to 'doAdminGui.go')
| -rw-r--r-- | doAdminGui.go | 104 |
1 files changed, 103 insertions, 1 deletions
diff --git a/doAdminGui.go b/doAdminGui.go index 20d6351..423a840 100644 --- a/doAdminGui.go +++ b/doAdminGui.go @@ -6,11 +6,17 @@ package main // An app to submit patches for the 30 GO GUI repos import ( + "bytes" + "fmt" + "io/ioutil" + "net/http" "os" + "os/user" "time" "go.wit.com/gui" "go.wit.com/lib/gadgets" + "go.wit.com/lib/protobuf/virtpb" "go.wit.com/log" ) @@ -22,11 +28,21 @@ func refresh() { } } +var client *http.Client + func doAdminGui() { me.myGui = gui.New() me.myGui.InitEmbed(resources) me.myGui.Default() + // Initialize a persistent client with a custom Transport + client = &http.Client{ + Transport: &http.Transport{ + DisableKeepAlives: false, // Ensure Keep-Alive is enabled + }, + Timeout: 10 * time.Second, // Set a reasonable timeout + } + win := gadgets.NewGenericWindow("Virtigo: (run your cluster)", "virtigo stuff") win.Custom = func() { log.Warn("Main window close") @@ -35,10 +51,53 @@ func doAdminGui() { grid := win.Group.RawGrid() - grid.NewButton("show hyperbisors", func() { + // url := "http://example.com/endpoint" + url := argv.Server + data := []byte(`{"message": "Hello"}`) + + grid.NewButton("show hypervisors", func() { + response, err := postData(url, data) + if err != nil { + fmt.Println("Error:", err) + } else { + fmt.Println("Response:", string(response)) + } }) grid.NewButton("show droplets", func() { + durl := url + "/dumpdroplets" + response, err := postData(durl, data) + if err != nil { + fmt.Println("Error:", err) + } else { + fmt.Println("Response:", string(response)) + } + }) + + grid.NewButton("uptime", func() { + durl := url + "/uptime" + response, err := postData(durl, data) + if err != nil { + fmt.Println("Error:", err) + } else { + fmt.Println("Response:", string(response)) + } + }) + + grid.NewButton("get DropletsPB", func() { + durl := url + "/DropletsPB" + data, err := postData(durl, data) + if err != nil { + fmt.Println("Error:", err) + return + } + fmt.Println("Response len:", len(data)) + me.droplets = new(virtpb.Droplets) + if err := me.droplets.Unmarshal(data); err != nil { + fmt.Println("marshal failed", err) + return + } + fmt.Println("Droplet len=", me.droplets.Len()) }) grid.NewButton("clean exit", func() { @@ -50,3 +109,46 @@ func doAdminGui() { refresh() } } + +func postData(url string, data []byte) ([]byte, error) { + req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("failed to create request: %w", err) + } + + usr, _ := user.Current() + req.Header.Set("author", usr.Username) + req.Header.Set("Connection", "keep-alive") // Ensure keep-alive is used + + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("request failed: %w", err) + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to read response: %w", err) + } + + 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)) + } + } +} +*/ |
