From cb69029c4f32fa0d50a01207a14449d25563fda2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sat, 1 Jul 2017 13:54:55 -0700 Subject: [PATCH] Add @alertmanager filter --- assets/templates/help.html | 25 ++++++++++++++ bindata_assetfs.go | 2 +- filters/filter_alertmanager.go | 61 ++++++++++++++++++++++++++++++++++ filters/filter_state.go | 2 +- filters/filter_test.go | 36 ++++++++++++++++++++ filters/registry.go | 9 ++++- views_test.go | 6 ++++ 7 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 filters/filter_alertmanager.go diff --git a/assets/templates/help.html b/assets/templates/help.html index 1d8db44f1..fd6474b55 100644 --- a/assets/templates/help.html +++ b/assets/templates/help.html @@ -129,6 +129,31 @@ + + + @alertmanager(= != =~ !~)$value + + +

Match alerts based on the Alertmanager instance name they were collected from.

+ + + + + + + + + + + + + + + +
@alertmanager=prodMatch alerts collected from Alertmanager instance named prod.
@alertmanager!=devMatch alerts collected from Alertmanager instances except for the one named dev.
@alertmanager=~prodMatch alerts collected from Alertmanager instances with names matching regular expression .*prod.*.
+ + + @receiver(= != =~ !~)$value diff --git a/bindata_assetfs.go b/bindata_assetfs.go index bbf376069..97a33a9a4 100644 --- a/bindata_assetfs.go +++ b/bindata_assetfs.go @@ -178,7 +178,7 @@ func templatesErrorsHtml() (*asset, error) { return a, nil } -var _templatesHelpHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x9b\xef\x6e\xdb\x46\x12\xc0\xbf\xfb\x29\x46\x44\x10\x24\x45\x25\x5a\x71\x0d\x1c\x10\x92\x68\x2f\x71\x0e\x2d\x7a\xd7\x20\xcd\xfd\xc3\xe1\x70\x58\x2d\x47\xe2\x9e\x97\x7f\xba\x3b\x94\x2c\x18\xf6\x5b\x14\x7d\x92\x03\xee\x79\xfa\x02\xf7\x0a\x87\xdd\xa5\x18\xca\xa2\x24\xcb\x91\x62\xd3\x69\x3f\xd4\x21\x77\x76\x66\xf6\xb7\xb3\xb3\xb3\x14\x19\xf4\x5e\xff\xf0\xea\xfd\xdf\xdf\x9e\x41\x42\xa9\x8c\x8e\x02\xf3\x07\xb8\x64\x5a\x87\xde\xb8\x94\xd2\x03\xc9\xb2\x49\xe8\x61\xe6\x45\x47\x47\x41\x82\x2c\x8e\x8e\x8e\x00\x00\x82\x14\x89\x01\x4f\x98\xd2\x48\xa1\x57\xd2\xb8\xff\x3b\x2f\x6a\x34\x25\x44\x45\x1f\x7f\x2a\xc5\x34\xf4\xfe\xd6\xff\xf3\x37\xfd\x57\x79\x5a\x30\x12\x23\x89\x1e\xf0\x3c\x23\xcc\x28\xf4\xbe\x3d\x0b\x31\x9e\xe0\x52\xcf\x8c\xa5\x18\x7a\x53\x81\xb3\x22\x57\xd4\x10\x9e\x89\x98\x92\x30\xc6\xa9\xe0\xd8\xb7\x17\x5f\x82\xc8\x04\x09\x26\xfb\x9a\x33\x89\xe1\xb0\x45\x51\x8c\x9a\x2b\x51\x90\xc8\xb3\x86\xae\x16\x41\x56\x52\x92\xab\x16\x19\x29\xb2\x73\x50\x28\x43\x4f\x27\xb9\x22\x5e\x12\x08\x6e\xb4\x89\x38\xf4\xc6\x6c\xea\x2e\x12\x85\xe3\xd0\xf3\x35\x31\x12\xdc\xaf\x6e\x0f\x04\xcf\xbd\x05\x32\x12\x24\x31\x7a\xf6\xeb\x2f\x3f\xff\xef\xbf\xff\xf9\xf5\x97\x9f\x9f\x07\xbe\xbb\xe5\xda\x2f\x2f\x41\xb1\x6c\x82\x30\x78\xf5\xe3\x8f\x6f\x84\x44\x0d\x57\x57\x2b\x1e\xd0\x5c\xa2\x4e\x10\x69\x61\xf1\xf2\x12\x9e\x0c\xfe\x8a\xa3\xb7\x0a\xc7\xe2\x02\xae\xae\x2a\x0f\x52\x96\xb1\x09\xc6\x3e\xd7\xda\xbf\xbc\x84\x01\x5c\x5d\x79\x11\x5c\x5e\xf6\x01\xb3\xd8\x68\xbe\x95\xea\x36\xcd\x23\xa6\x71\xc0\xb5\xb6\x31\xe1\x57\x41\x11\x8c\xf2\x78\xbe\x18\x69\x2c\xa6\x8b\x30\x32\x34\x99\xc8\x50\x55\x34\x6f\xb6\xab\x7c\xd6\x68\xb9\xd9\x5a\xb0\x09\xf6\x8d\x05\x54\x40\x78\x41\x7d\x8e\x19\x2d\xe9\xaa\x7b\x25\xc3\xd5\x9b\xe6\xbf\xd7\x39\x2f\x53\xcc\x8c\xeb\x79\xb6\xda\xcd\xbf\xd9\x2f\xf0\x63\x31\xad\x06\x52\xdf\x23\x36\x92\xb8\x70\xca\x5d\x24\x28\x8b\x36\x3f\x38\xb3\xb1\x56\x0b\x37\xbd\x7e\x23\x24\xa1\x82\x94\x11\x4f\x80\xe6\x05\xea\xc0\xaf\xe4\x5b\x34\x91\x43\xdb\x36\xa8\x80\x54\x7b\x43\xd5\x31\xfa\xa3\x31\x11\xf8\x94\x6c\x16\x3b\xbb\x60\x69\x21\x71\xbb\xe0\xeb\x0f\xab\x68\xbd\x70\xe0\xb7\xb9\x65\xe4\x5b\x07\x12\x90\x8b\x99\x3b\x0c\x30\x6e\xc5\x1b\x9c\x8f\xe2\x28\x0c\x7c\xf3\x27\xf0\x69\x0d\xbb\x4a\x43\x14\xf0\x3c\xc6\xe8\xc9\x39\xce\xc3\x27\x53\x26\x4b\x0c\x7c\x7b\x67\x7b\xcf\xb3\x0b\xc6\xc9\xcd\xe2\x00\xde\xab\x12\x41\x8c\x81\x9b\xfc\xa6\x30\x06\x26\x51\x11\x30\x22\x25\x46\x25\x21\x58\xdd\x20\x34\xe0\x4f\x25\x93\x40\x39\x54\x96\x9b\x46\x07\xeb\xad\xb6\x53\xfd\x38\x48\xbd\x3b\x50\xea\xed\x8a\xe9\x4f\x38\x61\x24\xa6\x78\x6b\x52\x42\x43\x2a\xb4\x16\xd9\x04\x72\x05\x09\x9b\x22\xb0\x0a\x1f\x25\x8c\x4c\x7b\x96\xd3\x43\xe2\x18\x5e\xdf\x21\xda\xae\x77\xe4\xf8\x0e\x27\xa5\x64\x0a\xf0\xa2\x50\xa8\xb5\x49\x2e\xbb\xc5\x9e\x95\x46\xdd\xc6\x0b\x14\x4e\xf0\xe2\x53\x47\xdf\x1d\xa8\xf5\x76\xa5\x56\x47\x9f\x5a\x8b\xef\x0d\x93\xba\x8b\xfc\x9e\x4e\xe8\xe5\xee\x04\x4d\xaf\x1d\x19\xfe\x41\x21\x33\x1b\x16\x25\x6c\xd7\x98\x13\x1a\x26\xcd\xde\xf7\xbf\x56\x9f\xca\x3b\x51\x93\x3b\x53\xfb\x1e\xb5\xde\x01\x59\x83\x98\xac\x7b\xee\x03\x57\xe0\xb7\x6c\xb0\x81\x6f\xcb\x97\x83\x16\x38\x26\x81\x97\x36\x8d\xbb\x81\x4a\x36\x42\x79\xb0\x52\xc7\xd9\xec\x60\x09\x63\x8e\x0f\x06\x72\xdf\xf1\x69\x61\xbd\xd4\xa3\x0e\xc9\x67\x21\xf4\x42\x08\xaf\xa1\x77\x0d\x26\x3c\xc1\xac\xec\xe7\x4b\xb1\xb2\xde\xee\xd6\xe8\xdd\xec\x44\xe1\x2a\x4b\x37\xb1\x1a\xcc\x51\x20\x86\x3c\x03\x96\xcd\xdd\x34\x0f\x02\xbf\xd8\xa2\xa3\x25\xd6\xd0\xd5\xa1\xdb\x18\xc0\x16\xe4\xab\xb2\x1b\xa6\x60\x55\x38\x8e\x02\x5d\xb0\x3a\xb2\xed\x78\xdc\xa8\xfa\x22\x1b\xe7\x5e\x94\xe4\x9a\xec\x61\x51\xe6\x9c\x49\x73\x15\xf8\xa6\xc7\x96\xa4\xd0\x66\x69\x09\xe3\x4c\x50\xe2\x0c\x41\x80\x69\x6d\x26\xf0\x31\x8d\x1a\xe5\x0e\xa6\x51\xc3\x30\xa6\x9b\x52\xc2\x8a\xcd\xb5\x19\x75\xd5\xbb\xfd\x42\xd3\xa8\xcc\x89\x3d\x64\x05\xe3\x09\xbe\x38\x08\xb1\xca\x46\x0b\xb0\xda\x6a\xc7\x70\xf5\x2a\x5e\x27\x87\xe7\xd5\xa8\xb9\x97\xcb\xeb\x1a\xdf\x49\xe7\xf0\x85\xd7\xce\xf3\x4f\x40\xcf\x08\x1a\x7c\x2d\x75\xa6\xcb\xd9\xfe\xe0\x0b\xe7\xcc\xe0\x0b\x7f\xfb\x5e\xbe\xe2\xcc\x43\x41\xf9\x8f\x61\xff\xe4\x9f\x0f\x8a\xa7\xf5\xa8\x63\x50\x0b\x25\x72\x25\x68\x1e\x7d\x75\x10\x94\x0b\xf5\x8e\xa5\x2b\x2c\x23\x57\x52\x7e\x35\x80\xbf\xd8\xeb\x99\x90\x12\x46\x08\x9c\x69\xc2\xd8\xac\x74\x91\x11\x4e\x50\x99\x1a\xb5\xc8\xb5\x16\x23\x89\x5f\x82\x26\x5b\xc8\xb9\xa2\x55\x58\xfe\x8b\x9e\xa5\xd9\xf5\x99\x86\x31\x93\x72\xc4\xf8\xf9\xde\xc9\xb7\x96\xae\x2d\x42\xae\x94\xdd\x20\xd0\x9d\x82\xb9\x9a\x4f\x57\x37\xeb\x02\xb9\x60\x12\xc6\xb6\xf9\xb7\xd2\x79\xb9\xb1\x51\x3a\x2b\xe4\x28\xa6\xad\x4f\x84\x97\xfa\xd8\x04\xf1\xf5\x42\xba\x51\x41\xdf\x73\xdd\x4c\x09\xc2\xc2\x2b\xfb\x3b\xc4\xa3\xae\x9f\xeb\x09\x08\x63\x1c\xb3\x52\xee\xa9\x7c\xd6\x98\x91\x49\x63\x06\x66\xa5\xb8\x86\xda\x89\x4d\xa1\xe6\xd2\x0b\x13\x51\xf0\x84\xed\x09\x8c\x29\xe7\x9a\x70\x2a\xe5\x1d\x85\x13\x5e\x63\xca\x84\xdc\x6f\xcc\x98\x83\x6b\xbd\x00\xed\x66\x6a\x56\xe1\xed\xaa\x10\xeb\xce\x01\xeb\x8f\xfb\xd9\x05\x61\xa7\x04\xac\x89\x11\xde\x2e\xfb\x5a\xd1\xf0\x19\xe3\xf6\xb1\xac\x2e\x0b\x43\x14\x63\x28\xb3\x42\xe5\x1c\xb5\xc6\xf8\xf9\x7d\xe6\x61\xeb\xdf\xe3\xce\xbf\x6e\x0a\xdc\x0c\x7c\xe4\x3a\xca\x33\x39\x87\x6a\x2e\x1d\xcd\x6e\x64\x13\x87\xa0\x8a\x3e\x8d\xf1\x3e\x30\x7c\xd0\xd6\x41\x14\x8d\xe5\xb7\x0f\x16\x0d\x75\x87\x82\xd1\x89\xbc\x28\x24\x66\x1c\xff\x55\xbd\x55\x72\xbb\x04\xb9\xd4\xe7\x61\x15\xa9\xce\x27\xc8\xc7\x50\x79\xf9\xc8\x13\xe5\xd2\x54\x84\x29\x7e\x1d\xe7\x29\x13\xd9\x70\xc0\xf3\x74\x4f\x15\x88\x33\x11\xc3\x68\x6e\x8f\xee\x37\x6d\x74\xe5\x89\xdb\x0d\x56\xbd\x83\xc0\xb2\x95\xec\xe3\x04\x16\x5e\x57\xc3\x78\x71\x98\xd8\x2a\x35\x2a\x5b\xd3\xda\x77\x28\xdc\xbb\x47\x9b\xaa\xda\xa6\x37\x9f\x7b\x71\x5b\x4d\xd4\xbf\x85\x62\xbb\xa5\x70\xd3\xe3\x61\x25\x70\xe3\x11\x48\x91\x9d\x63\x0c\xa2\x2a\x78\xab\x4c\x0e\xef\x13\xa1\xdd\xee\x3d\xcb\xd5\xb9\x06\x31\x86\xef\xbe\x7d\xf7\x8d\x7b\xb9\xa1\x00\xa6\x10\x30\x33\x13\x11\x03\xcb\x62\xb0\x99\x9c\xf2\x2a\x96\xac\xa4\x88\xf5\x0d\xad\xc0\xf3\x34\x35\x87\x2c\x33\xcb\x9f\xc7\x66\x61\x10\x87\x6f\xdf\xfd\xf0\xdd\xd9\xab\xf7\xfd\xe1\x8b\x8f\xfd\xe9\xa6\x5e\xc4\x8b\x47\xbd\x09\x2a\x84\x18\x09\x39\x61\x5c\x71\xd7\xba\x44\x10\xf1\xf2\xfb\x65\x98\x46\x4b\x6e\x74\x2e\x33\x1a\x92\xbd\x83\xa3\x24\xfb\xff\x19\x33\xdb\xcb\x0d\x9c\x35\xe5\x5c\x81\xa0\x4a\x86\x1e\x1b\xe2\xf0\xba\x1a\xc3\x81\x22\x95\xb7\x86\xea\xe2\x75\xaa\x4d\x9b\x50\xe5\xd7\x67\xbe\xff\x48\x91\x0a\xba\xdd\xc6\x63\x45\xc3\x4f\xb5\xcd\x7c\x6f\xac\x41\x56\xa6\x23\xb4\x67\x82\x58\xe8\x42\xb2\xf9\x87\x23\x5f\xf5\x53\x53\x5a\x6a\x82\x11\x02\x5b\xc8\x3e\x9d\xd0\xcb\x10\x86\x8f\x7b\x3f\x70\x73\x31\x3c\xbe\xf3\xaa\xda\x86\xd7\x64\xa0\xe1\x71\x37\xf2\x8d\x83\x71\x7a\x7a\x58\x1a\xa7\xa7\xfb\xc7\xd1\x85\x0c\xc1\x26\xb7\x7c\xf8\xca\x26\xf8\xec\xa1\xbc\x2c\xc6\x15\xda\xaf\x31\x80\x44\x8a\x9a\x58\x5a\x3c\xee\x7c\xc0\x26\x68\xa8\x0f\x4f\xf7\x74\xba\xcb\x65\xbc\x78\xad\x76\x78\x0a\xa9\xc8\x4a\xc2\x8e\x3c\x72\x5c\xa0\x48\xf6\x4f\x02\x92\xbc\xec\xc8\x2f\x5a\x86\x82\xa4\x97\xc3\xe3\xe4\xe4\x78\x5f\x0f\x48\x70\x56\x93\x38\xb6\x28\xb4\x3d\xab\x9d\x1c\x1f\x2c\x40\x3e\x4d\x7e\x5c\x69\xda\xe5\x2d\x8d\x8c\x4d\x57\x75\x07\xa5\x6c\x7e\x5f\xb6\xee\xe1\x6c\x20\xc5\x06\xaf\xd9\x9a\x6f\xe4\xb6\x65\x63\x51\x7f\x5f\xc9\x60\xcc\xfa\x4c\xa9\x7c\xd6\xe7\x42\x71\x89\x7d\x89\x63\xf2\xa2\xc0\x17\x11\xfc\x9e\xf1\xf3\x0d\xc8\xd8\x3a\x62\x6d\x3e\x07\x7e\x29\x6f\xd2\xb2\x60\x8e\x3e\x5c\xdb\x6f\xde\x1a\xff\x3c\x0a\xfc\xea\x83\xbe\xc0\x77\x1f\x87\xfe\x3f\x00\x00\xff\xff\xc6\x5f\x20\x29\x2d\x3a\x00\x00") +var _templatesHelpHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x9c\xef\x6e\xdb\x38\x12\xc0\xbf\xe7\x29\xc6\x46\x51\xb4\xc5\xda\x8a\x9b\x0d\x70\x40\x25\x61\x7b\x6d\x7a\xd8\xc5\xde\x6d\xd1\xed\xfd\xc3\xe1\x70\x18\x53\x63\x8b\x17\x4a\xd4\x92\x94\x1d\x23\x48\xde\x62\xb1\x4f\x72\xc0\x3d\xcf\xbe\xc0\xbd\xc2\x81\xa4\xec\xc8\x89\x62\xc7\x89\x9d\x44\xe9\xf6\x43\x5d\x89\x43\xce\xf0\xc7\xe1\x70\x48\x49\x0d\x3b\xef\x7f\x78\xf7\xf9\xef\x1f\x8f\x20\x35\x99\x88\xf7\x42\xfb\x03\x4c\xa0\xd6\x51\x77\x54\x0a\xd1\x05\x81\xf9\x38\xea\x52\xde\x8d\xf7\xf6\xc2\x94\x30\x89\xf7\xf6\x00\x00\xc2\x8c\x0c\x02\x4b\x51\x69\x32\x51\xb7\x34\xa3\xde\xef\xba\x71\xad\x28\x35\xa6\xe8\xd1\x4f\x25\x9f\x44\xdd\xbf\xf5\xfe\xfc\xb6\xf7\x4e\x66\x05\x1a\x3e\x14\xd4\x05\x26\x73\x43\xb9\x89\xba\xdf\x1e\x45\x94\x8c\x69\xa9\x66\x8e\x19\x45\xdd\x09\xa7\x69\x21\x95\xa9\x09\x4f\x79\x62\xd2\x28\xa1\x09\x67\xd4\x73\x17\x5f\x01\xcf\xb9\xe1\x28\x7a\x9a\xa1\xa0\x68\xd0\xd0\x50\x42\x9a\x29\x5e\x18\x2e\xf3\x5a\x5b\x0d\x82\x58\x9a\x54\xaa\x06\x19\xc1\xf3\x63\x50\x24\xa2\xae\x4e\xa5\x32\xac\x34\xc0\x99\x6d\x8d\x27\x51\x77\x84\x13\x7f\x91\x2a\x1a\x45\xdd\x40\x1b\x34\x9c\x05\xd5\xed\x3e\x67\xb2\x3b\x47\x66\xb8\x11\x14\xbf\xf8\xf5\x97\x9f\xff\xf7\xdf\xff\xfc\xfa\xcb\xcf\x2f\xc3\xc0\xdf\xf2\xe5\xa7\xa7\xa0\x30\x1f\x13\xf4\xdf\xfd\xf8\xe3\x07\x2e\x48\xc3\xd9\xd9\x15\x0b\xcc\x4c\x90\x4e\x89\xcc\x5c\xe3\xe9\x29\x3c\xeb\xff\x95\x86\x1f\x15\x8d\xf8\x09\x9c\x9d\x55\x16\x64\x98\xe3\x98\x92\x80\x69\x1d\x9c\x9e\x42\x1f\xce\xce\xba\x31\x9c\x9e\xf6\x80\xf2\xc4\xb6\x7c\xa3\xa6\x9b\x5a\x1e\xa2\xa6\x3e\xd3\xda\xf9\x44\x50\x39\x45\x38\x94\xc9\x6c\xde\xd3\x84\x4f\xe6\x6e\x64\x69\x22\xcf\x49\x55\x34\x2f\x97\x2b\x39\xad\x95\x5c\x2e\x2d\x70\x4c\x3d\xab\x81\x14\x18\x3a\x31\x3d\x46\xb9\x59\x6a\x6b\x51\x2b\x1d\x5c\xbd\x69\xff\xbc\x97\xac\xcc\x28\xb7\xa6\xcb\xfc\x6a\xb5\xe0\x72\xbd\x30\x48\xf8\xa4\xea\xc8\xe2\x9e\xc1\xa1\xa0\xb9\x51\xfe\x22\x25\x51\x34\xd9\xc1\xd0\xf9\xda\x42\xb8\x6e\xf5\x07\x2e\x0c\x29\xc8\xd0\xb0\x14\xcc\xac\x20\x1d\x06\x95\x7c\x43\x4b\xc6\xa3\x6d\xea\x54\x68\x54\x73\x41\x55\x31\xfe\xa3\x55\x11\x06\x26\x5d\x2d\x76\x74\x82\x59\x21\x68\xbd\xe0\xfb\x8b\x59\x74\xbd\x70\x18\x34\x99\x65\xe5\x1b\x3b\x12\x1a\xef\x33\xb7\xe8\x60\xd2\x88\x37\x3c\x1e\x26\x71\x14\x06\xf6\x27\x0c\xcc\x35\xec\xaa\x16\xe2\x90\xc9\x84\xe2\x67\xc7\x34\x8b\x9e\x4d\x50\x94\x14\x06\xee\xce\xfa\x9a\x47\x27\xc8\x8c\x1f\xc5\x3e\x7c\x56\x25\x01\x1f\x01\xb3\xf1\x4d\x51\x02\x28\x48\x19\x40\x63\x14\x1f\x96\x86\xc0\xb5\x0d\x5c\x03\xfd\x54\xa2\x00\x23\xa1\xd2\x5c\x57\xda\xbf\x5e\x6b\x33\xd5\xbb\x41\xea\xdc\x82\x52\x67\x53\x4c\x7f\xa2\x31\x1a\x3e\xa1\x1b\x93\xe2\x1a\x32\xae\x35\xcf\xc7\x20\x15\xa4\x38\x21\xc0\x0a\x9f\x49\xd1\xd8\xf2\x5c\x9a\xc7\xc4\x31\x3a\xbf\x85\xb7\x9d\x6f\xc8\xf1\x13\x8d\x4b\x81\x0a\xe8\xa4\x50\xa4\xb5\x0d\x2e\x9b\xf9\x9e\x93\x26\xdd\xc4\x0b\x14\x8d\xe9\xe4\xbe\xbd\xef\x16\xd4\x3a\x9b\x52\x5b\x78\x9f\xba\x16\xdf\x07\x14\xba\x8d\xfc\x9e\x8f\xcd\x9b\xcd\x09\xda\x5a\x1b\x32\xfc\x83\x22\xb4\x0b\x96\x49\x71\x53\x9f\xe3\x1a\xc6\xf5\xda\x0f\x3f\x57\x9f\x8b\x5b\x51\x13\x1b\x53\xfb\x9e\xb4\xde\x00\x59\x8d\x98\x58\xd4\xdc\x06\xae\x30\x68\x58\x60\xc3\xc0\xa5\x2f\x3b\x4d\x70\x6c\x00\x2f\x5d\x18\xf7\x1d\x15\x38\x24\xb1\xb3\x54\xc7\xeb\x6c\x61\x0a\x63\xb7\x0f\x16\x72\xcf\xf3\x69\x60\xbd\x54\x63\xe1\x92\x2f\x22\xe8\x44\x10\x9d\x43\xe7\x1c\xac\x7b\x82\x9d\xd9\x2f\x97\x7c\xe5\x7a\xbd\x6b\xbd\x77\xb5\x11\x85\xcf\x2c\xfd\xc0\x6a\xb0\x5b\x81\x04\x64\x0e\x98\xcf\xfc\x30\xf7\xc3\xa0\x58\xd3\x46\x83\xaf\x91\xcf\x43\xd7\x31\x80\x35\xc8\xaf\xca\xae\x18\x82\xab\xc2\x49\x1c\xea\x02\x17\x9e\xed\xfa\xe3\x7b\xd5\xe3\xf9\x48\x76\xe3\x54\x6a\xe3\x36\x8b\x42\x32\x14\xf6\x2a\x0c\x6c\x8d\x35\x41\xa1\x49\xd3\x12\xc6\x29\x37\xa9\x57\x04\x21\x65\x0b\x35\x61\x40\x59\x5c\x4b\x77\x28\x8b\x6b\x8a\x29\x5b\x15\x12\xae\xe8\xbc\x36\xa2\x5e\xb5\x6e\xbb\xd0\x34\x29\xbb\x63\x8f\xb0\x40\x96\xd2\xeb\x9d\x10\xab\x74\x34\x00\x5b\x68\x6d\x19\xae\x4e\xc5\xeb\x60\xf7\xbc\x6a\x39\xf7\x72\x7a\xbd\xc0\x77\xd0\x3a\x7c\xd1\xb9\xb7\xfc\x1e\xe8\x59\x41\x8b\xaf\x21\xcf\xf4\x31\x3b\xe8\xbf\xf2\xc6\xf4\x5f\x05\xeb\xd7\xf2\x2b\xc6\x3c\x16\x94\xff\x18\xf4\x0e\xfe\xf9\xa8\x78\x3a\x8b\x5a\x06\xb5\x50\x5c\x2a\x6e\x66\xf1\xd7\x3b\x41\x39\x6f\xde\xb3\xf4\x89\x65\xec\x53\xca\xaf\xfb\xf0\x17\x77\x3d\xe5\x42\xc0\x90\x80\xa1\x36\x94\xd8\x99\xce\x73\x43\x63\x52\x36\x47\x2d\xa4\xd6\x7c\x28\xe8\x2b\xd0\xc6\x25\x72\x3e\x69\xe5\x8e\xff\xbc\x66\x69\x57\x7d\xd4\x30\x42\x21\x86\xc8\x8e\xb7\x4e\xbe\x31\x75\x6d\x10\xf2\xa9\xec\x0a\x81\xf6\x24\xcc\xd5\x78\xfa\xbc\x59\x17\xc4\x38\x0a\x18\xb9\xe2\xdf\x52\xe7\xe5\xc2\x5a\xea\xec\xa8\xf9\xa3\xee\xa6\x53\xe1\xa5\x7a\x2e\x48\x7c\x53\xaf\x51\xcb\xa4\x1f\x38\x7f\x36\x29\xc1\xdb\x9a\x65\xc0\x73\x6d\x30\x67\xe4\x1e\x4e\xd8\xe2\x19\x4c\x49\x11\x30\x29\x04\x31\x3b\x6f\x47\x4a\x66\x4f\x3a\xdb\x5e\x1a\xaa\xa8\x50\x32\xd9\x4e\xc8\x5c\x46\xb8\x02\x7b\x52\xf9\x8c\x57\xdd\x9e\x35\x66\x09\x5c\x27\x4a\x68\x72\x7f\xe0\x34\xd0\x09\xa3\xc2\xc0\x48\x2a\xe7\xd5\x32\x5f\x86\xe9\xac\x69\x29\xcb\xe8\xfc\x7e\xbd\xb0\x5a\xde\x2d\x3e\x7d\x83\xc4\xa8\xff\xca\x9a\xd7\x7f\xb5\x2b\xbe\xf7\xb3\x2a\xdf\x71\x45\x50\xc4\x88\x4f\x6e\xba\x1a\xcc\xa5\x1f\xd7\x4a\x30\xb7\xca\x8d\xfc\xd3\x8e\xf1\xf3\xae\x46\x09\x8d\xb0\x14\x5b\x3a\x50\xd1\x94\x1b\x9b\xd8\x5a\x98\x55\xc3\x0b\xa8\xed\x08\x3b\x73\x6b\x3b\x51\xca\x0b\x96\xe2\x96\xc0\xd8\x0d\x7e\x1d\x4e\xd5\x78\x4b\xe1\x44\xe7\x94\x21\x17\xdb\xf5\x19\xcc\x67\x17\x13\x70\x11\x7f\x6f\xb6\x2f\x75\xe6\xec\x70\x47\xfa\x30\xfb\x22\xd8\x28\x00\x6b\x83\x86\x6e\x16\x7d\x9d\x68\xf4\x02\x99\x7b\x50\xa7\xcb\xc2\x12\xa5\x04\xca\xbc\x50\x92\x91\xd6\x94\xbc\x7c\xc8\x38\xec\xec\x7b\xda\xf1\xd7\x0f\x81\x1f\x81\x3b\xce\x23\x99\x8b\x19\x54\x63\xe9\x69\xb6\x23\x9a\x78\x04\x95\xf7\x69\xba\x6b\x7e\xe7\x30\x5c\xb4\xd6\x42\x14\xb5\xe9\xb7\x0d\x16\xb5\xe6\x76\x05\xa3\x15\x71\x91\x0b\xca\x19\xfd\xab\x7a\xcf\xf0\x66\x01\x72\xa9\xce\xe3\x4a\x52\xbd\x4d\x20\x47\x50\x59\xf9\xc4\x03\xe5\xd2\x50\x44\x19\x7d\x93\xc8\x0c\x79\x3e\xe8\x33\x99\x6d\x29\x03\xf1\x2a\x12\x18\xce\xdc\x61\xee\x65\x1d\x6d\x79\x06\x73\x89\x55\x67\x27\xb0\x5c\x26\xfb\x34\x81\x45\xe7\x55\x37\x5e\xef\xc6\xb7\x4a\x4d\xaa\x3a\x56\xc4\xea\x3d\xc6\x95\x59\x6d\xdd\x9a\x2f\x3d\xb9\xad\x06\xea\xdf\x5c\xe1\x66\x21\xdc\xd6\x78\x5c\x01\xdc\x5a\x04\x82\xe7\xc7\x94\x00\xaf\x12\xde\x2a\x92\xc3\xe7\x94\x6b\xbf\x7a\x4f\xa5\x3a\xd6\xc0\x47\xf0\xdd\xb7\x9f\xde\xfa\xd7\xdd\x0a\x40\x45\x40\xb9\x1d\x88\x04\x30\x4f\xc0\x45\x72\x23\x2b\x5f\x72\x92\x3c\xd1\x97\x5a\x05\x26\xb3\xcc\x6e\xb2\xec\x28\x7f\x19\x8b\x85\x45\x1c\x7d\xfc\xf4\xc3\x77\x47\xef\x3e\xf7\x06\xaf\xef\xfa\x30\x7f\x31\x89\xe7\x0f\xff\x52\x52\x04\x09\x19\x7f\x90\xe8\xb9\x6b\x5d\x12\xf0\x64\xf9\x8d\x63\xca\xe2\x25\x33\x5a\x17\x19\x2d\xc9\xce\xce\x51\x1a\xf7\xf7\x14\xed\xf2\x72\x09\xe7\x82\xb2\x54\xc0\x4d\x25\x63\x9e\x1a\xe2\xe8\xbc\xea\xc3\x8e\x3c\x95\x35\xba\xea\xfc\x05\xdb\x55\x8b\x50\x65\xd7\x17\xbe\xfe\x08\x9e\x71\x73\xb3\x85\xc7\x89\x46\xf7\xb5\xcc\x7c\x6f\xb5\x41\x5e\x66\x43\x72\x7b\x82\x84\xeb\x42\xe0\xec\x62\xcb\x57\xbd\x7c\x90\x95\xda\xc0\x90\x00\xe7\xb2\xcf\xc7\xe6\x4d\x04\x83\xa7\xbd\x1e\xf8\xb1\x18\xec\xdf\x7a\x56\xad\xc3\x6b\x23\xd0\x60\xbf\x1d\xf1\xc6\xc3\x38\x3c\xdc\x2d\x8d\xc3\xc3\xed\xe3\x68\x43\x84\xc0\xf1\x0d\x0f\x5f\x71\x4c\x2f\x1e\xcb\xeb\xc3\x4c\x91\xfb\x3e\x0f\x0c\xcf\x48\x1b\xcc\x8a\xa7\x1d\x0f\x70\x4c\x96\xfa\xe0\x70\x4b\xbb\x3b\x29\x92\xf9\x87\x16\x83\x43\xc8\x78\x5e\x1a\x6a\xc9\x91\xe3\x1c\x45\xba\x7d\x12\x90\xca\xb2\x25\x4f\xb4\x2c\x05\x61\xde\x0c\xf6\xd3\x83\xfd\x6d\x1d\x90\xd0\x74\x41\x62\xdf\xa1\xd0\x6e\xaf\x76\xb0\xbf\x33\x07\x79\xa0\x17\x04\x36\x79\x6f\x2f\xc7\xc9\xd5\xb6\xc3\x52\xd4\xbf\x38\xbe\xee\x70\x36\x14\x7c\x85\xd5\x78\xcd\x57\xd3\xeb\xa2\x31\x5f\x7c\x71\x8f\x30\xc2\x1e\x2a\x25\xa7\x3d\xc6\x15\x13\xd4\x13\x34\x32\xdd\x38\x0c\x78\x0c\xbf\x47\x76\xbc\x02\x19\x5e\x47\xac\xc9\xe6\x30\x28\xc5\x65\x5a\x0e\xcc\xde\xc5\xb5\xfb\x0a\xba\xf6\xcf\xbd\x30\xa8\x3e\xf1\x0e\x03\xff\xdf\x05\xfc\x3f\x00\x00\xff\xff\x24\x68\x50\xff\x3f\x40\x00\x00") func templatesHelpHtmlBytes() ([]byte, error) { return bindataRead( diff --git a/filters/filter_alertmanager.go b/filters/filter_alertmanager.go new file mode 100644 index 000000000..726542064 --- /dev/null +++ b/filters/filter_alertmanager.go @@ -0,0 +1,61 @@ +package filters + +import ( + "fmt" + "strings" + + "github.com/cloudflare/unsee/models" +) + +type alertmanagerInstanceFilter struct { + alertFilter +} + +func (filter *alertmanagerInstanceFilter) Match(alert *models.Alert, matches int) bool { + if filter.IsValid { + var isMatch bool + for _, am := range alert.Alertmanager { + if filter.Matcher.Compare(am.Name, filter.Value) { + isMatch = true + } + } + if isMatch { + filter.Hits++ + } + return isMatch + } + e := fmt.Sprintf("Match() called on invalid filter %#v", filter) + panic(e) +} + +func newAlertmanagerInstanceFilter() FilterT { + f := alertmanagerInstanceFilter{} + return &f +} + +func alertmanagerInstanceAutocomplete(name string, operators []string, alerts []models.Alert) []models.Autocomplete { + tokens := map[string]models.Autocomplete{} + for _, alert := range alerts { + for _, am := range alert.Alertmanager { + for _, operator := range operators { + switch operator { + case equalOperator, notEqualOperator: + token := fmt.Sprintf("%s%s%s", name, operator, am.Name) + tokens[token] = makeAC( + token, + []string{ + name, + strings.TrimPrefix(name, "@"), + name + operator, + }, + ) + } + } + } + } + acData := []models.Autocomplete{} + for _, token := range tokens { + acData = append(acData, token) + } + return acData +} diff --git a/filters/filter_state.go b/filters/filter_state.go index 77c424d1c..dac5c7735 100644 --- a/filters/filter_state.go +++ b/filters/filter_state.go @@ -37,7 +37,7 @@ func (filter *stateFilter) Match(alert *models.Alert, matches int) bool { panic(e) } -func newstateFilter() FilterT { +func newStateFilter() FilterT { f := stateFilter{} return &f } diff --git a/filters/filter_test.go b/filters/filter_test.go index 546143b84..7b8e1b74b 100644 --- a/filters/filter_test.go +++ b/filters/filter_test.go @@ -432,6 +432,42 @@ var tests = []filterTest{ Expression: "@inhibited=~false", IsValid: false, }, + filterTest{ + Expression: "@alertmanager=test", + IsValid: true, + Alert: models.Alert{}, + IsMatch: true, + }, + filterTest{ + Expression: "@alertmanager=abc", + IsValid: true, + Alert: models.Alert{}, + IsMatch: false, + }, + filterTest{ + Expression: "@alertmanager=~tes", + IsValid: true, + Alert: models.Alert{}, + IsMatch: true, + }, + filterTest{ + Expression: "@alertmanager=~000", + IsValid: true, + Alert: models.Alert{}, + IsMatch: false, + }, + filterTest{ + Expression: "@alertmanager!=tes", + IsValid: true, + Alert: models.Alert{}, + IsMatch: true, + }, + filterTest{ + Expression: "@alertmanager!~abc", + IsValid: true, + Alert: models.Alert{}, + IsMatch: true, + }, } func TestFilters(t *testing.T) { diff --git a/filters/registry.go b/filters/registry.go index 37d770409..a30fca9a9 100644 --- a/filters/registry.go +++ b/filters/registry.go @@ -40,11 +40,18 @@ type filterConfig struct { // AllFilters contains the mapping of all filters along with operators they // support var AllFilters = []filterConfig{ + filterConfig{ + Label: "@alertmanager", + LabelRe: regexp.MustCompile("^@alertmanager$"), + SupportedOperators: []string{regexpOperator, negativeRegexOperator, equalOperator, notEqualOperator}, + Factory: newAlertmanagerInstanceFilter, + Autocomplete: alertmanagerInstanceAutocomplete, + }, filterConfig{ Label: "@state", LabelRe: regexp.MustCompile("^@state$"), SupportedOperators: []string{equalOperator, notEqualOperator}, - Factory: newstateFilter, + Factory: newStateFilter, Autocomplete: stateAutocomplete, }, filterConfig{ diff --git a/views_test.go b/views_test.go index 6d88fc983..c265a1c8a 100644 --- a/views_test.go +++ b/views_test.go @@ -209,6 +209,8 @@ var acTests = []acTestCase{ "alertname!=Host_Down", "alertname!=HTTP_Probe_Failed", "alertname!=Free_Disk_Space_Too_Low", + "@alertmanager=default", + "@alertmanager!=default", "@age>1h", "@age>10m", "@age<1h", @@ -226,6 +228,8 @@ var acTests = []acTestCase{ "alertname!=Host_Down", "alertname!=HTTP_Probe_Failed", "alertname!=Free_Disk_Space_Too_Low", + "@alertmanager=default", + "@alertmanager!=default", }, }, acTestCase{ @@ -285,6 +289,8 @@ var acTests = []acTestCase{ "@receiver!=by-cluster-service", "@limit=50", "@limit=10", + "@alertmanager=default", + "@alertmanager!=default", "@age>1h", "@age>10m", "@age<1h",