dashboard/services/uniss/httpclienthandle.go

73 lines
1.4 KiB
Go

package uniss
import (
"bytes"
"dashboard/dao/sqldb"
"dashboard/models"
"dashboard/pkg/swarm"
"encoding/json"
"fmt"
"io"
"net/http"
"go.uber.org/zap"
)
type httpClientHandler struct {
swarm *swarm.Swarm[*models.UnisHttpClientRequest]
httpC chan *models.UnisHttpClientResponse
}
func newhttpClientHandle(clients int) *httpClientHandler {
res := new(httpClientHandler)
res.swarm = swarm.NewSwarm(clients, res.doRequest, swarm.WithLog(zap.NewStdLog(log.Logger)))
res.httpC = make(chan *models.UnisHttpClientResponse)
return res
}
func (c *httpClientHandler) curl(msg *models.UnisHttpClientRequest) {
c.swarm.Submit(msg)
}
func (c *httpClientHandler) doRequest(req *models.UnisHttpClientRequest) error {
body, err := json.Marshal(req.Msg)
fmt.Println(string(body), err)
reqs, err := http.NewRequest(req.Methord, req.Url, bytes.NewReader(body))
if err != nil {
fmt.Println(err)
return err
}
reqs.Header.Add("Content-type", "application/json;charset=utf-8")
client := http.Client{}
resp, err := client.Do(reqs)
if err != nil {
fmt.Println(err)
return err
}
defer resp.Body.Close()
msg, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
if err := sqldb.ResFulDataStore(req.Methord, req.Url, string(body), string(msg), 0); err != nil {
fmt.Println(err)
return err
}
response := &models.UnisHttpClientResponse{
Id: req.Id,
Methord: req.Methord,
Msg: msg,
}
c.httpC <- response
return nil
}