chore(push): send error to specific URL (#621)
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
		
							parent
							
								
									3feeeb796d
								
							
						
					
					
						commit
						6d65c1ea6e
					
				| 
						 | 
				
			
			@ -250,6 +250,15 @@ func SendNotification(req queue.QueuedMessage, cfg config.ConfYaml) (resp *Respo
 | 
			
		|||
		resp, err = PushToHuawei(*v, cfg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if cfg.Core.FeedbackURL != "" {
 | 
			
		||||
		for _, l := range resp.Logs {
 | 
			
		||||
			err := DispatchFeedback(l, cfg.Core.FeedbackURL, cfg.Core.FeedbackTimeout)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				logx.LogError.Error(err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,6 @@ import (
 | 
			
		|||
	"github.com/sideshow/apns2/certificate"
 | 
			
		||||
	"github.com/sideshow/apns2/payload"
 | 
			
		||||
	"github.com/sideshow/apns2/token"
 | 
			
		||||
	"github.com/sirupsen/logrus"
 | 
			
		||||
	"golang.org/x/net/http2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -391,10 +390,6 @@ func getApnsClient(cfg config.ConfYaml, req PushNotification) (client *apns2.Cli
 | 
			
		|||
func PushToIOS(req PushNotification, cfg config.ConfYaml) (resp *ResponsePush, err error) {
 | 
			
		||||
	logx.LogAccess.Debug("Start push notification for iOS")
 | 
			
		||||
 | 
			
		||||
	if cfg.Core.Sync && !core.IsLocalQueue(core.Queue(cfg.Queue.Engine)) {
 | 
			
		||||
		cfg.Core.Sync = false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var (
 | 
			
		||||
		retryCount = 0
 | 
			
		||||
		maxRetry   = cfg.Ios.MaxRetry
 | 
			
		||||
| 
						 | 
				
			
			@ -431,16 +426,7 @@ Retry:
 | 
			
		|||
 | 
			
		||||
				// apns server error
 | 
			
		||||
				errLog := logPush(cfg, core.FailedPush, token, req, err)
 | 
			
		||||
				if cfg.Core.Sync {
 | 
			
		||||
					resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
				} else if cfg.Core.FeedbackURL != "" {
 | 
			
		||||
					go func(logger *logrus.Logger, log logx.LogPushEntry, url string, timeout int64) {
 | 
			
		||||
						err := DispatchFeedback(log, url, timeout)
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							logger.Error(err)
 | 
			
		||||
						}
 | 
			
		||||
					}(logx.LogError, errLog, cfg.Core.FeedbackURL, cfg.Core.FeedbackTimeout)
 | 
			
		||||
				}
 | 
			
		||||
				resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
 | 
			
		||||
				status.StatStorage.AddIosError(1)
 | 
			
		||||
				// We should retry only "retryable" statuses. More info about response:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,6 @@ import (
 | 
			
		|||
	"github.com/appleboy/gorush/status"
 | 
			
		||||
 | 
			
		||||
	"github.com/appleboy/go-fcm"
 | 
			
		||||
	"github.com/sirupsen/logrus"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// InitFCMClient use for initialize FCM Client.
 | 
			
		||||
| 
						 | 
				
			
			@ -109,10 +108,6 @@ func GetAndroidNotification(req PushNotification) *fcm.Message {
 | 
			
		|||
func PushToAndroid(req PushNotification, cfg config.ConfYaml) (resp *ResponsePush, err error) {
 | 
			
		||||
	logx.LogAccess.Debug("Start push notification for Android")
 | 
			
		||||
 | 
			
		||||
	if cfg.Core.Sync && !core.IsLocalQueue(core.Queue(cfg.Queue.Engine)) {
 | 
			
		||||
		cfg.Core.Sync = false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var (
 | 
			
		||||
		client     *fcm.Client
 | 
			
		||||
		retryCount = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -154,30 +149,12 @@ Retry:
 | 
			
		|||
 | 
			
		||||
		if req.IsTopic() {
 | 
			
		||||
			errLog := logPush(cfg, core.FailedPush, req.To, req, err)
 | 
			
		||||
			if cfg.Core.Sync {
 | 
			
		||||
				resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
			} else if cfg.Core.FeedbackURL != "" {
 | 
			
		||||
				go func(logger *logrus.Logger, log logx.LogPushEntry, url string, timeout int64) {
 | 
			
		||||
					err := DispatchFeedback(log, url, timeout)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						logger.Error(err)
 | 
			
		||||
					}
 | 
			
		||||
				}(logx.LogError, errLog, cfg.Core.FeedbackURL, cfg.Core.FeedbackTimeout)
 | 
			
		||||
			}
 | 
			
		||||
			resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
			status.StatStorage.AddAndroidError(1)
 | 
			
		||||
		} else {
 | 
			
		||||
			for _, token := range req.Tokens {
 | 
			
		||||
				errLog := logPush(cfg, core.FailedPush, token, req, err)
 | 
			
		||||
				if cfg.Core.Sync {
 | 
			
		||||
					resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
				} else if cfg.Core.FeedbackURL != "" {
 | 
			
		||||
					go func(logger *logrus.Logger, log logx.LogPushEntry, url string, timeout int64) {
 | 
			
		||||
						err := DispatchFeedback(log, url, timeout)
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							logger.Error(err)
 | 
			
		||||
						}
 | 
			
		||||
					}(logx.LogError, errLog, cfg.Core.FeedbackURL, cfg.Core.FeedbackTimeout)
 | 
			
		||||
				}
 | 
			
		||||
				resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
			}
 | 
			
		||||
			status.StatStorage.AddAndroidError(int64(len(req.Tokens)))
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -209,16 +186,7 @@ Retry:
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			errLog := logPush(cfg, core.FailedPush, to, req, result.Error)
 | 
			
		||||
			if cfg.Core.Sync {
 | 
			
		||||
				resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
			} else if cfg.Core.FeedbackURL != "" {
 | 
			
		||||
				go func(logger *logrus.Logger, log logx.LogPushEntry, url string, timeout int64) {
 | 
			
		||||
					err := DispatchFeedback(log, url, timeout)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						logger.Error(err)
 | 
			
		||||
					}
 | 
			
		||||
				}(logx.LogError, errLog, cfg.Core.FeedbackURL, cfg.Core.FeedbackTimeout)
 | 
			
		||||
			}
 | 
			
		||||
			resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -240,9 +208,7 @@ Retry:
 | 
			
		|||
		} else {
 | 
			
		||||
			// failure
 | 
			
		||||
			errLog := logPush(cfg, core.FailedPush, to, req, res.Error)
 | 
			
		||||
			if cfg.Core.Sync {
 | 
			
		||||
				resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
			}
 | 
			
		||||
			resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -251,9 +217,7 @@ Retry:
 | 
			
		|||
		newTokens = append(newTokens, res.FailedRegistrationIDs...)
 | 
			
		||||
 | 
			
		||||
		errLog := logPush(cfg, core.FailedPush, notification.To, req, errors.New("device group: partial success or all fails"))
 | 
			
		||||
		if cfg.Core.Sync {
 | 
			
		||||
			resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
		}
 | 
			
		||||
		resp.Logs = append(resp.Logs, errLog)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(newTokens) > 0 && retryCount < maxRetry {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -169,10 +169,6 @@ func GetHuaweiNotification(req PushNotification) (*model.MessageRequest, error)
 | 
			
		|||
func PushToHuawei(req PushNotification, cfg config.ConfYaml) (resp *ResponsePush, err error) {
 | 
			
		||||
	logx.LogAccess.Debug("Start push notification for Huawei")
 | 
			
		||||
 | 
			
		||||
	if cfg.Core.Sync && !core.IsLocalQueue(core.Queue(cfg.Queue.Engine)) {
 | 
			
		||||
		cfg.Core.Sync = false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var (
 | 
			
		||||
		client     *client.HMSClient
 | 
			
		||||
		retryCount = 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue