102 lines
2.1 KiB
Go
102 lines
2.1 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"go.digitalcircle.com.br/open/replaycli-go/types"
|
||
|
"io"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var apikey string
|
||
|
|
||
|
func init() {
|
||
|
apikey = os.Getenv("REPLAY_APIKEY")
|
||
|
}
|
||
|
|
||
|
func Addr() string {
|
||
|
ret := os.Getenv("REPLAY_ADDR")
|
||
|
if ret == "" {
|
||
|
ret = "http://localhost:8080"
|
||
|
} else if strings.HasPrefix(ret, ":") {
|
||
|
ret = "http://localhost" + ret
|
||
|
}
|
||
|
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
func HttpDo(method string, strurl string, body []byte) (*http.Response, error) {
|
||
|
cli := http.Client{}
|
||
|
var err error
|
||
|
var req *http.Request
|
||
|
|
||
|
if body != nil && len(body) > 0 {
|
||
|
req, err = http.NewRequest(method, strurl, io.NopCloser(bytes.NewReader(body)))
|
||
|
|
||
|
} else {
|
||
|
req, err = http.NewRequest(method, strurl, nil)
|
||
|
}
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
req.Header.Set("X-API-KEY", apikey)
|
||
|
req.Header.Set("Content-Type", "application/json")
|
||
|
return cli.Do(req)
|
||
|
}
|
||
|
|
||
|
func HttpDoJson(i interface{}, method string, strurl string, body []byte) (err error) {
|
||
|
res, err := HttpDo(method, strurl, body)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
err = json.NewDecoder(res.Body).Decode(i)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type roboDAO struct {
|
||
|
}
|
||
|
|
||
|
func (d roboDAO) GetAll() ([]*types.Robot, error) {
|
||
|
ret := make([]*types.Robot, 0)
|
||
|
err := HttpDoJson(&ret, http.MethodGet, Addr()+fmt.Sprintf("/api/v1/robots"), nil)
|
||
|
return ret, err
|
||
|
}
|
||
|
func (d roboDAO) Enqueue(id uint) error {
|
||
|
_, err := HttpDo(http.MethodGet, Addr()+fmt.Sprintf("/api/v1/robots/op/enqueue/%d", id), nil)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
var RoboDAO roboDAO
|
||
|
|
||
|
type sqlDAO struct {
|
||
|
}
|
||
|
|
||
|
func (d sqlDAO) SQL(s string) (types.SQLResponse, error) {
|
||
|
ret := types.SQLResponse{}
|
||
|
req := types.SQLRequest{Sql: s}
|
||
|
bs, _ := json.Marshal(req)
|
||
|
err := HttpDoJson(&ret, http.MethodPost, Addr()+fmt.Sprintf("/api/v1/sql"), bs)
|
||
|
return ret, err
|
||
|
}
|
||
|
|
||
|
var SQLDAO sqlDAO
|
||
|
|
||
|
type appDAO struct {
|
||
|
}
|
||
|
|
||
|
func (d appDAO) GetAll() ([]*types.App, error) {
|
||
|
ret := make([]*types.App, 0)
|
||
|
err := HttpDoJson(&ret, http.MethodGet, Addr()+fmt.Sprintf("/api/v1/apps"), nil)
|
||
|
return ret, err
|
||
|
}
|
||
|
func (d appDAO) Run(id interface{}) ([]*types.App, error) {
|
||
|
ret := make([]*types.App, 0)
|
||
|
err := HttpDoJson(&ret, http.MethodGet, Addr()+fmt.Sprintf("/api/v1/app/run/%v", id), nil)
|
||
|
return ret, err
|
||
|
}
|
||
|
|
||
|
var AppDAO appDAO
|