@ -872,7 +872,7 @@ func TestProvisioningApi(t *testing.T) {
insertRule ( t , sut , rule1 )
insertRule ( t , sut , createTestAlertRule ( "rule2" , 1 ) )
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: my-cool-group\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n - uid: rule2\n title: rule2\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n"
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: my-cool-group\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n - uid: rule2\n title: rule2\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n active_time_intervals:\n - test-active\n "
response := sut . RouteGetAlertRuleGroupExport ( & rc , "folder-uid" , "my-cool-group" )
require . Equal ( t , 200 , response . Status ( ) )
@ -888,7 +888,7 @@ func TestProvisioningApi(t *testing.T) {
insertRule ( t , sut , createTestAlertRule ( "rule2" , 1 ) )
rc . Req . Header . Add ( "Accept" , "application/json" )
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"my-cool-group","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false}, { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}]} `
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"my-cool-group","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false}, { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}]} `
response := sut . RouteGetAlertRuleGroupExport ( & rc , "folder-uid" , "my-cool-group" )
require . Equal ( t , 200 , response . Status ( ) )
@ -902,7 +902,7 @@ func TestProvisioningApi(t *testing.T) {
insertRule ( t , sut , createTestAlertRule ( "rule2" , 1 ) )
rc . Req . Header . Add ( "Accept" , "application/yaml" )
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: my-cool-group\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n - uid: rule2\n title: rule2\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n"
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: my-cool-group\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n active_time_intervals:\n - test-active\n - uid: rule2\n title: rule2\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n active_time_intervals:\n - test-activ e\n"
response := sut . RouteGetAlertRuleGroupExport ( & rc , "folder-uid" , "my-cool-group" )
@ -986,6 +986,7 @@ func TestProvisioningApi(t *testing.T) {
group_interval = "5s"
repeat_interval = "5m"
mute_timings = [ "test-mute" ]
active_timings = [ "test-active" ]
}
}
}
@ -1120,7 +1121,7 @@ func TestProvisioningApi(t *testing.T) {
rc := createTestRequestCtx ( )
insertRule ( t , sut , createTestAlertRule ( "rule1" , 1 ) )
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"my-cool-group","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}]} `
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"my-cool-group","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}]} `
rc . Req . Header . Add ( "Accept" , "application/json" )
response := sut . RouteGetAlertRuleExport ( & rc , "rule1" )
@ -1135,7 +1136,7 @@ func TestProvisioningApi(t *testing.T) {
insertRule ( t , sut , createTestAlertRule ( "rule1" , 1 ) )
rc . Req . Header . Add ( "Accept" , "application/yaml" )
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: my-cool-group\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n"
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: my-cool-group\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n active_time_intervals:\n - test-active\n "
response := sut . RouteGetAlertRuleExport ( & rc , "rule1" )
@ -1245,7 +1246,7 @@ func TestProvisioningApi(t *testing.T) {
insertRule ( t , sut , rule3 )
rc . Req . Header . Add ( "Accept" , "application/json" )
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Email"}}]}, { "orgId":1,"name":"groupb","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}, { "orgId":1,"name":"groupb","folder":"Folder Title2","interval":"1m","rules":[ { "uid":"rule3","title":"rule3","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}]} `
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Email"}}]}, { "orgId":1,"name":"groupb","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}, { "orgId":1,"name":"groupb","folder":"Folder Title2","interval":"1m","rules":[ { "uid":"rule3","title":"rule3","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-activ e"]}}]}]} `
response := sut . RouteGetAlertRulesExport ( & rc )
require . Equal ( t , 200 , response . Status ( ) )
@ -1265,7 +1266,7 @@ func TestProvisioningApi(t *testing.T) {
insertRule ( t , sut , rule3 )
rc . Req . Header . Add ( "Accept" , "application/yaml" )
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: groupa\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Email\n - orgId: 1\n name: groupb\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule2\n title: rule2\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n - orgId: 1\n name: groupb\n folder: Folder Title2\n interval: 1m\n rules:\n - uid: rule3\n title: rule3\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n"
expectedResponse := "apiVersion: 1\ngroups:\n - orgId: 1\n name: groupa\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule1\n title: rule1\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Email\n - orgId: 1\n name: groupb\n folder: Folder Title\n interval: 1m\n rules:\n - uid: rule2\n title: rule2\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n active_time_intervals:\n - test-active\n - orgId: 1\n name: groupb\n folder: Folder Title2\n interval: 1m\n rules:\n - uid: rule3\n title: rule3\n condition: A\n data:\n - refId: A\n relativeTimeRange:\n from: 60\n to: 0\n datasourceUid: \"\"\n model:\n conditions:\n - evaluator:\n params:\n - 3\n type: gt\n operator:\n type: and\n query:\n params:\n - A\n reducer:\n type: last\n type: query\n datasource:\n type: __expr__\n uid: __expr__\n expression: 1==0\n intervalMs: 1000\n maxDataPoints: 43200\n refId: A\n type: math\n noDataState: OK\n execErrState: OK\n for: 0s\n isPaused: false\n notification_settings:\n receiver: Test-Receiver\n group_by:\n - alertname\n - grafana_folder\n - test\n group_wait: 1s\n group_interval: 5s\n repeat_interval: 5m\n mute_time_intervals:\n - test-mute\n active_time_intervals:\n - test-activ e\n"
response := sut . RouteGetAlertRulesExport ( & rc )
require . Equal ( t , 200 , response . Status ( ) )
@ -1281,7 +1282,7 @@ func TestProvisioningApi(t *testing.T) {
rc . Req . Header . Add ( "Accept" , "application/json" )
rc . Req . Form . Set ( "folderUid" , "folder-uid" )
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}, { "orgId":1,"name":"groupb","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}]} `
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}, { "orgId":1,"name":"groupb","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-activ e"]}}]}]} `
response := sut . RouteGetAlertRulesExport ( & rc )
require . Equal ( t , 200 , response . Status ( ) )
@ -1298,7 +1299,7 @@ func TestProvisioningApi(t *testing.T) {
rc . Req . Header . Add ( "Accept" , "application/json" )
rc . Req . Form . Set ( "folder_uid" , "folder-uid" )
rc . Req . Form . Add ( "folder_uid" , "folder-uid2" )
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}, { "orgId":1,"name":"groupb","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}, { "orgId":1,"name":"groupb","folder":"Folder Title2","interval":"1m","rules":[ { "uid":"rule3","title":"rule3","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}]} `
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}, { "orgId":1,"name":"groupb","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule2","title":"rule2","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}, { "orgId":1,"name":"groupb","folder":"Folder Title2","interval":"1m","rules":[ { "uid":"rule3","title":"rule3","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-activ e"]}}]}]} `
response := sut . RouteGetAlertRulesExport ( & rc )
require . Equal ( t , 200 , response . Status ( ) )
@ -1316,7 +1317,7 @@ func TestProvisioningApi(t *testing.T) {
rc . Req . Form . Set ( "folderUid" , "folder-uid" )
rc . Req . Form . Set ( "group" , "groupa" )
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}]} `
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}]} `
response := sut . RouteGetAlertRulesExport ( & rc )
require . Equal ( t , 200 , response . Status ( ) )
@ -1354,7 +1355,7 @@ func TestProvisioningApi(t *testing.T) {
rc . Req . Header . Add ( "Accept" , "application/json" )
rc . Req . Form . Set ( "ruleUid" , "rule1" )
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"]}}]}]} `
expectedResponse := ` { "apiVersion":1,"groups":[ { "orgId":1,"name":"groupa","folder":"Folder Title","interval":"1m","rules":[ { "uid":"rule1","title":"rule1","condition":"A","data":[ { "refId":"A","relativeTimeRange": { "from":60,"to":0},"datasourceUid":"","model": { "conditions":[ { "evaluator": { "params":[3],"type":"gt"},"operator": { "type":"and"},"query": { "params":["A"]},"reducer": { "type":"last"},"type":"query"}],"datasource": { "type":"__expr__","uid":"__expr__"},"expression":"1==0","intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}],"noDataState":"OK","execErrState":"OK","for":"0s","isPaused":false,"notification_settings": { "receiver":"Test-Receiver","group_by":["alertname","grafana_folder","test"],"group_wait":"1s","group_interval":"5s","repeat_interval":"5m","mute_time_intervals":["test-mute"],"active_time_intervals":["test-active"] }}]}]} `
response := sut . RouteGetAlertRulesExport ( & rc )
@ -1471,7 +1472,7 @@ func TestProvisioningApi(t *testing.T) {
rc := createTestRequestCtx ( )
rc . Req . Header . Add ( "Accept" , "application/json" )
expectedResponse := ` { "apiVersion":1,"policies":[ { "orgId":1,"receiver":"default-receiver","group_by":["g1","g2"],"routes":[ { "receiver":"nested-receiver","group_by":["g3","g4"],"matchers":["a=\"b\""],"object_matchers":[["foo","=","bar"]],"mute_time_intervals":["interval"],"continue":true,"group_wait":"5m","group_interval":"5m","repeat_interval":"5m"}],"group_wait":"30s","group_interval":"5m","repeat_interval":"1h"}]} `
expectedResponse := ` { "apiVersion":1,"policies":[ { "orgId":1,"receiver":"default-receiver","group_by":["g1","g2"],"routes":[ { "receiver":"nested-receiver","group_by":["g3","g4"],"matchers":["a=\"b\""],"object_matchers":[["foo","=","bar"]],"mute_time_intervals":["interval"],"active_time_intervals":["active"]," continue":true,"group_wait":"5m","group_interval":"5m","repeat_interval":"5m"}],"group_wait":"30s","group_interval":"5m","repeat_interval":"1h"}]} `
response := sut . RouteGetPolicyTreeExport ( & rc )
@ -1485,7 +1486,7 @@ func TestProvisioningApi(t *testing.T) {
rc := createTestRequestCtx ( )
rc . Req . Header . Add ( "Accept" , "application/yaml" )
expectedResponse := "apiVersion: 1\npolicies:\n - orgId: 1\n receiver: default-receiver\n group_by:\n - g1\n - g2\n routes:\n - receiver: nested-receiver\n group_by:\n - g3\n - g4\n matchers:\n - a=\"b\"\n object_matchers:\n - - foo\n - =\n - bar\n mute_time_intervals:\n - interval\n continue: true\n group_wait: 5m\n group_interval: 5m\n repeat_interval: 5m\n group_wait: 30s\n group_interval: 5m\n repeat_interval: 1h\n"
expectedResponse := "apiVersion: 1\npolicies:\n - orgId: 1\n receiver: default-receiver\n group_by:\n - g1\n - g2\n routes:\n - receiver: nested-receiver\n group_by:\n - g3\n - g4\n matchers:\n - a=\"b\"\n object_matchers:\n - - foo\n - =\n - bar\n mute_time_intervals:\n - interval\n active_time_intervals:\n - active\n continue: true\n group_wait: 5m\n group_interval: 5m\n repeat_interval: 5m\n group_wait: 30s\n group_interval: 5m\n repeat_interval: 1h\n"
response := sut . RouteGetPolicyTreeExport ( & rc )
@ -1499,7 +1500,7 @@ func TestProvisioningApi(t *testing.T) {
rc := createTestRequestCtx ( )
rc . Req . Form . Add ( "format" , "hcl" )
expectedResponse := "resource \"grafana_notification_policy\" \"notification_policy_1\" {\n contact_point = \"default-receiver\"\n group_by = [\"g1\", \"g2\"]\n\n policy {\n contact_point = \"nested-receiver\"\n group_by = [\"g3\", \"g4\"]\n\n matcher {\n label = \"foo\"\n match = \"=\"\n value = \"bar\"\n }\n\n mute_timings = [\"interval\"]\n continue = true\n group_wait = \"5m\"\n group_interval = \"5m\"\n repeat_interval = \"5m\"\n }\n\n group_wait = \"30s\"\n group_interval = \"5m\"\n repeat_interval = \"1h\"\n}\n"
expectedResponse := "resource \"grafana_notification_policy\" \"notification_policy_1\" {\n contact_point = \"default-receiver\"\n group_by = [\"g1\", \"g2\"]\n\n policy {\n contact_point = \"nested-receiver\"\n group_by = [\"g3\", \"g4\"]\n\n matcher {\n label = \"foo\"\n match = \"=\"\n value = \"bar\"\n }\n\n mute_timings = [\"interval\"]\n active_timings = [\"active\"]\n continue = true\n group_wait = \"5m\"\n group_interval = \"5m\"\n repeat_interval = \"5m\"\n }\n\n group_wait = \"30s\"\n group_interval = \"5m\"\n repeat_interval = \"1h\"\n}\n"
response := sut . RouteGetPolicyTreeExport ( & rc )
@ -2152,12 +2153,13 @@ func createFakeNotificationPolicyService() *fakeNotificationPolicyService {
Value : "b" ,
} ,
} ,
ObjectMatchers : definitions . ObjectMatchers { { Type : 0 , Name : "foo" , Value : "bar" } } ,
MuteTimeIntervals : [ ] string { "interval" } ,
Continue : true ,
GroupWait : & minutes ,
GroupInterval : & minutes ,
RepeatInterval : & minutes ,
ObjectMatchers : definitions . ObjectMatchers { { Type : 0 , Name : "foo" , Value : "bar" } } ,
MuteTimeIntervals : [ ] string { "interval" } ,
ActiveTimeIntervals : [ ] string { "active" } ,
Continue : true ,
GroupWait : & minutes ,
GroupInterval : & minutes ,
RepeatInterval : & minutes ,
} } ,
} ,
prov : models . ProvenanceAPI ,
@ -2297,12 +2299,13 @@ func createTestAlertRule(title string, orgID int64) definitions.ProvisionedAlert
NoDataState : definitions . OK ,
ExecErrState : definitions . OkErrState ,
NotificationSettings : & definitions . AlertRuleNotificationSettings {
Receiver : "Test-Receiver" ,
GroupBy : [ ] string { "alertname" , "grafana_folder" , "test" } ,
GroupWait : util . Pointer ( model . Duration ( 1 * time . Second ) ) ,
GroupInterval : util . Pointer ( model . Duration ( 5 * time . Second ) ) ,
RepeatInterval : util . Pointer ( model . Duration ( 5 * time . Minute ) ) ,
MuteTimeIntervals : [ ] string { "test-mute" } ,
Receiver : "Test-Receiver" ,
GroupBy : [ ] string { "alertname" , "grafana_folder" , "test" } ,
GroupWait : util . Pointer ( model . Duration ( 1 * time . Second ) ) ,
GroupInterval : util . Pointer ( model . Duration ( 5 * time . Second ) ) ,
RepeatInterval : util . Pointer ( model . Duration ( 5 * time . Minute ) ) ,
MuteTimeIntervals : [ ] string { "test-mute" } ,
ActiveTimeIntervals : [ ] string { "test-active" } ,
} ,
}
}