From 27b7f59e05426f9f75d612e894db80ece63f5635 Mon Sep 17 00:00:00 2001 From: Gzx1999 Date: Thu, 6 Apr 2023 00:24:53 +0800 Subject: [PATCH] client add event methods --- sdk/plugin/client.go | 53 ++++++++++++++++++++++++++++++++++++++++++++ sdk/utils/request.go | 27 ++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 sdk/utils/request.go diff --git a/sdk/plugin/client.go b/sdk/plugin/client.go index bf299914..2167035a 100644 --- a/sdk/plugin/client.go +++ b/sdk/plugin/client.go @@ -2,6 +2,7 @@ package plugin import ( "encoding/json" + "errors" "fmt" "io" "net/http" @@ -10,6 +11,7 @@ import ( "strings" "github.com/gin-gonic/gin" + "openeuler.org/PilotGo/plugin-sdk/utils" ) type Client struct { @@ -135,3 +137,54 @@ func (c *Client) MachineList() ([]*MachineNode, error) { } return result, nil } + +type Event struct { + ID int + MetaData interface{} +} + +type EventCallback func(e *Event) + +func (c *Client) ListenEvent(event Event, callback EventCallback) error { + url := c.Server + "/api/v1/pluginapi/listener" + data, err := utils.Request("PUT", url) + if err != nil { + return err + } + + resp := &struct { + Status string + Error string + }{} + if err := json.Unmarshal(data, resp); err != nil { + return err + } + if resp.Status != "ok" { + return errors.New(resp.Error) + } + + // TODO: register event handler here + return nil +} + +func (c *Client) UnListenEvent(listenerID string) error { + url := c.Server + "/api/v1/pluginapi/listener" + data, err := utils.Request("DELETE", url) + if err != nil { + return err + } + + resp := &struct { + Status string + Error string + }{} + if err := json.Unmarshal(data, resp); err != nil { + return err + } + if resp.Status != "ok" { + return errors.New(resp.Error) + } + + // TODO: unregister event handler here + return nil +} diff --git a/sdk/utils/request.go b/sdk/utils/request.go new file mode 100644 index 00000000..fc8ea1c6 --- /dev/null +++ b/sdk/utils/request.go @@ -0,0 +1,27 @@ +package utils + +import ( + "io" + "net/http" +) + +func Request(method, url string) ([]byte, error) { + req, err := http.NewRequest(method, url, nil) + if err != nil { + return nil, err + } + + hc := &http.Client{} + resp, err := hc.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + bs, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + return bs, nil +} -- Gitee