diff --git a/Makefile b/Makefile index 82036eeb7..8b3d57c9c 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ NAME := unsee VERSION := $(shell git describe --tags --always --dirty='-dev') # Alertmanager instance used when running locally, points to mock data -MOCK_PATH := $(CURDIR)/mock/0.7.0 +MOCK_PATH := $(CURDIR)/mock/0.7.1 ALERTMANAGER_URI := file://$(MOCK_PATH) # Listen port when running locally PORT := 8080 diff --git a/mock/0.7.1/.ok b/mock/0.7.1/.ok new file mode 100644 index 000000000..e69de29bb diff --git a/mock/0.7.1/api/v1/alerts/groups b/mock/0.7.1/api/v1/alerts/groups new file mode 100644 index 000000000..107625dc9 --- /dev/null +++ b/mock/0.7.1/api/v1/alerts/groups @@ -0,0 +1,715 @@ +{ + "data": [ + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "alert": "Less than 10% disk space is free", + "dashboard": "http://localhost/dashboard.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Free_Disk_Space_Too_Low", + "cluster": "staging", + "instance": "server5", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-name", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Free_Disk_Space_Too_Low\"}", + "labels": { + "alertname": "Free_Disk_Space_Too_Low" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "help": "Example help annotation", + "summary": "Example summary", + "url": "http://localhost/example.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "HTTP_Probe_Failed", + "cluster": "dev", + "instance": "web1", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "3282f366-8362-4a0f-b7cb-1c4966dec0da" + ], + "state": "suppressed" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "HTTP_Probe_Failed", + "cluster": "dev", + "instance": "web2", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-name", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"HTTP_Probe_Failed\"}", + "labels": { + "alertname": "HTTP_Probe_Failed" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "dev", + "instance": "server6", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "d6984a93-a222-4dd9-8379-428b6db7e353" + ], + "state": "suppressed" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "dev", + "instance": "server7", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "d6984a93-a222-4dd9-8379-428b6db7e353" + ], + "state": "suppressed" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "dev", + "instance": "server8", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "d6984a93-a222-4dd9-8379-428b6db7e353" + ], + "state": "suppressed" + } + }, + { + "annotations": { + "summary": "Example summary", + "url": "http://localhost/example.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "prod", + "instance": "server1", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "prod", + "instance": "server2", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "staging", + "instance": "server3", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "staging", + "instance": "server4", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "staging", + "instance": "server5", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-name", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Host_Down\"}", + "labels": { + "alertname": "Host_Down" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "alert": "Memory usage exceeding threshold", + "dashboard": "http://localhost/dashboard.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Memory_Usage_Too_High", + "cluster": "prod", + "instance": "server2", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-name", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Memory_Usage_Too_High\"}", + "labels": { + "alertname": "Memory_Usage_Too_High" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "alert": "Less than 10% disk space is free", + "dashboard": "http://localhost/dashboard.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Free_Disk_Space_Too_Low", + "cluster": "staging", + "instance": "server5", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname", + "cluster", + "service" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-cluster-service", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Free_Disk_Space_Too_Low\", cluster=\"staging\"}", + "labels": { + "alertname": "Free_Disk_Space_Too_Low", + "cluster": "staging" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "help": "Example help annotation", + "summary": "Example summary", + "url": "http://localhost/example.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "HTTP_Probe_Failed", + "cluster": "dev", + "instance": "web1", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "3282f366-8362-4a0f-b7cb-1c4966dec0da" + ], + "state": "suppressed" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "HTTP_Probe_Failed", + "cluster": "dev", + "instance": "web2", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname", + "cluster", + "service" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-cluster-service", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"HTTP_Probe_Failed\", cluster=\"dev\"}", + "labels": { + "alertname": "HTTP_Probe_Failed", + "cluster": "dev" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "dev", + "instance": "server7", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "d6984a93-a222-4dd9-8379-428b6db7e353" + ], + "state": "suppressed" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "dev", + "instance": "server8", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "d6984a93-a222-4dd9-8379-428b6db7e353" + ], + "state": "suppressed" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "dev", + "instance": "server6", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": null, + "silencedBy": [ + "d6984a93-a222-4dd9-8379-428b6db7e353" + ], + "state": "suppressed" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname", + "cluster", + "service" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-cluster-service", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Host_Down\", cluster=\"dev\"}", + "labels": { + "alertname": "Host_Down", + "cluster": "dev" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "summary": "Example summary", + "url": "http://localhost/example.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "prod", + "instance": "server1", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "prod", + "instance": "server2", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "service", + "alertname", + "cluster" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-cluster-service", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Host_Down\", cluster=\"prod\"}", + "labels": { + "alertname": "Host_Down", + "cluster": "prod" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "staging", + "instance": "server3", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "staging", + "instance": "server4", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + }, + { + "annotations": { + "summary": "Example summary" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Host_Down", + "cluster": "staging", + "instance": "server5", + "job": "node_ping" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname", + "cluster", + "service" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-cluster-service", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Host_Down\", cluster=\"staging\"}", + "labels": { + "alertname": "Host_Down", + "cluster": "staging" + } + }, + { + "blocks": [ + { + "alerts": [ + { + "annotations": { + "alert": "Memory usage exceeding threshold", + "dashboard": "http://localhost/dashboard.html" + }, + "endsAt": "0001-01-01T00:00:00Z", + "generatorURL": "localhost/prometheus", + "labels": { + "alertname": "Memory_Usage_Too_High", + "cluster": "prod", + "instance": "server2", + "job": "node_exporter" + }, + "startsAt": "2017-06-10T02:51:26.345424763Z", + "status": { + "inhibitedBy": [], + "silencedBy": [], + "state": "active" + } + } + ], + "routeOpts": { + "groupBy": [ + "alertname", + "cluster", + "service" + ], + "groupInterval": 35000000000, + "groupWait": 15000000000, + "receiver": "by-cluster-service", + "repeatInterval": 3596400000000000 + } + } + ], + "groupKey": "{}/{alertname=~\"^(?:.*)$\"}:{alertname=\"Memory_Usage_Too_High\", cluster=\"prod\"}", + "labels": { + "alertname": "Memory_Usage_Too_High", + "cluster": "prod" + } + } + ], + "status": "success" +} diff --git a/mock/0.7.1/api/v1/silences b/mock/0.7.1/api/v1/silences new file mode 100644 index 000000000..55e8c3f75 --- /dev/null +++ b/mock/0.7.1/api/v1/silences @@ -0,0 +1,46 @@ +{ + "data": [ + { + "comment": "Silenced instance", + "createdBy": "john@example.com", + "endsAt": "2063-01-01T00:00:00Z", + "id": "3282f366-8362-4a0f-b7cb-1c4966dec0da", + "matchers": [ + { + "isRegex": false, + "name": "instance", + "value": "web1" + } + ], + "startsAt": "2017-06-10T02:51:26.336857241Z", + "status": { + "state": "active" + }, + "updatedAt": "2017-06-10T02:51:26.336887639Z" + }, + { + "comment": "Silenced Host_Down alerts in the dev cluster", + "createdBy": "john@example.com", + "endsAt": "2063-01-01T00:00:00Z", + "id": "d6984a93-a222-4dd9-8379-428b6db7e353", + "matchers": [ + { + "isRegex": false, + "name": "alertname", + "value": "Host_Down" + }, + { + "isRegex": false, + "name": "cluster", + "value": "dev" + } + ], + "startsAt": "2017-06-10T02:51:26.342675638Z", + "status": { + "state": "active" + }, + "updatedAt": "2017-06-10T02:51:26.342684914Z" + } + ], + "status": "success" +} diff --git a/mock/0.7.1/api/v1/status b/mock/0.7.1/api/v1/status new file mode 100644 index 000000000..90802e116 --- /dev/null +++ b/mock/0.7.1/api/v1/status @@ -0,0 +1,106 @@ +{ + "data": { + "configJSON": { + "global": { + "hipchat_auth_token": "", + "hipchat_url": "https://api.hipchat.com/", + "opsgenie_api_host": "https://api.opsgenie.com/", + "pagerduty_url": "https://events.pagerduty.com/generic/2010-04-15/create_event.json", + "resolve_timeout": 300000000000, + "slack_api_url": "", + "smtp_auth_identity": "", + "smtp_auth_password": "", + "smtp_auth_secret": "", + "smtp_auth_username": "", + "smtp_from": "", + "smtp_require_tls": true, + "smtp_smarthost": "", + "victorops_api_url": "https://alert.victorops.com/integrations/generic/20131114/alert/" + }, + "inhibit_rules": [ + { + "equal": [ + "alertname", + "cluster", + "service" + ], + "source_match": { + "severity": "critical" + }, + "source_match_re": null, + "target_match": { + "severity": "warning" + }, + "target_match_re": null + } + ], + "receivers": [ + { + "name": "default" + }, + { + "name": "by-cluster-service" + }, + { + "name": "by-name" + } + ], + "route": { + "group_by": [ + "alertname" + ], + "group_interval": 35000000000, + "group_wait": 15000000000, + "receiver": "default", + "repeat_interval": 3596400000000000, + "routes": [ + { + "continue": true, + "group_by": [ + "alertname", + "cluster", + "service" + ], + "match_re": { + "alertname": "^(?:.*)$" + }, + "receiver": "by-cluster-service" + }, + { + "continue": true, + "group_by": [ + "alertname" + ], + "match_re": { + "alertname": "^(?:.*)$" + }, + "receiver": "by-name" + } + ] + }, + "templates": null + }, + "configYAML": "global:\n resolve_timeout: 5m\n smtp_from: \"\"\n smtp_smarthost: \"\"\n smtp_auth_username: \"\"\n smtp_auth_password: null\n smtp_auth_secret: null\n smtp_auth_identity: \"\"\n smtp_require_tls: true\n slack_api_url: null\n pagerduty_url: https://events.pagerduty.com/generic/2010-04-15/create_event.json\n hipchat_url: https://api.hipchat.com/\n hipchat_auth_token: null\n opsgenie_api_host: https://api.opsgenie.com/\n victorops_api_url: https://alert.victorops.com/integrations/generic/20131114/alert/\nroute:\n receiver: default\n group_by:\n - alertname\n routes:\n - receiver: by-cluster-service\n group_by:\n - alertname\n - cluster\n - service\n match_re:\n alertname:\n regexp: {}\n continue: true\n - receiver: by-name\n group_by:\n - alertname\n match_re:\n alertname:\n regexp: {}\n continue: true\n group_wait: 15s\n group_interval: 35s\n repeat_interval: 999h\ninhibit_rules:\n- source_match:\n severity: critical\n source_match_re: {}\n target_match:\n severity: warning\n target_match_re: {}\n equal:\n - alertname\n - cluster\n - service\nreceivers:\n- name: default\n- name: by-cluster-service\n- name: by-name\ntemplates: []\n", + "meshStatus": { + "name": "02:42:ac:11:00:02", + "nickName": "8ef6b4f3186d", + "peers": [ + { + "name": "02:42:ac:11:00:02", + "nickName": "8ef6b4f3186d", + "uid": 12482875263642160869 + } + ] + }, + "uptime": "2017-06-10T02:51:11.2129301Z", + "versionInfo": { + "branch": "master", + "buildDate": "20170609-15:31:09", + "buildUser": "root@97e9539a4c3f", + "goVersion": "go1.8.3", + "revision": "ab4138299b94c78dc554ea96e2ab28d04b048059", + "version": "0.7.1" + } + }, + "status": "success" +} diff --git a/mock/Makefile b/mock/Makefile index 7f54140b6..0e4c5e005 100644 --- a/mock/Makefile +++ b/mock/Makefile @@ -3,7 +3,7 @@ DOCKER_IMAGE := prom/alertmanager DOCKER_ARGS := --name $(DOCKER_NAME) --rm -d -p 9093:9093 -v $(CURDIR)/alertmanager.yml:/etc/alertmanager/config.yml # list of Alertmanager versions to generate mock files for -VERSIONS := 0.4.0 0.4.1 0.4.2 0.5.0 0.5.1 0.6.0 0.6.1 0.6.2 0.7.0 +VERSIONS := 0.4.0 0.4.1 0.4.2 0.5.0 0.5.1 0.6.0 0.6.1 0.6.2 0.7.0 0.7.1 %/.ok: $(eval VERSION := $(word 1, $(subst /, ,$@)))