Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
597103a1
Commit
597103a1
authored
Aug 12, 2016
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'alerting' of github.com:grafana/grafana into alerting
parents
06210a4a
1dcae464
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
33 additions
and
112 deletions
+33
-112
pkg/api/alerting.go
+1
-1
pkg/api/dtos/alerting.go
+1
-1
pkg/metrics/graphite_test.go
+3
-3
pkg/metrics/metrics.go
+3
-3
pkg/models/alert.go
+2
-2
pkg/models/alert_test.go
+6
-6
pkg/services/alerting/extractor.go
+1
-1
pkg/services/alerting/extractor_test.go
+5
-5
pkg/services/alerting/notifiers/slack.go
+5
-4
pkg/services/alerting/rule.go
+2
-2
pkg/services/notifications/notifications_test.go
+0
-79
pkg/services/sqlstore/alert_test.go
+3
-3
pkg/services/sqlstore/migrations/alert_mig.go
+1
-1
public/app/features/alerting/alert_tab_ctrl.ts
+0
-1
No files found.
pkg/api/alerting.go
View file @
597103a1
...
...
@@ -47,7 +47,7 @@ func GetAlerts(c *middleware.Context) Response {
DashboardId
:
alert
.
DashboardId
,
PanelId
:
alert
.
PanelId
,
Name
:
alert
.
Name
,
Description
:
alert
.
Description
,
Message
:
alert
.
Message
,
State
:
alert
.
State
,
Severity
:
alert
.
Severity
,
})
...
...
pkg/api/dtos/alerting.go
View file @
597103a1
...
...
@@ -12,7 +12,7 @@ type AlertRule struct {
DashboardId
int64
`json:"dashboardId"`
PanelId
int64
`json:"panelId"`
Name
string
`json:"name"`
Description
string
`json:"description
"`
Message
string
`json:"message
"`
State
m
.
AlertStateType
`json:"state"`
Severity
m
.
AlertSeverityType
`json:"severity"`
...
...
pkg/metrics/graphite_test.go
View file @
597103a1
...
...
@@ -19,7 +19,7 @@ func TestGraphitePublisher(t *testing.T) {
So
(
err
,
ShouldBeNil
)
sec
,
err
:=
setting
.
Cfg
.
NewSection
(
"metrics.graphite"
)
sec
.
NewKey
(
"prefix"
,
"service.grafana.%(instance_name)s"
)
sec
.
NewKey
(
"prefix"
,
"service.grafana.%(instance_name)s
.
"
)
sec
.
NewKey
(
"address"
,
"localhost:2003"
)
So
(
err
,
ShouldBeNil
)
...
...
@@ -30,7 +30,7 @@ func TestGraphitePublisher(t *testing.T) {
So
(
err
,
ShouldBeNil
)
So
(
publisher
,
ShouldNotBeNil
)
So
(
publisher
.
prefix
,
ShouldEqual
,
"service.grafana.hostname_with_dots_com"
)
So
(
publisher
.
prefix
,
ShouldEqual
,
"service.grafana.hostname_with_dots_com
.
"
)
})
Convey
(
"Test graphite publisher default values"
,
t
,
func
()
{
...
...
@@ -49,7 +49,7 @@ func TestGraphitePublisher(t *testing.T) {
So
(
err
,
ShouldBeNil
)
So
(
publisher
,
ShouldNotBeNil
)
So
(
publisher
.
prefix
,
ShouldEqual
,
"service.grafana.hostname_with_dots_com"
)
So
(
publisher
.
prefix
,
ShouldEqual
,
"service.grafana.hostname_with_dots_com
.
"
)
So
(
publisher
.
address
,
ShouldEqual
,
"localhost:2003"
)
})
}
pkg/metrics/metrics.go
View file @
597103a1
...
...
@@ -80,9 +80,9 @@ func initMetricVars(settings *MetricSettings) {
M_Alerting_Result_Info
=
RegCounter
(
"alerting.result"
,
"severity"
,
"info"
)
M_Alerting_Result_Ok
=
RegCounter
(
"alerting.result"
,
"severity"
,
"ok"
)
M_Alerting_Active_Alerts
=
RegCounter
(
"alerting.active_alerts"
)
M_Alerting_Notification_Sent_Slack
=
RegCounter
(
"alerting.notifcations_sent"
,
"type"
,
"slack"
)
M_Alerting_Notification_Sent_Email
=
RegCounter
(
"alerting.notifcations_sent"
,
"type"
,
"email"
)
M_Alerting_Notification_Sent_Webhook
=
RegCounter
(
"alerting.notifcations_sent"
,
"type"
,
"webhook"
)
M_Alerting_Notification_Sent_Slack
=
RegCounter
(
"alerting.notif
i
cations_sent"
,
"type"
,
"slack"
)
M_Alerting_Notification_Sent_Email
=
RegCounter
(
"alerting.notif
i
cations_sent"
,
"type"
,
"email"
)
M_Alerting_Notification_Sent_Webhook
=
RegCounter
(
"alerting.notif
i
cations_sent"
,
"type"
,
"webhook"
)
// Timers
M_DataSource_ProxyReq_Timer
=
RegTimer
(
"api.dataproxy.request.all"
)
...
...
pkg/models/alert.go
View file @
597103a1
...
...
@@ -36,7 +36,7 @@ type Alert struct {
DashboardId
int64
PanelId
int64
Name
string
Description
string
Message
string
Severity
AlertSeverityType
State
AlertStateType
Handler
int64
...
...
@@ -63,7 +63,7 @@ func (alert *Alert) ShouldUpdateState(newState AlertStateType) bool {
func
(
this
*
Alert
)
ContainsUpdates
(
other
*
Alert
)
bool
{
result
:=
false
result
=
result
||
this
.
Name
!=
other
.
Name
result
=
result
||
this
.
Description
!=
other
.
Description
result
=
result
||
this
.
Message
!=
other
.
Message
if
this
.
Settings
!=
nil
&&
other
.
Settings
!=
nil
{
json1
,
err1
:=
this
.
Settings
.
Encode
()
...
...
pkg/models/alert_test.go
View file @
597103a1
...
...
@@ -14,15 +14,15 @@ func TestAlertingModelTest(t *testing.T) {
json2
,
_
:=
simplejson
.
NewJson
([]
byte
(
`{ "field": "value" }`
))
rule1
:=
&
Alert
{
Settings
:
json1
,
Name
:
"Namn"
,
Description
:
"Description
"
,
Settings
:
json1
,
Name
:
"Namn"
,
Message
:
"Message
"
,
}
rule2
:=
&
Alert
{
Settings
:
json2
,
Name
:
"Namn"
,
Description
:
"Description
"
,
Settings
:
json2
,
Name
:
"Namn"
,
Message
:
"Message
"
,
}
Convey
(
"Testing AlertRule equals"
,
func
()
{
...
...
pkg/services/alerting/extractor.go
View file @
597103a1
...
...
@@ -88,7 +88,7 @@ func (e *DashAlertExtractor) GetAlerts() ([]*m.Alert, error) {
Name
:
jsonAlert
.
Get
(
"name"
)
.
MustString
(),
Handler
:
jsonAlert
.
Get
(
"handler"
)
.
MustInt64
(),
Enabled
:
jsonAlert
.
Get
(
"enabled"
)
.
MustBool
(),
Description
:
jsonAlert
.
Get
(
"description
"
)
.
MustString
(),
Message
:
jsonAlert
.
Get
(
"message
"
)
.
MustString
(),
Severity
:
m
.
AlertSeverityType
(
jsonAlert
.
Get
(
"severity"
)
.
MustString
()),
Frequency
:
getTimeDurationStringToSeconds
(
jsonAlert
.
Get
(
"frequency"
)
.
MustString
()),
}
...
...
pkg/services/alerting/extractor_test.go
View file @
597103a1
...
...
@@ -40,7 +40,7 @@ func TestAlertRuleExtraction(t *testing.T) {
"datasource": null,
"alert": {
"name": "name1",
"
description
": "desc1",
"
message
": "desc1",
"handler": 1,
"enabled": true,
"frequency": "60s",
...
...
@@ -65,7 +65,7 @@ func TestAlertRuleExtraction(t *testing.T) {
"datasource": "graphite2",
"alert": {
"name": "name2",
"
description
": "desc2",
"
message
": "desc2",
"handler": 0,
"enabled": true,
"frequency": "60s",
...
...
@@ -121,7 +121,7 @@ func TestAlertRuleExtraction(t *testing.T) {
for
_
,
v
:=
range
alerts
{
So
(
v
.
DashboardId
,
ShouldEqual
,
57
)
So
(
v
.
Name
,
ShouldNotBeEmpty
)
So
(
v
.
Description
,
ShouldNotBeEmpty
)
So
(
v
.
Message
,
ShouldNotBeEmpty
)
}
Convey
(
"should extract handler property"
,
func
()
{
...
...
@@ -146,9 +146,9 @@ func TestAlertRuleExtraction(t *testing.T) {
Convey
(
"should extract name and desc"
,
func
()
{
So
(
alerts
[
0
]
.
Name
,
ShouldEqual
,
"name1"
)
So
(
alerts
[
0
]
.
Description
,
ShouldEqual
,
"desc1"
)
So
(
alerts
[
0
]
.
Message
,
ShouldEqual
,
"desc1"
)
So
(
alerts
[
1
]
.
Name
,
ShouldEqual
,
"name2"
)
So
(
alerts
[
1
]
.
Description
,
ShouldEqual
,
"desc2"
)
So
(
alerts
[
1
]
.
Message
,
ShouldEqual
,
"desc2"
)
})
Convey
(
"should set datasourceId"
,
func
()
{
...
...
pkg/services/alerting/notifiers/slack.go
View file @
597103a1
...
...
@@ -9,6 +9,7 @@ import (
"github.com/grafana/grafana/pkg/metrics"
m
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/services/alerting"
"github.com/grafana/grafana/pkg/setting"
)
func
init
()
{
...
...
@@ -70,11 +71,11 @@ func (this *SlackNotifier) Notify(context *alerting.EvalContext) {
// "author_icon": "http://flickr.com/icons/bobby.jpg",
"title"
:
context
.
GetNotificationTitle
(),
"title_link"
:
ruleUrl
,
// "text": "Optional text that appears within the attachment"
,
"fields"
:
fields
,
"image_url"
:
context
.
ImagePublicUrl
,
"text"
:
context
.
Rule
.
Message
,
"fields"
:
fields
,
"image_url"
:
context
.
ImagePublicUrl
,
// "thumb_url": "http://example.com/path/to/thumb.png",
"footer"
:
"Grafana v
4.0.0"
,
"footer"
:
"Grafana v
"
+
setting
.
BuildVersion
,
"footer_icon"
:
"http://grafana.org/assets/img/fav32.png"
,
"ts"
:
time
.
Now
()
.
Unix
(),
},
...
...
pkg/services/alerting/rule.go
View file @
597103a1
...
...
@@ -17,7 +17,7 @@ type Rule struct {
PanelId
int64
Frequency
int64
Name
string
Description
string
Message
string
State
m
.
AlertStateType
Severity
m
.
AlertSeverityType
Conditions
[]
Condition
...
...
@@ -63,7 +63,7 @@ func NewRuleFromDBAlert(ruleDef *m.Alert) (*Rule, error) {
model
.
DashboardId
=
ruleDef
.
DashboardId
model
.
PanelId
=
ruleDef
.
PanelId
model
.
Name
=
ruleDef
.
Name
model
.
Description
=
ruleDef
.
Description
model
.
Message
=
ruleDef
.
Message
model
.
Frequency
=
ruleDef
.
Frequency
model
.
Severity
=
ruleDef
.
Severity
model
.
State
=
ruleDef
.
State
...
...
pkg/services/notifications/notifications_test.go
View file @
597103a1
...
...
@@ -40,84 +40,5 @@ func TestNotifications(t *testing.T) {
So
(
sentMsg
.
Subject
,
ShouldEqual
,
"Reset your Grafana password - asd@asd.com"
)
So
(
sentMsg
.
Body
,
ShouldNotContainSubstring
,
"Subject"
)
})
Convey
(
"Alert notifications"
,
func
()
{
// Convey("When sending reset email password", func() {
// cmd := &m.SendEmailCommand{
// Data: map[string]interface{}{
// "Name": "Name",
// "State": "Critical",
// "Description": "Description",
// "DashboardLink": "http://localhost:3000/dashboard/db/alerting",
// "AlertPageUrl": "http://localhost:3000/alerting",
// "DashboardImage": "http://localhost:3000/render/dashboard-solo/db/alerting?from=1466169458375&to=1466171258375&panelId=1&width=1000&height=500",
// "TriggeredAlerts": []testTriggeredAlert{
// {Name: "desktop", State: "Critical", ActualValue: 13},
// {Name: "mobile", State: "Warn", ActualValue: 5},
// },
// },
// To: []string{"asd@asd.com "},
// Template: "alert_notification.html",
// }
//
// err := sendEmailCommandHandler(cmd)
// So(err, ShouldBeNil)
//
// So(sentMsg.Body, ShouldContainSubstring, "Alertstate: Critical")
// So(sentMsg.Body, ShouldContainSubstring, "http://localhost:3000/dashboard/db/alerting")
// So(sentMsg.Body, ShouldContainSubstring, "Critical")
// So(sentMsg.Body, ShouldContainSubstring, "Warn")
// So(sentMsg.Body, ShouldContainSubstring, "mobile")
// So(sentMsg.Body, ShouldContainSubstring, "desktop")
// So(sentMsg.Subject, ShouldContainSubstring, "Grafana Alert: [ Critical ] ")
// })
//
// Convey("given critical", func() {
// cmd := &m.SendEmailCommand{
// Data: map[string]interface{}{
// "Name": "Name",
// "State": "Warn",
// "Description": "Description",
// "DashboardLink": "http://localhost:3000/dashboard/db/alerting",
// "DashboardImage": "http://localhost:3000/render/dashboard-solo/db/alerting?from=1466169458375&to=1466171258375&panelId=1&width=1000&height=500",
// "AlertPageUrl": "http://localhost:3000/alerting",
// "TriggeredAlerts": []testTriggeredAlert{
// {Name: "desktop", State: "Critical", ActualValue: 13},
// {Name: "mobile", State: "Warn", ActualValue: 5},
// },
// },
// To: []string{"asd@asd.com "},
// Template: "alert_notification.html",
// }
//
// err := sendEmailCommandHandler(cmd)
// So(err, ShouldBeNil)
// So(sentMsg.Body, ShouldContainSubstring, "Alertstate: Warn")
// So(sentMsg.Body, ShouldContainSubstring, "http://localhost:3000/dashboard/db/alerting")
// So(sentMsg.Body, ShouldContainSubstring, "Critical")
// So(sentMsg.Body, ShouldContainSubstring, "Warn")
// So(sentMsg.Body, ShouldContainSubstring, "mobile")
// So(sentMsg.Body, ShouldContainSubstring, "desktop")
// So(sentMsg.Subject, ShouldContainSubstring, "Grafana Alert: [ Warn ]")
// })
//
// Convey("given ok", func() {
// cmd := &m.SendEmailCommand{
// Data: map[string]interface{}{
// "Name": "Name",
// "State": "Ok",
// "Description": "Description",
// "DashboardLink": "http://localhost:3000/dashboard/db/alerting",
// "AlertPageUrl": "http://localhost:3000/alerting",
// },
// To: []string{"asd@asd.com "},
// Template: "alert_notification.html",
// }
//
// err := sendEmailCommandHandler(cmd)
// So(err, ShouldBeNil)
// So(sentMsg.Subject, ShouldContainSubstring, "Grafana Alert: [ Ok ]")
// })
})
})
}
pkg/services/sqlstore/alert_test.go
View file @
597103a1
...
...
@@ -20,7 +20,7 @@ func TestAlertingDataAccess(t *testing.T) {
DashboardId
:
testDash
.
Id
,
OrgId
:
testDash
.
OrgId
,
Name
:
"Alerting title"
,
Description
:
"Alerting description
"
,
Message
:
"Alerting message
"
,
Settings
:
simplejson
.
New
(),
Frequency
:
1
,
},
...
...
@@ -46,7 +46,7 @@ func TestAlertingDataAccess(t *testing.T) {
alert
:=
alertQuery
.
Result
[
0
]
So
(
err2
,
ShouldBeNil
)
So
(
alert
.
Name
,
ShouldEqual
,
"Alerting title"
)
So
(
alert
.
Description
,
ShouldEqual
,
"Alerting description
"
)
So
(
alert
.
Message
,
ShouldEqual
,
"Alerting message
"
)
So
(
alert
.
State
,
ShouldEqual
,
"pending"
)
So
(
alert
.
Frequency
,
ShouldEqual
,
1
)
})
...
...
@@ -146,7 +146,7 @@ func TestAlertingDataAccess(t *testing.T) {
PanelId
:
1
,
DashboardId
:
testDash
.
Id
,
Name
:
"Alerting title"
,
Description
:
"Alerting description
"
,
Message
:
"Alerting message
"
,
},
}
...
...
pkg/services/sqlstore/migrations/alert_mig.go
View file @
597103a1
...
...
@@ -14,7 +14,7 @@ func addAlertMigrations(mg *Migrator) {
{
Name
:
"panel_id"
,
Type
:
DB_BigInt
,
Nullable
:
false
},
{
Name
:
"org_id"
,
Type
:
DB_BigInt
,
Nullable
:
false
},
{
Name
:
"name"
,
Type
:
DB_NVarchar
,
Length
:
255
,
Nullable
:
false
},
{
Name
:
"
description
"
,
Type
:
DB_Text
,
Nullable
:
false
},
{
Name
:
"
message
"
,
Type
:
DB_Text
,
Nullable
:
false
},
{
Name
:
"state"
,
Type
:
DB_NVarchar
,
Length
:
255
,
Nullable
:
false
},
{
Name
:
"settings"
,
Type
:
DB_Text
,
Nullable
:
false
},
{
Name
:
"frequency"
,
Type
:
DB_BigInt
,
Nullable
:
false
},
...
...
public/app/features/alerting/alert_tab_ctrl.ts
View file @
597103a1
...
...
@@ -111,7 +111,6 @@ export class AlertTabCtrl {
var
defaultName
=
this
.
panel
.
title
+
' alert'
;
alert
.
name
=
alert
.
name
||
defaultName
;
alert
.
description
=
alert
.
description
||
defaultName
;
this
.
conditionModels
=
_
.
reduce
(
alert
.
conditions
,
(
memo
,
value
)
=>
{
memo
.
push
(
this
.
buildConditionModel
(
value
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment