(rule *models.AlertRule, notifyTarget *NotifyTarget, event *models.AlertCurEvent)
| 762 | } |
| 763 | |
| 764 | func (e *Dispatch) SendCallbacks(rule *models.AlertRule, notifyTarget *NotifyTarget, event *models.AlertCurEvent) { |
| 765 | uids := notifyTarget.ToUidList() |
| 766 | urls := notifyTarget.ToCallbackList() |
| 767 | whMap := notifyTarget.ToWebhookMap() |
| 768 | ogw := event.OverrideGlobalWebhook() |
| 769 | for _, urlStr := range urls { |
| 770 | if len(urlStr) == 0 { |
| 771 | continue |
| 772 | } |
| 773 | |
| 774 | cbCtx := sender.BuildCallBackContext(e.ctx, urlStr, rule, []*models.AlertCurEvent{event}, uids, e.userCache, e.alerting.WebhookBatchSend, e.Astats) |
| 775 | |
| 776 | if wh, ok := whMap[cbCtx.CallBackURL]; !ogw && ok && wh.Enable { |
| 777 | logger.Debugf("SendCallbacks: webhook[%s] is in global conf.", cbCtx.CallBackURL) |
| 778 | continue |
| 779 | } |
| 780 | |
| 781 | if strings.HasPrefix(urlStr, "${ibex}") { |
| 782 | e.CallBacks[models.IbexDomain].CallBack(cbCtx) |
| 783 | continue |
| 784 | } |
| 785 | |
| 786 | if !(strings.HasPrefix(urlStr, "http://") || strings.HasPrefix(urlStr, "https://")) { |
| 787 | cbCtx.CallBackURL = "http://" + urlStr |
| 788 | } |
| 789 | |
| 790 | parsedURL, err := url.Parse(urlStr) |
| 791 | if err != nil { |
| 792 | logger.Errorf("SendCallbacks: failed to url.Parse(urlStr=%s): %v", urlStr, err) |
| 793 | continue |
| 794 | } |
| 795 | |
| 796 | // process feishu card |
| 797 | if parsedURL.Host == models.FeishuDomain && parsedURL.Query().Get("card") == "1" { |
| 798 | e.CallBacks[models.FeishuCardDomain].CallBack(cbCtx) |
| 799 | continue |
| 800 | } |
| 801 | |
| 802 | // process lark card |
| 803 | if parsedURL.Host == models.LarkDomain && parsedURL.Query().Get("card") == "1" { |
| 804 | e.CallBacks[models.LarkCardDomain].CallBack(cbCtx) |
| 805 | continue |
| 806 | } |
| 807 | |
| 808 | callBacker, ok := e.CallBacks[parsedURL.Host] |
| 809 | if ok { |
| 810 | callBacker.CallBack(cbCtx) |
| 811 | } else { |
| 812 | e.CallBacks[models.DefaultDomain].CallBack(cbCtx) |
| 813 | } |
| 814 | } |
| 815 | } |
| 816 | |
| 817 | func (e *Dispatch) HandleIbex(rule *models.AlertRule, event *models.AlertCurEvent) { |
| 818 | // 解析 RuleConfig 字段 |
no test coverage detected