agent/clientreport/clientreport.go (35 lines of code) (raw):
package clientreport
import (
"encoding/json"
"math"
"time"
"github.com/aliyun/aliyun_assist_client/agent/log"
"github.com/aliyun/aliyun_assist_client/agent/util"
"github.com/aliyun/aliyun_assist_client/thirdparty/sirupsen/logrus"
)
type ClientReport struct {
ReportType string `json:"type"`
Info string `json:"info"`
}
// SendReport marshals client report data and sends to server
func SendReport(report ClientReport) (string, error) {
requestPayloadBytes, err := json.Marshal(report)
if err != nil {
return "", err
}
requestPayload := string(requestPayloadBytes)
requestURL := util.GetClientReportService()
response, err := util.HttpPost(requestURL, requestPayload, "")
for i := 0; i < 3 && err != nil; i++ {
sleepDuration := time.Duration(math.Pow(2, float64(i))) * time.Second
time.Sleep(sleepDuration)
response, err = util.HttpPost(requestURL, requestPayload, "")
}
if err != nil {
log.GetLogger().WithFields(logrus.Fields{
"requestURL": requestURL,
"requestPayload": requestPayload,
}).Errorln("Network is unavailable for client report request")
return "", err
}
return response, nil
}