|
|
@@ -1,14 +1,15 @@
|
|
|
package notifiers
|
|
|
|
|
|
import (
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+
|
|
|
"github.com/grafana/grafana/pkg/bus"
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
|
"github.com/grafana/grafana/pkg/log"
|
|
|
"github.com/grafana/grafana/pkg/metrics"
|
|
|
m "github.com/grafana/grafana/pkg/models"
|
|
|
"github.com/grafana/grafana/pkg/services/alerting"
|
|
|
- "strconv"
|
|
|
- "strings"
|
|
|
)
|
|
|
|
|
|
func init() {
|
|
|
@@ -23,6 +24,14 @@ func init() {
|
|
|
<span class="gf-form-label width-10">Url</span>
|
|
|
<input type="text" required class="gf-form-input max-width-26" ng-model="ctrl.model.settings.url" placeholder="http://sensu-api.local:4567/results"></input>
|
|
|
</div>
|
|
|
+ <div class="gf-form">
|
|
|
+ <span class="gf-form-label width-10">Source</span>
|
|
|
+ <input type="text" class="gf-form-input max-width-14" ng-model="ctrl.model.settings.source"></input>
|
|
|
+ </div>
|
|
|
+ <div class="gf-form">
|
|
|
+ <span class="gf-form-label width-10">Handler</span>
|
|
|
+ <input type="text" class="gf-form-input max-width-14" ng-model="ctrl.model.settings.handler" placeholder="default"></input>
|
|
|
+ </div>
|
|
|
<div class="gf-form">
|
|
|
<span class="gf-form-label width-10">Username</span>
|
|
|
<input type="text" class="gf-form-input max-width-14" ng-model="ctrl.model.settings.username"></input>
|
|
|
@@ -46,7 +55,9 @@ func NewSensuNotifier(model *m.AlertNotification) (alerting.Notifier, error) {
|
|
|
NotifierBase: NewNotifierBase(model.Id, model.IsDefault, model.Name, model.Type, model.Settings),
|
|
|
Url: url,
|
|
|
User: model.Settings.Get("username").MustString(),
|
|
|
+ Source: model.Settings.Get("source").MustString(),
|
|
|
Password: model.Settings.Get("password").MustString(),
|
|
|
+ Handler: model.Settings.Get("handler").MustString(),
|
|
|
log: log.New("alerting.notifier.sensu"),
|
|
|
}, nil
|
|
|
}
|
|
|
@@ -54,8 +65,10 @@ func NewSensuNotifier(model *m.AlertNotification) (alerting.Notifier, error) {
|
|
|
type SensuNotifier struct {
|
|
|
NotifierBase
|
|
|
Url string
|
|
|
+ Source string
|
|
|
User string
|
|
|
Password string
|
|
|
+ Handler string
|
|
|
log log.Logger
|
|
|
}
|
|
|
|
|
|
@@ -67,9 +80,13 @@ func (this *SensuNotifier) Notify(evalContext *alerting.EvalContext) error {
|
|
|
bodyJSON.Set("ruleId", evalContext.Rule.Id)
|
|
|
// Sensu alerts cannot have spaces in them
|
|
|
bodyJSON.Set("name", strings.Replace(evalContext.Rule.Name, " ", "_", -1))
|
|
|
- // Sensu alerts require a command
|
|
|
- // We set it to the grafana ruleID
|
|
|
- bodyJSON.Set("source", "grafana_rule_"+strconv.FormatInt(evalContext.Rule.Id, 10))
|
|
|
+ // Sensu alerts require a source. We set it to the user-specified value (optional),
|
|
|
+ // else we fallback and use the grafana ruleID.
|
|
|
+ if this.Source != "" {
|
|
|
+ bodyJSON.Set("source", this.Source)
|
|
|
+ } else {
|
|
|
+ bodyJSON.Set("source", "grafana_rule_"+strconv.FormatInt(evalContext.Rule.Id, 10))
|
|
|
+ }
|
|
|
// Finally, sensu expects an output
|
|
|
// We set it to a default output
|
|
|
bodyJSON.Set("output", "Grafana Metric Condition Met")
|
|
|
@@ -83,6 +100,10 @@ func (this *SensuNotifier) Notify(evalContext *alerting.EvalContext) error {
|
|
|
bodyJSON.Set("status", 0)
|
|
|
}
|
|
|
|
|
|
+ if this.Handler != "" {
|
|
|
+ bodyJSON.Set("handler", this.Handler)
|
|
|
+ }
|
|
|
+
|
|
|
ruleUrl, err := evalContext.GetRuleUrl()
|
|
|
if err == nil {
|
|
|
bodyJSON.Set("ruleUrl", ruleUrl)
|