agent/inventory/uploader/ooscaller.go (63 lines of code) (raw):
package uploader
import (
"bytes"
"compress/flate"
"encoding/base64"
"fmt"
"net/http"
"github.com/aliyun/aliyun_assist_client/agent/inventory/model"
"github.com/aliyun/aliyun_assist_client/agent/log"
"github.com/aliyun/aliyun_assist_client/agent/util"
"github.com/aliyun/aliyun_assist_client/agent/util/jsonutil"
)
type OOSCaller interface {
PutInventory(input *model.PutInventoryInput) (err error)
}
type OOSCallerImpl struct {
}
type OOSResult struct {
RequestId string
}
type ApiResponse struct {
ErrCode string `json:"errCode"`
ErrMsg string `json:"errMsg"`
Result *OOSResult `json:"result"`
}
func PutInventory(items string, resp *ApiResponse) error {
url := util.GetPutInventoryService()
parameters := map[string]interface{}{"items": items}
err := util.CallApi(http.MethodPost, url, parameters, resp, 10, true)
if err == nil {
if resp.ErrCode >= "400" {
err = fmt.Errorf("%s %s", resp.ErrCode, resp.ErrMsg)
if resp.Result != nil {
log.GetLogger().Errorf("PutInventory failed, %s, %s, requestId %s", resp.ErrCode, resp.ErrMsg, resp.Result.RequestId)
}
} else if resp.Result != nil {
log.GetLogger().Infof("PutInventory success, requestId %s", resp.Result.RequestId)
}
}
return err
}
func Compress(input string) (output string) {
buf := new(bytes.Buffer)
w, _ := flate.NewWriter(buf, 7)
w.Write([]byte(input))
w.Flush()
output = base64.StdEncoding.EncodeToString(buf.Bytes())
return
}
func (i *OOSCallerImpl) PutInventory(input *model.PutInventoryInput) (err error) {
itemString, err := jsonutil.Marshal(input.Items)
if err != nil {
return err
}
compressString := Compress(itemString)
var resp *ApiResponse = &ApiResponse{}
err = PutInventory(compressString, resp)
return err
}
func NewOOSCallerImpl() (*OOSCallerImpl, error) {
var ooscaller = OOSCallerImpl{}
return &ooscaller, nil
}