bilibili-backup/app/service/bbq/push/dao/jpush/client.go
2019-04-22 02:59:20 +00:00

68 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package jpush
import (
"bytes"
"encoding/base64"
"io/ioutil"
"net/http"
"time"
"go-common/library/stat"
"go-common/library/stat/prom"
)
const (
pushURL = "https://api.jpush.cn/v3/push"
// 如果创建的极光应用分配的北京机房,并且 API 调用方的服务器也位于北京,则比较适合调用极光北京机房的 API可以提升一定的响应速度。
// PUSH_URL = "https://bjapi.push.jiguang.cn/v3/push"
// VALIDATE_URL = "https://api.jpush.cn/v3/push/validate"
// GROUP_PUSH_URL = "https://api.jpush.cn/v3/grouppush"
)
// Client for JPush
type Client struct {
Auth string
Stats stat.Stat
Timeout time.Duration
}
// New .
func New(appKey string, secretKey string, timeout time.Duration) *Client {
auth := "Basic " + base64.StdEncoding.EncodeToString([]byte(appKey+":"+secretKey))
return &Client{
Auth: auth,
Stats: prom.HTTPClient,
Timeout: timeout,
}
}
// Push .
func (clt *Client) Push(b []byte) (resp []byte, err error) {
if clt.Stats != nil {
now := time.Now()
defer func() {
clt.Stats.Timing(pushURL, int64(time.Since(now)/time.Millisecond))
// log.Info("jpush stats timing: %v", int64(time.Since(now)/time.Millisecond))
if err != nil {
clt.Stats.Incr(pushURL, "failed")
}
}()
}
req, err := http.NewRequest("POST", pushURL, bytes.NewBuffer(b))
req.Header.Add("Charset", "UTF-8")
req.Header.Add("Authorization", clt.Auth)
req.Header.Add("Content-Type", "application/json")
client := &http.Client{Timeout: clt.Timeout}
httpResp, err := client.Do(req)
if err != nil {
return
}
defer httpResp.Body.Close()
return ioutil.ReadAll(httpResp.Body)
}
// GetTimeout .
func (clt *Client) GetTimeout() time.Duration {
return clt.Timeout
}