123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package cloudserver
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "reflect"
- "time"
- "github.com/yuguorong/go/log"
- )
- type CloudServer struct {
- conf *CloudServerConf
- httpClient *http.Client
- Name string
- }
- func GetCloudServer(profile interface{}) *CloudServer {
- pfofileCS := profile.(*CloudServerConf)
- res := &CloudServer{conf: pfofileCS}
- res.httpClient = &http.Client{Timeout: 5 * time.Second}
- return res
- }
- func (c *CloudServer) GetClientData(infourl string, pData interface{}, param *map[string]string) error {
- pNum, psize := 1, 100
- reqParams := make(map[string]interface{})
- reqParams["pageSize"] = psize
- if param != nil {
- for k, v := range *param {
- reqParams[k] = v
- }
- }
- pin := reflect.ValueOf(pData).Elem()
- tin := reflect.TypeOf(pData).Elem()
- sliceret := reflect.MakeSlice(tin, 0, 0)
- itemCount := 0
- for {
- slicetmp := reflect.MakeSlice(tin, 0, 0)
- pin.Set(slicetmp)
- reqParams["pageNum"] = pNum
- p, e := c.requestPage(infourl, reqParams)
- pNum += 1
- if e != nil {
- log.Info("query ammeter error", e)
- break
- }
- if len(p.Rows) == 0 {
- break
- }
- e = p.ChangeData(pData)
- if e != nil {
- log.Info("change data error", e)
- continue
- }
- vin := reflect.ValueOf(pData).Elem()
- sliceret = reflect.AppendSlice(sliceret, vin)
- itemCount += vin.Len()
- if itemCount >= p.Total {
- vin.Set(sliceret)
- break
- }
- }
- return nil
- }
- func (c *CloudServer) requestPage(url string, data interface{}) (p *PageModel, erro error) {
- url = c.conf.ServerUrl + url
- httpClient := c.httpClient
- payload, erro := json.Marshal(data)
- if erro != nil {
- return
- }
- log.Info("reqParam", string(payload), url, time.Now())
- reqBody := bytes.NewReader(payload)
- req, err := http.NewRequest("POST", url, reqBody)
- if err != nil {
- erro = err
- return
- }
- req.Header.Add("appId", c.conf.AppId)
- req.Header.Add("signature", c.conf.GenerateSignature())
- req.Header.Add("Content-Type", "application/json")
- resp, err := httpClient.Do(req)
- if err != nil {
- erro = err
- return
- }
- defer resp.Body.Close()
- if resp.StatusCode != 200 {
- erro = fmt.Errorf("respose statuscode is not equal 200")
- return
- }
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- erro = err
- return
- }
- var jbody CommonResp
- err = json.Unmarshal(body, &jbody)
- if err != nil {
- erro = err
- return
- }
- if jbody.Code != 0 {
- erro = fmt.Errorf("response error %s", jbody.Msg)
- return
- }
- pageModel := &PageModel{}
- erro = jbody.ChangeData(pageModel)
- p = pageModel
- return
- }
|