From 1cba0c7a37e85493dac097927acb9815f487a69e Mon Sep 17 00:00:00 2001 From: Julien Pivotto Date: Thu, 11 Jun 2020 15:51:10 +0200 Subject: [PATCH] Remove HipChat (#2281) Signed-off-by: Julien Pivotto --- CHANGELOG.md | 1 + api/v1/api_test.go | 6 +- asset/assets_vfsdata.go | 4 +- cmd/alertmanager/main.go | 4 - config/config.go | 24 ------ config/config_test.go | 24 +++--- config/notifiers.go | 41 ---------- config/notifiers_test.go | 17 ---- config/testdata/conf.empty-fields.yml | 2 - config/testdata/conf.good.yml | 10 --- doc/examples/simple.yml | 11 --- notify/hipchat/hipchat.go | 112 -------------------------- notify/hipchat/hipchat_test.go | 62 -------------- notify/notify.go | 1 - template/default.tmpl | 4 - 15 files changed, 17 insertions(+), 306 deletions(-) delete mode 100644 notify/hipchat/hipchat.go delete mode 100644 notify/hipchat/hipchat_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index f08cc4cc..502440bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## 0.21.0-rc.0 / 2020-06-05 +* [CHANGE] [HipChat] Remove HipChat integration as it is end-of-life. #2282 * [CHANGE] [amtool] Remove default assignment of environment variables. #2161 * [CHANGE] [PagerDuty] Enforce 512KB event size limit. #2225 * [ENHANCEMENT] [amtool] Add `cluster` command to show cluster and peer statuses. #2256 diff --git a/api/v1/api_test.go b/api/v1/api_test.go index 35286ad3..d25f3628 100644 --- a/api/v1/api_test.go +++ b/api/v1/api_test.go @@ -525,15 +525,15 @@ func TestSilenceFiltering(t *testing.T) { } func TestReceiversMatchFilter(t *testing.T) { - receivers := []string{"pagerduty", "slack", "hipchat"} + receivers := []string{"pagerduty", "slack", "pushover"} - filter, err := regexp.Compile(fmt.Sprintf("^(?:%s)$", "hip.*")) + filter, err := regexp.Compile(fmt.Sprintf("^(?:%s)$", "push.*")) if err != nil { t.Errorf("Unexpected error %v", err) } require.True(t, receiversMatchFilter(receivers, filter)) - filter, err = regexp.Compile(fmt.Sprintf("^(?:%s)$", "hip")) + filter, err = regexp.Compile(fmt.Sprintf("^(?:%s)$", "push")) if err != nil { t.Errorf("Unexpected error %v", err) } diff --git a/asset/assets_vfsdata.go b/asset/assets_vfsdata.go index df2d8991..b06dfd01 100644 --- a/asset/assets_vfsdata.go +++ b/asset/assets_vfsdata.go @@ -147,9 +147,9 @@ var Assets = func() http.FileSystem { "/templates/default.tmpl": &vfsgen۰CompressedFileInfo{ name: "default.tmpl", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), - uncompressedSize: 17284, + uncompressedSize: 17128, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x1b\x7f\x6f\xda\xc8\xf2\x7f\x7f\x8a\x39\x9f\x9e\xae\x91\x00\x93\xf6\xae\xba\x12\xc8\x13\x25\x4e\x63\x3d\x02\x11\x38\xed\x55\xa7\x53\xb4\xd8\x03\x6c\x6b\x7b\x7d\xbb\xeb\x10\x2e\xe5\xbb\x3f\xed\xda\xfc\x30\x98\x84\x44\xbd\x84\xf7\x2e\x89\xda\xd8\xeb\xf9\x3d\xb3\x33\xb3\xde\xf5\xed\x2d\xf8\x38\xa4\x11\x82\x79\x75\x45\x02\xe4\x32\x24\x11\x19\x21\x37\x61\x36\x6b\xaa\xfb\xf3\xf4\xfe\xf6\x16\x30\xf2\x61\x36\x33\xb6\xa2\x5c\xf6\xda\x0a\xeb\xf6\x16\x2a\xf6\x8d\x44\x1e\x91\xe0\xb2\xd7\x86\xd9\xcc\xfa\xd1\xd2\x70\xe2\xdf\x1c\x3d\xa4\xd7\xc8\x1b\x0a\xa8\x97\xdd\xc0\x37\x48\x78\xf0\x67\x82\x7c\x9a\xa2\x67\x8c\xf2\x9c\x44\x32\xf8\x82\x9e\x54\x1c\x7e\x57\xd8\x7d\x49\x64\x22\xe0\x1b\x48\x76\x19\xc7\xc8\x53\x54\x3a\x04\xfc\x73\xf1\xd0\x1c\x52\x4e\xa3\x91\xc2\xa9\x29\x1c\xad\x90\xa8\x9c\xea\x51\xf8\x06\x01\x46\xab\x1c\xff\x00\x05\xf4\x81\xb3\x24\x6e\x93\x01\x06\xa2\xd2\x67\x5c\xa2\x7f\x41\x28\x17\x95\x8f\x24\x48\x50\x31\xfc\xc2\x68\x04\x26\x28\xaa\x90\xb2\x1c\x49\x78\xa5\x68\x55\x5a\x2c\x0c\x59\x94\x22\x1f\x64\x63\x2b\xf4\x0e\x60\x36\x7b\x75\x7b\x0b\x13\x2a\xc7\x79\xe0\x4a\x0f\x43\x76\x8d\x79\xee\x1d\x12\xa2\xc8\x2c\x5a\xc4\x7d\x21\xf8\xc1\xe2\x6a\x8b\x9b\x7c\x14\x1e\xa7\xb1\xa4\x2c\x32\xef\xb0\xb1\xc4\x1b\x99\xba\xf4\x2a\xa0\x42\x66\xa0\x9c\x44\x23\x84\x0a\xcc\x66\xa9\x5c\x35\x63\x39\xb8\x69\x27\x65\x95\xb2\x36\xa4\x12\x5f\xdd\x35\x60\xa1\x40\x26\x58\xca\xbc\x19\x45\x4c\x12\x25\x53\x8e\xe4\xca\xf0\xe3\xe8\xf6\x59\xc2\x3d\xac\xa5\xce\xc4\x08\x39\x91\x8c\xa7\x91\x68\x14\x18\x2a\x67\x03\x11\x10\xef\x6b\xc5\xc7\x21\x49\x02\x59\x91\x54\x06\x98\x59\x41\x62\x18\x07\x44\xe6\x63\xb1\xb2\xcd\xe4\x79\x3a\x89\x50\xb3\x21\x2c\x22\x95\x9f\x73\x3b\xd2\x1b\x92\x20\x18\x10\xef\xeb\x06\xbd\x42\xf1\x15\x51\xf8\x06\xf7\x01\x06\x34\xfa\xba\xb3\x04\x5e\x26\x01\xf5\xcd\xdd\x10\x62\x8e\x2a\xba\x76\x84\x5e\x11\xe8\x4e\x8b\xe9\x94\xb3\xa3\xc8\xd4\x63\x11\x86\xec\x0b\xdd\x51\x06\x05\x9f\xf0\x60\x57\x89\x77\x57\x6e\xc8\x98\x4c\x13\xec\x96\x20\x1c\xd3\xd8\x1b\x13\xb9\x44\xe0\x2c\x7c\x7c\xe8\xac\x53\x0b\x51\x08\x32\x7a\x40\x58\xe7\x64\x8b\x15\x37\x3f\x91\xd3\x05\xbd\xcd\xdc\xf2\xb0\xa9\xb2\x49\xd1\x0b\x28\x46\xf2\xf1\x1a\x6f\xa3\xb8\x2c\x50\x8f\x8b\xa7\x4d\xba\x34\x12\x92\x44\x1e\x8a\x02\xba\x1b\xc9\xf4\x0e\xab\xb2\x58\x8c\x30\xa2\xf8\x78\x27\xdd\x45\x6c\xd3\x43\x59\xed\xd9\x92\x6a\x0b\x8b\x8d\xb1\x56\xea\x72\xb5\xf4\x00\xaa\x50\x9e\xcd\x8c\x74\x10\xd2\x41\x9d\xd4\xef\xb6\x48\xbe\x20\x6b\x26\xe5\x15\x8d\x0a\xf8\xf5\x50\xb0\xe0\x1a\xfd\x35\x8e\xf3\xe1\xdd\x79\xce\x31\x36\xb8\x96\x77\x31\xa9\xd0\x35\xe6\xe1\xd1\x94\xf3\xfa\x04\x1f\x33\x31\x8d\x17\xff\xdd\xe1\xbf\xe6\xaa\xfd\x79\xb0\x41\xaf\xd0\x3f\x5b\xbc\xbe\xe6\x1f\xc9\xae\x54\x21\xdf\x9a\xe5\x37\xc1\x63\xc2\xe5\xf4\x01\xf0\x92\x8c\x76\x85\x26\x23\x8c\xe4\xd5\x7a\xf9\xcd\xc7\xd7\x35\xf5\x24\xe3\x2c\x16\xcb\xb0\x95\x44\xe2\x55\x3e\xd0\x5e\x62\xe9\x61\xb9\x60\xd3\xaa\x18\x49\x2a\xa7\x57\x3e\x15\x71\x40\xa6\x57\x5b\x3a\xbd\xfb\x13\xf7\x26\xe5\x90\x45\x54\x32\x65\x90\x2b\xc9\x58\xf0\xc0\x92\xb8\x4a\x1b\x43\x42\x83\x65\x1c\x2c\x17\x53\x0f\x96\x32\x4f\x69\x2c\x43\x2d\x96\x51\xff\xe1\xa4\xdb\x72\x3f\x5f\xd8\xa0\x86\xe0\xe2\xf2\x7d\xdb\x69\x81\x59\xb6\xac\x4f\x6f\x5a\x96\x75\xe2\x9e\xc0\x6f\x67\xee\x79\x1b\x0e\x2b\x55\x70\x39\x89\x04\x55\xc1\x46\x02\xcb\xb2\x3b\x26\x98\x63\x29\xe3\x9a\x65\x4d\x26\x93\xca\xe4\x4d\x85\xf1\x91\xe5\xf6\xac\x1b\x45\xeb\x50\x21\x67\x97\x65\xb9\x82\x59\xf1\xa5\x6f\x1e\x1b\xf5\x1f\xca\x65\xa3\x2f\xa7\x01\x02\x89\x7c\xd0\x4c\x7c\xe4\x54\x39\x54\xb5\x4e\xa0\x48\x8b\x9a\x65\x8d\xa8\x1c\x27\x83\x8a\xc7\x42\x4b\xe9\x30\x4a\x22\x4b\x93\x23\x5e\x4a\xaf\xac\x55\x2b\xcf\xcd\x21\x0c\xc3\x70\xc7\x08\xe7\x8e\x0b\x6d\xea\x61\x24\x10\x5e\x9d\x3b\xee\x81\x61\xb4\x58\x3c\xe5\x74\x34\x96\xf0\xca\x3b\x80\xd7\xd5\xc3\x9f\xe1\x3c\xa5\x68\x18\x17\xc8\x43\x2a\x04\x65\x11\x50\x01\x63\xe4\x38\x98\xc2\x88\x93\x48\xa2\x5f\x82\x21\x47\x04\x36\x04\x6f\x4c\xf8\x08\x4b\x20\x19\x90\x68\x0a\x31\x72\xc1\x22\x60\x03\x49\x68\xa4\xe2\x9f\x80\xc7\xe2\xa9\xc1\x86\x20\xc7\x54\x80\x60\x43\x39\x21\x3c\xd5\x90\x08\xc1\x3c\x4a\x24\xfa\xe0\x33\x2f\x09\x31\x4a\x27\x2e\x0c\x69\x80\x02\x5e\xc9\x31\x82\xd9\xcf\x30\xcc\x03\xcd\xc4\x47\x12\x18\x34\x02\xf5\x6c\xfe\x48\xaf\x43\x59\x22\x81\xa3\x90\x9c\x6a\x2b\x94\x80\x46\x5e\x90\xf8\x4a\x86\xf9\xe3\x80\x86\x34\xe3\xa0\xd0\xb5\xe2\xc2\x90\x0c\x12\x81\x25\x2d\x67\x09\x42\xe6\xd3\xa1\xfa\x8b\x5a\xad\x38\x19\x04\x54\x8c\x4b\xe0\x53\x45\x7a\x90\x48\x2c\x81\x50\x83\xda\x8e\x25\xa5\x87\xc5\x38\x08\x0c\x02\xc3\x63\x31\x45\x01\x5a\xd7\xa5\x74\x1a\x46\x89\x1e\x2b\x83\xca\xcc\x44\x42\x8d\x4c\xc6\x2c\xcc\x6b\x42\x85\x31\x4c\x78\x44\xc5\x18\x35\x8e\xcf\x40\x30\xcd\x51\x45\xb3\x1a\x51\xe0\x43\x16\x04\x6c\xa2\x54\xf3\x58\xe4\xd3\x6c\xe9\xa9\x9d\x4c\x06\x6a\xf9\xed\x2d\xfc\x1a\x31\x49\xbd\xd4\xdc\xda\x01\xf1\xd2\xab\xd9\x23\x31\x26\x41\x00\x03\xcc\x0c\x86\x3e\xd0\x08\xc8\x8a\x3a\x5c\xb1\x57\xfd\xa1\xa4\x24\x80\x98\x71\xcd\x6f\x5d\xcd\x8a\x61\xb8\x67\x36\xf4\xbb\xa7\xee\xa7\x66\xcf\x06\xa7\x0f\x17\xbd\xee\x47\xe7\xc4\x3e\x01\xb3\xd9\x07\xa7\x6f\x96\xe0\x93\xe3\x9e\x75\x2f\x5d\xf8\xd4\xec\xf5\x9a\x1d\xf7\x33\x74\x4f\xa1\xd9\xf9\x0c\xff\x71\x3a\x27\x25\xb0\x7f\xbb\xe8\xd9\xfd\x3e\x74\x7b\x86\x73\x7e\xd1\x76\xec\x93\x12\x38\x9d\x56\xfb\xf2\xc4\xe9\x7c\x80\xf7\x97\x2e\x74\xba\x2e\xb4\x9d\x73\xc7\xb5\x4f\xc0\xed\x82\x62\x98\x91\x72\xec\xbe\x22\x76\x6e\xf7\x5a\x67\xcd\x8e\xdb\x7c\xef\xb4\x1d\xf7\x73\xc9\x38\x75\xdc\x8e\xa2\x79\xda\xed\x41\x13\x2e\x9a\x3d\xd7\x69\x5d\xb6\x9b\x3d\xb8\xb8\xec\x5d\x74\xfb\x36\x34\x3b\x27\xd0\xe9\x76\x9c\xce\x69\xcf\xe9\x7c\xb0\xcf\xed\x8e\x5b\x01\xa7\x03\x9d\x2e\xd8\x1f\xed\x8e\x0b\xfd\xb3\x66\xbb\xad\x58\x19\xcd\x4b\xf7\xac\xdb\x53\xf2\x41\xab\x7b\xf1\xb9\xe7\x7c\x38\x73\xe1\xac\xdb\x3e\xb1\x7b\x7d\x78\x6f\x43\xdb\x69\xbe\x6f\xdb\x29\xab\xce\x67\x68\xb5\x9b\xce\x79\x09\x4e\x9a\xe7\xcd\x0f\xb6\xc6\xea\xba\x67\x76\xcf\x50\x60\xa9\x74\xf0\xe9\xcc\x56\x43\x8a\x5f\xb3\x03\xcd\x96\xeb\x74\x3b\x4a\x8d\x56\xb7\xe3\xf6\x9a\x2d\xb7\x04\x6e\xb7\xe7\x2e\x50\x3f\x39\x7d\xbb\x04\xcd\x9e\xd3\x57\x06\x39\xed\x75\xcf\x4b\x86\x32\x67\xf7\x54\x81\x38\x1d\x85\xd7\xb1\x53\x2a\xca\xd4\x90\xf3\x48\xb7\xa7\xef\x2f\xfb\xf6\x82\x20\x9c\xd8\xcd\xb6\xd3\xf9\xd0\x57\xc8\x4a\xc5\x39\x70\xc5\x28\x97\x8f\x8d\xba\x4e\x81\x37\x61\x10\x89\x46\x41\x62\x3b\x7c\xf7\xee\x5d\x9a\xcf\xcc\xdd\x80\x84\x4a\x6e\x0d\x73\xc8\x22\x59\x1e\x92\x90\x06\xd3\x1a\xfc\x74\x86\xc1\x35\x4a\xea\x11\xe8\x60\x82\x3f\x95\x60\x31\x50\x82\x26\xa7\x24\x28\x81\x20\x91\x28\x0b\xe4\x74\x78\x04\x03\x76\x53\x16\xf4\x2f\x55\x8b\x61\xc0\xb8\x8f\xbc\x3c\x60\x37\x47\xa0\x89\x0a\xfa\x17\xd6\xe0\xf0\xe7\xf8\xe6\x08\x42\xc2\x47\x34\xaa\x41\xf5\x48\xe5\xd6\x31\x12\xff\x39\xf9\x87\x28\x09\xa8\x8a\xda\x30\xaf\x29\x4e\xd4\x2c\x32\xd5\xec\x95\x18\xc9\x86\x39\xa1\xbe\x1c\x37\x7c\xbc\xa6\x1e\x96\xf5\xcd\xf3\x19\x0b\xac\xb9\xb8\xca\x99\x65\xfc\x33\xa1\xd7\x0d\xb3\x95\x8a\x5a\x76\xa7\x31\xae\x08\xae\x5a\x11\x4b\x39\xf7\x48\x57\x02\x81\xb2\x71\xe9\x9e\x96\x7f\x7d\x66\xf1\xf5\x7b\x97\xe7\x73\xf7\x5d\xbd\x48\xdd\xd2\xc2\x1d\x1b\x46\xdd\x52\x41\xa9\x2e\x06\xcc\x9f\x02\x95\x18\x0a\x8f\xc5\xd8\x30\x4d\x7d\x23\xa7\xea\x3a\x9b\x51\xc2\x1b\x63\x48\xf4\x8c\xb2\x55\x75\x3f\x9f\xf7\xbe\x4f\xaa\x64\x79\x82\x83\xaf\x54\x96\xd3\x07\x21\x63\x72\xac\x91\xd2\xda\x40\x89\x40\x7f\x09\xa4\x62\x43\x63\x97\x89\xff\x25\x11\xb2\x06\x11\x8b\xf0\x08\xc6\xa8\x2a\x53\x0d\x0e\xab\xd5\x7f\x1d\x41\x40\x23\x2c\x2f\x86\x2a\x6f\x31\x3c\x02\x3d\x03\x52\x00\xf8\x81\x86\x6a\xb2\x90\x48\x1e\xc1\x80\x78\x5f\x47\x9c\x25\x91\x5f\xf6\x58\xc0\x78\x0d\x7e\x1c\xbe\x55\xbf\xab\xe6\x87\x98\xf8\xbe\x96\x4a\x45\xc3\x60\xa4\x21\x1b\x66\x06\x69\x2a\x7b\x4b\x32\x78\xea\xf0\x58\x51\x69\x47\x3d\x0a\x65\x07\xa8\x4b\xfe\x8c\x79\x0c\x40\x49\xf0\xc4\x99\xf4\x1a\xb9\x22\x12\x94\x49\x40\x47\x51\x0d\x24\x8b\xf3\x86\xba\xd6\x0f\x1a\xa6\x64\xb1\x79\x5c\xb7\xa4\xbf\x14\x34\xcd\xac\xe6\xdb\x6a\xf5\x89\xa7\x4a\xa1\xd0\xd9\xd2\xaa\x06\x83\x80\x79\x5f\x73\xb1\x1d\x92\x9b\x72\x16\x24\x6f\xab\xd5\xf8\x26\xf7\xd0\x0b\x90\x70\xc5\x50\x8e\x73\xe3\xdb\x26\xca\xc2\x38\x40\x12\xc9\xd6\xa6\x44\xce\x5a\xda\x50\x00\x75\x9f\x5e\x3f\x75\x58\xe5\xf5\x5d\x37\xce\xdd\x4a\xcc\xe5\x56\x4e\xd6\x93\x39\xf3\xb3\xb2\x84\x09\x1e\x06\x41\x06\xdd\x30\xab\xe9\xbd\x88\x89\x37\xbf\x7f\x52\x45\xb3\x87\x9c\xf8\x34\x11\x35\x78\xa3\xc7\x0a\x12\xc0\x70\x98\xcb\x62\x29\x5a\x0d\x0e\xe3\x1b\x10\x2c\xa0\x3e\xfc\x88\xef\xd4\x6f\x3e\x31\x0c\x87\x2b\xb6\xd8\x87\xec\xb0\x94\xe4\xe9\xb2\xc4\xdb\xad\x13\x2e\x67\x5d\x8d\x32\xc9\x4a\xcd\x2f\xd5\xea\x11\xe8\x12\x95\xc1\x7b\x18\x49\xe4\x45\xfe\xd2\xff\xaa\xda\x29\x9b\x7e\xb3\xdf\xfe\xf2\xfa\x75\xab\xb8\x00\xbd\x56\x71\x6d\x42\x36\xdf\x52\x06\xab\xde\x4b\x71\x8b\x67\xe4\xfc\x67\xb9\xdf\xbb\xd8\xe8\x05\xfd\xb2\xa4\xf0\x5d\xd2\x01\x1c\xc2\x6c\x26\x16\x2f\x3c\x60\xc8\x38\x2c\xf7\x24\xb7\xec\x09\xc3\x6c\xb6\xc6\x15\x56\x77\x28\x1b\xb9\xfd\xc9\x0d\xb0\xec\xd5\x4a\xce\xf9\x8b\x1c\xbc\xb8\xe7\x2f\x61\xba\x4b\x31\x5b\x06\xcf\x61\x1a\x3c\x77\xc5\xc6\xde\xe7\xbe\xad\x66\xdf\xaf\x20\xd8\xf7\x50\xa8\x42\x75\x9e\x4b\xee\x0a\x87\x4c\x0d\x02\x63\x8e\xc3\x86\xb9\xcb\x8e\xc1\x13\xc7\xc3\x3c\x69\x9e\x9e\x9e\x66\xc9\xd7\x47\x8f\x71\xfd\x4e\x6e\xbe\x3c\xc8\x2d\x08\x5e\xab\xe5\x40\x2e\x6f\x0f\x58\xe0\x17\x27\x6e\x2f\xe1\x42\x51\x8f\x19\x4d\x07\x16\x0d\x05\x8d\x34\xd1\xac\xaf\x58\x4b\xf0\xbf\x28\xc1\x34\x3d\xfd\x12\x75\xc8\x78\x58\x03\x8f\xc4\x54\x92\x80\xfe\x85\x85\x49\xff\xcd\xcf\xbf\xa2\x4f\x0a\xea\xf5\x06\x44\x36\xac\xad\x5c\x4b\x0b\xf9\x62\x70\xd1\xbd\xc5\x37\x99\x7b\x8f\x3f\x52\x9c\x00\x8d\xe0\xde\xb7\xe3\x75\x8b\x14\xc6\xf0\x5a\xe2\x2d\x4e\xbf\xe9\xcf\x7d\x9b\x1f\x05\x45\xe1\x65\xca\xfe\x3d\x53\x56\x48\xce\xa2\xd1\xf3\x99\xf6\xf7\xed\xa7\xca\xfe\xc8\x76\xbe\xea\x56\x2a\xe4\x77\x88\xba\x82\x86\x21\x7b\x32\x3f\x3a\xb5\xbe\x85\xf6\x12\x87\xff\x8c\x38\x4c\x5b\xd3\x45\xa8\xd5\x07\xcf\xe7\x66\xb0\x8a\x6d\x74\xcf\x99\xc1\xed\x07\xfb\x9e\x59\x99\xed\xf3\x0e\x0a\x6a\xc1\x72\x13\x3d\xad\x04\xcf\x1e\x19\x2b\x12\xed\x4b\x78\xdc\x6b\xd1\x7b\x0f\x82\xfe\x8f\x06\xcb\x6a\x87\xb9\x7e\x32\xf5\x99\x1a\xca\x79\xbb\xb5\xd1\x53\x26\x91\x8f\x5c\x75\x7f\xf9\x70\x4a\xcf\xd6\xaa\x26\x6a\xff\x72\xcc\xe3\xaa\xe9\x8e\xed\xdd\xea\x59\x93\x42\xf7\xbe\x74\x85\x7b\x53\x8d\xf7\x2e\x32\x01\xea\xe3\x3d\x94\x69\xef\xec\xf4\x90\x19\x7c\x57\x47\xfc\x32\xb1\xfe\x3f\xdb\xdc\xd5\xe5\xd6\xe2\xcc\xde\x72\xc1\x35\x1f\x7a\x86\x25\xd7\xea\x09\xc2\x97\x68\xfc\x67\x44\xe3\xcb\xa2\xeb\x65\xd1\xf5\xb2\xe8\xda\xf7\x60\x79\x59\x74\xed\x4d\xcb\xb6\xcd\x51\x75\x4b\xef\xc7\x1d\x3f\x60\x2b\x74\x81\xb2\x1c\x79\xf2\x93\x18\xb9\xa3\x49\x2b\x27\x4d\x96\x8e\x7e\xf7\xee\xdd\x5d\x1b\xdc\xf9\x9d\xdd\xcd\x2d\xc9\xfd\x68\x1a\xf6\xa9\x7d\x79\xca\xd6\xe5\xf5\xd6\xd6\xa5\x70\x13\xed\x3e\x97\xaf\xf4\x36\x6b\xe7\x1a\xf2\xa7\xb0\x56\xd3\x55\xfe\x33\xfa\xa7\x0b\x88\xd7\xab\xd9\x4a\x6b\xb4\x73\xaa\xc2\x48\xc2\x60\xba\xdb\x3e\xdc\x66\xee\xd8\x38\xef\xb0\x9e\x19\xea\x96\x4f\xaf\x8f\xd3\xff\x8d\x7c\x9a\xd8\xb7\xb6\x76\xcb\xf1\xba\x54\xc5\x65\xfe\xaa\x5b\x03\xe6\x4f\xd5\xc8\x58\x86\xc1\xb1\x61\x14\x7f\xbf\x13\x27\x62\xcc\xae\x91\x7f\x87\x6f\xd3\x37\x48\xfd\xfd\xdf\x83\x7d\x9f\xcf\xc1\x76\xff\x1a\xec\xfb\x7d\x0c\xb6\xc2\x73\x07\x4b\x2e\xbf\x17\x7f\xc0\x37\xa1\xff\x0d\x00\x00\xff\xff\xe5\xdf\x5d\x02\x84\x43\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x1b\x7f\x6f\xda\xc8\xf2\x7f\x7f\x8a\x39\x9f\x9e\xae\x91\x00\x93\xf6\xae\xba\x10\xc8\x13\x25\x4e\x63\x3d\x02\x11\x38\xed\x55\xa7\x53\xb4\xd8\x03\x6c\x6b\x7b\x7d\xbb\xeb\x10\x2e\xe5\xbb\x3f\xed\xda\xfc\x30\x98\x84\x54\xbd\x84\xf7\x2e\x89\xda\xd8\xeb\xf9\x3d\xb3\x33\xb3\xde\xf5\xdd\x1d\xf8\x38\xa4\x11\x82\x79\x7d\x4d\x02\xe4\x32\x24\x11\x19\x21\x37\x61\x36\x6b\xaa\xfb\x8b\xf4\xfe\xee\x0e\x30\xf2\x61\x36\x33\xb6\xa2\x5c\xf5\xda\x0a\xeb\xee\x0e\x2a\xf6\xad\x44\x1e\x91\xe0\xaa\xd7\x86\xd9\xcc\xfa\xd1\xd2\x70\xe2\xdf\x1c\x3d\xa4\x37\xc8\x1b\x0a\xa8\x97\xdd\xc0\x57\x48\x78\xf0\x67\x82\x7c\x9a\xa2\x67\x8c\xf2\x9c\x44\x32\xf8\x8c\x9e\x54\x1c\x7e\x57\xd8\x7d\x49\x64\x22\xe0\x2b\x48\x76\x15\xc7\xc8\x53\x54\x3a\x04\xfc\x73\xf1\xd0\x1c\x52\x4e\xa3\x91\xc2\xa9\x29\x1c\xad\x90\xa8\x9c\xe9\x51\xf8\x0a\x01\x46\xab\x1c\xff\x00\x05\xf4\x9e\xb3\x24\x6e\x93\x01\x06\xa2\xd2\x67\x5c\xa2\x7f\x49\x28\x17\x95\x0f\x24\x48\x50\x31\xfc\xcc\x68\x04\x26\x28\xaa\x90\xb2\x1c\x49\x78\xa5\x68\x55\x5a\x2c\x0c\x59\x94\x22\x1f\x64\x63\x2b\xf4\x0e\x60\x36\x7b\x75\x77\x07\x13\x2a\xc7\x79\xe0\x4a\x0f\x43\x76\x83\x79\xee\x1d\x12\xa2\xc8\x2c\x5a\xc4\x7d\x21\xf8\xc1\xe2\x6a\x8b\x9b\x7c\x14\x1e\xa7\xb1\xa4\x2c\x32\xef\xb1\xb1\xc4\x5b\x99\xba\xf4\x3a\xa0\x42\x66\xa0\x9c\x44\x23\x84\x0a\xcc\x66\xa9\x5c\x35\x63\x39\xb8\x69\x27\x65\x95\xb2\x36\xa4\x12\x5f\xdd\x35\x60\xa1\x40\x26\x58\xca\xbc\x19\x45\x4c\x12\x25\x53\x8e\xe4\xca\xf0\xb7\xd1\xed\xb3\x84\x7b\x58\x4b\x9d\x89\x11\x72\x22\x19\x4f\x23\xd1\x28\x30\x54\xce\x06\x22\x20\xde\x97\x8a\x8f\x43\x92\x04\xb2\x22\xa9\x0c\x30\xb3\x82\xc4\x30\x0e\x88\xcc\xc7\x62\x65\x9b\xc9\xf3\x74\x12\xa1\x66\x43\x58\x44\x2a\x3f\xe7\x76\xa4\x37\x24\x41\x30\x20\xde\x97\x0d\x7a\x85\xe2\x2b\xa2\xf0\x15\x1e\x02\x0c\x68\xf4\x65\x67\x09\xbc\x4c\x02\xea\x9b\xbb\x21\xc4\x1c\x55\x74\xed\x08\xbd\x22\xd0\xbd\x16\xd3\x29\x67\x47\x91\xa9\xc7\x22\x0c\xd9\x67\xba\xa3\x0c\x0a\x3e\xe1\xc1\xae\x12\xef\xae\xdc\x90\x31\x99\x26\xd8\x2d\x41\x18\x2b\xd5\xfc\x44\x4e\x17\x28\x9b\xf3\xf7\x71\xe1\xb8\x49\xd1\x0b\x28\x46\xf2\xdb\x03\x72\x1b\xc5\x65\x11\xf8\x36\x9f\x6d\xd2\xa5\x91\x90\x24\xf2\x50\x14\xd0\xdd\x48\x58\x95\xed\x56\x65\xb1\x18\x61\x44\x71\x41\x38\x44\x21\xc8\xe8\xdb\xe6\xf7\x06\xb1\x4d\x0f\x65\xf9\x7d\x4b\x3a\x2b\x4c\xe8\xc6\x5a\x39\xc9\xd5\xab\x03\xa8\x42\x79\x36\x33\xd2\x41\x48\x07\x75\xe2\xbc\xdf\x22\xf9\xa2\xa7\x99\x94\x57\x34\x2a\xe0\xd7\x43\xc1\x82\x1b\xf4\xd7\x38\xce\x87\x77\xe7\x39\xc7\xd8\xe0\x5a\xde\xc5\xa4\x42\xe7\xf1\xc7\x47\x53\xce\xeb\x13\xf4\xc6\x44\x3e\xd6\xe7\xc6\x8b\xff\xee\xf1\x5f\x73\xd5\xfe\x3c\xd8\xa0\x57\xe8\x9f\x2d\x5e\x5f\xf3\x8f\x64\xd7\xaa\x58\x6e\xcd\xa4\x9b\xe0\x31\xe1\x72\xfa\x08\x78\x49\x46\xbb\x42\x93\x11\x46\xf2\x7a\xbd\xc4\xe5\xe3\xeb\x86\x7a\x92\x71\x16\x8b\x65\xd8\x4a\x22\xf1\x3a\x1f\x68\x2f\xb1\xf4\xb8\x5c\xb0\x69\x55\x8c\x24\x95\xd3\x6b\x9f\x8a\x38\x20\xd3\xeb\x2d\xdd\xd4\xc3\x89\x7b\x93\x72\xc8\x22\x2a\x99\x32\xc8\xb5\x64\x2c\x78\x64\x49\x5c\xa5\x8d\x21\xa1\xc1\x32\x0e\x96\x0b\x96\x47\x4b\x99\xa7\x34\x96\xa1\x16\xcb\xa8\xff\x70\xda\x6d\xb9\x9f\x2e\x6d\x50\x43\x70\x79\xf5\xae\xed\xb4\xc0\x2c\x5b\xd6\xc7\x37\x2d\xcb\x3a\x75\x4f\xe1\xb7\x73\xf7\xa2\x0d\x87\x95\x2a\xb8\x9c\x44\x82\xaa\x60\x23\x81\x65\xd9\x1d\x13\xcc\xb1\x94\x71\xcd\xb2\x26\x93\x49\x65\xf2\xa6\xc2\xf8\xc8\x72\x7b\xd6\xad\xa2\x75\xa8\x90\xb3\xcb\xb2\x5c\xc1\xac\xf8\xd2\x37\x4f\x8c\xfa\x0f\xe5\xb2\xd1\x97\xd3\x00\x81\x44\x3e\x68\x26\x3e\x72\xaa\x1c\x3a\xe4\x2c\x04\x45\x5a\xd4\x2c\x6b\x44\xe5\x38\x19\x54\x3c\x16\x5a\x4a\x87\x51\x12\x59\x9a\x1c\xf1\x52\x7a\x65\xad\x5a\x79\x6e\x0e\x61\x18\x86\x3b\x46\xb8\x70\x5c\x68\x53\x0f\x23\x81\xf0\xea\xc2\x71\x0f\x0c\xa3\xc5\xe2\x29\xa7\xa3\xb1\x84\x57\xde\x01\xbc\xae\x1e\xfe\x0c\x17\x29\x45\xc3\xb8\x44\x1e\x52\x21\x28\x8b\x80\x0a\x18\x23\xc7\xc1\x14\x46\x9c\x44\x12\xfd\x12\x0c\x39\x22\xb0\x21\x78\x63\xc2\x47\x58\x02\xc9\x80\x44\x53\x88\x91\x0b\x16\x01\x1b\x48\x42\x23\x15\xff\x04\x3c\x16\x4f\x0d\x36\x04\x39\xa6\x02\x04\x1b\xca\x09\xe1\xa9\x86\x44\x08\xe6\x51\x22\xd1\x07\x9f\x79\x49\x88\x51\x3a\x71\x61\x48\x03\x14\xf0\x4a\x8e\x11\xcc\x7e\x86\x61\x1e\x68\x26\x3e\x92\xc0\xa0\x11\xa8\x67\xf3\x47\x7a\xad\xc7\x12\x09\x1c\x85\xe4\x54\x5b\xa1\x04\x34\xf2\x82\xc4\x57\x32\xcc\x1f\x07\x34\xa4\x19\x07\x85\xae\x15\x17\x86\x64\x90\x08\x2c\x69\x39\x4b\x10\x32\x9f\x0e\xd5\x5f\xd4\x6a\xc5\xc9\x20\xa0\x62\x5c\x02\x9f\x2a\xd2\x83\x44\x62\x09\x84\x1a\xd4\x76\x2c\x29\x3d\x2c\xc6\x41\x60\x10\x18\x1e\x8b\x29\x0a\xd0\xba\x2e\xa5\xd3\x30\x4a\xf4\x58\x19\x54\x66\x26\x12\x6a\x64\x32\x66\x61\x5e\x13\x2a\x8c\x61\xc2\x23\x2a\xc6\xa8\x71\x7c\x06\x82\x69\x8e\x2a\x9a\xd5\x88\x02\x1f\xb2\x20\x60\x13\xa5\x9a\xc7\x22\x9f\x66\xcb\x3b\xed\x64\x32\x50\x4b\x5c\x6f\xe1\xd7\x88\x49\xea\xa5\xe6\xd6\x0e\x88\x97\x5e\xcd\x1e\x89\x31\x09\x02\x18\x60\x66\x30\xf4\x81\x46\x40\x56\xd4\xe1\x8a\xbd\xea\x0f\x25\x25\x01\xc4\x8c\x6b\x7e\xeb\x6a\x56\x0c\xc3\x3d\xb7\xa1\xdf\x3d\x73\x3f\x36\x7b\x36\x38\x7d\xb8\xec\x75\x3f\x38\xa7\xf6\x29\x98\xcd\x3e\x38\x7d\xb3\x04\x1f\x1d\xf7\xbc\x7b\xe5\xc2\xc7\x66\xaf\xd7\xec\xb8\x9f\xa0\x7b\x06\xcd\xce\x27\xf8\x8f\xd3\x39\x2d\x81\xfd\xdb\x65\xcf\xee\xf7\xa1\xdb\x33\x9c\x8b\xcb\xb6\x63\x9f\x96\xc0\xe9\xb4\xda\x57\xa7\x4e\xe7\x3d\xbc\xbb\x72\xa1\xd3\x75\xa1\xed\x5c\x38\xae\x7d\x0a\x6e\x17\x14\xc3\x8c\x94\x63\xf7\x15\xb1\x0b\xbb\xd7\x3a\x6f\x76\xdc\xe6\x3b\xa7\xed\xb8\x9f\x4a\xc6\x99\xe3\x76\x14\xcd\xb3\x6e\x0f\x9a\x70\xd9\xec\xb9\x4e\xeb\xaa\xdd\xec\xc1\xe5\x55\xef\xb2\xdb\xb7\xa1\xd9\x39\x85\x4e\xb7\xe3\x74\xce\x7a\x4e\xe7\xbd\x7d\x61\x77\xdc\x0a\x38\x1d\xe8\x74\xc1\xfe\x60\x77\x5c\xe8\x9f\x37\xdb\x6d\xc5\xca\x68\x5e\xb9\xe7\xdd\x9e\x92\x0f\x5a\xdd\xcb\x4f\x3d\xe7\xfd\xb9\x0b\xe7\xdd\xf6\xa9\xdd\xeb\xc3\x3b\x1b\xda\x4e\xf3\x5d\xdb\x4e\x59\x75\x3e\x41\xab\xdd\x74\x2e\x4a\x70\xda\xbc\x68\xbe\xb7\x35\x56\xd7\x3d\xb7\x7b\x86\x02\x4b\xa5\x83\x8f\xe7\xb6\x1a\x52\xfc\x9a\x1d\x68\xb6\x5c\xa7\xdb\x51\x6a\xb4\xba\x1d\xb7\xd7\x6c\xb9\x25\x70\xbb\x3d\x77\x81\xfa\xd1\xe9\xdb\x25\x68\xf6\x9c\xbe\x32\xc8\x59\xaf\x7b\x51\x32\x94\x39\xbb\x67\x0a\xc4\xe9\x28\xbc\x8e\x9d\x52\x51\xa6\x86\x9c\x47\xba\x3d\x7d\x7f\xd5\xb7\x17\x04\xe1\xd4\x6e\xb6\x9d\xce\xfb\xbe\x42\x56\x2a\xce\x81\x2b\x46\xb9\x7c\x62\xd4\x75\x0a\xbc\x0d\x83\x48\x34\x0a\x12\xdb\xe1\xd1\xd1\x51\x9a\xcf\xcc\xdd\x80\x84\x4a\x6e\x0d\x73\xc8\x22\x59\x1e\x92\x90\x06\xd3\x1a\xfc\x74\x8e\xc1\x0d\x4a\xea\x11\xe8\x60\x82\x3f\x95\x60\x31\x50\x82\x26\xa7\x24\x28\x81\x20\x91\x28\x0b\xe4\x74\x78\x0c\x03\x76\x5b\x16\xf4\x2f\x55\x8b\x61\xc0\xb8\x8f\xbc\x3c\x60\xb7\xc7\xa0\x89\x0a\xfa\x17\xd6\xe0\xf0\xe7\xf8\xf6\x18\x42\xc2\x47\x34\xaa\x41\xf5\x58\xe5\xd6\x31\x12\xff\x39\xf9\x87\x28\x09\xa8\x8a\xda\x30\x6f\x28\x4e\xd4\x2c\x32\xd5\xec\x95\x18\xc9\x86\x39\xa1\xbe\x1c\x37\x7c\xbc\xa1\x1e\x96\xf5\xcd\xf3\x19\x0b\xac\xb9\xb8\xca\x99\x65\xfc\x33\xa1\x37\x0d\xb3\x95\x8a\x5a\x76\xa7\x31\xae\x08\xae\x5a\x11\x4b\x39\xf7\x58\x57\x02\x81\xb2\x71\xe5\x9e\x95\x7f\x7d\x66\xf1\xf5\xbb\x8d\xe7\x73\xf7\x7d\xbd\x48\xdd\xd2\xc2\x9d\x18\x46\xdd\x52\x41\xa9\x2e\x06\xcc\x9f\x02\x95\x18\x0a\x8f\xc5\xd8\x30\x4d\x7d\x23\xa7\xea\x3a\x9b\x51\xc2\x1b\x63\x48\xf4\x8c\xb2\x55\x75\xbf\x98\xf7\xbe\x4f\xaa\x64\x79\x82\x83\x2f\x54\x96\xd3\x07\x21\x63\x72\xac\x91\xd2\xda\x40\x89\x40\x7f\x09\xa4\x62\x43\x63\x97\x89\xff\x39\x11\xb2\x06\x11\x8b\xf0\x18\xc6\xa8\x2a\x53\x0d\x0e\xab\xd5\x7f\x1d\x43\x40\x23\x2c\x2f\x86\x2a\x6f\x31\x3c\x06\x3d\x03\x52\x00\xf8\x81\x86\x6a\xb2\x90\x48\x1e\xc3\x80\x78\x5f\x46\x9c\x25\x91\x5f\xf6\x58\xc0\x78\x0d\x7e\x1c\xbe\x55\xbf\xab\xe6\x87\x98\xf8\xbe\x96\x4a\x45\xc3\x60\xa4\x21\x1b\x66\x06\x69\x2a\x7b\x4b\x32\x78\xea\xf0\x58\x51\x69\x47\x3d\x0a\x65\x07\xa8\x4b\xfe\x8c\x79\x0c\x40\x49\xf0\xc4\x99\xf4\x06\xb9\x22\x12\x94\x49\x40\x47\x51\x0d\x24\x8b\xf3\x86\xba\xd1\x0f\x1a\xa6\x64\xb1\x79\x52\xb7\xa4\xbf\x14\x34\xcd\xac\xe6\xdb\x6a\xf5\x89\xa7\x4a\xa1\xd0\xd9\xd2\xaa\x06\x83\x80\x79\x5f\x72\xb1\x1d\x92\xdb\x72\x16\x24\x6f\xab\xd5\xf8\x36\xf7\xd0\x0b\x90\x70\xc5\x50\x8e\x73\xe3\xdb\x26\xca\xc2\x38\x40\x12\xc9\xd6\xa6\x44\xce\x5a\xda\x50\x00\x75\x9f\xde\x3c\x75\x58\xe5\xf5\x5d\x37\xce\xfd\x4a\xcc\xe5\x56\x4e\xd6\x93\x39\xf3\xb3\xb2\x84\x09\x1e\x06\x41\x06\xdd\x30\xab\xe9\xbd\x88\x89\x37\xbf\x7f\x52\x45\xb3\x87\x9c\xf8\x34\x11\x35\x78\xa3\xc7\x0a\x12\xc0\x70\x98\xcb\x62\x29\x5a\x0d\x0e\xe3\x5b\x10\x2c\xa0\x3e\xfc\x88\x47\xea\x37\x9f\x18\x86\xc3\x15\x5b\xec\x43\x76\x58\x4a\xf2\x74\x59\xe2\xed\xd6\x09\x97\xb3\xae\x46\x99\x64\xa5\xe6\x97\x6a\xf5\x18\x74\x89\xca\xe0\x3d\x8c\x24\xf2\x22\x7f\xe9\x7f\x55\xed\x94\x4d\xbf\xd9\x6f\x7f\x79\xfd\xba\x55\x5c\x80\x5e\xab\xb8\x36\x21\x9b\x6f\x29\x83\x55\xef\xa5\xb8\xc5\x33\x72\xfe\xb3\xdc\x53\x5d\x6c\xa6\x82\x7e\x59\x52\xf8\x2e\xe9\x00\x0e\x61\x36\x13\x8b\x17\x1e\x30\x64\x1c\x96\xfb\x7e\x5b\xf6\x5d\x61\x36\x5b\xe3\x0a\xab\xbb\x80\x8d\xdc\x1e\xe0\x06\x58\xf6\x6a\x25\xe7\xfc\x45\x0e\x5e\xdc\xf3\x97\x30\xdd\xa5\x98\x2d\x83\xe7\x30\x0d\x9e\xfb\x62\x63\xef\x73\xdf\x56\xb3\xef\x57\x10\xec\x7b\x28\x54\xa1\x3a\xcf\x25\xf7\x85\x43\xa6\x06\x81\x31\xc7\x61\xc3\xdc\x65\xc7\xe0\x89\xe3\x61\x9e\x34\xcf\xce\xce\xb2\xe4\xeb\xa3\xc7\xb8\x7e\x27\x37\x5f\x1e\xe4\x16\x04\xaf\xd5\x72\x20\x97\xb7\x07\x2c\xf0\x8b\x13\xb7\x97\x70\xa1\xa8\xc7\x8c\xa6\x03\x8b\x86\x82\x46\x9a\x68\xd6\x57\xac\x25\xf8\x5f\x94\x60\x9a\x9e\x7e\x89\x3a\x64\x3c\xac\x81\x47\x62\x2a\x49\x40\xff\xc2\xc2\xa4\xff\xe6\xe7\x5f\xd1\x27\x05\xf5\x7a\x03\x22\x1b\xd6\x56\xae\xa5\x85\x7c\x31\xb8\xe8\xde\xe2\xdb\xcc\xbd\x27\x1f\x28\x4e\x80\x46\xf0\xe0\xdb\xf1\xba\x45\x0a\x63\x78\x2d\xf1\x16\xa7\xdf\xf4\xe7\xa1\xcd\x8f\x82\xa2\xf0\x32\x65\xff\x9e\x29\x2b\x24\x67\xd1\xe8\xf9\x4c\xfb\xfb\xf6\x93\x5b\x7f\x64\x3b\x5f\x75\x2b\x15\xf2\x3b\x44\x5d\x41\xc3\x90\x3d\x99\x1f\x4f\x5a\xdf\x42\x7b\x89\xc3\x7f\x46\x1c\xa6\xad\xe9\x22\xd4\xea\x83\xe7\x73\x33\x58\xc5\x36\x7a\xe0\x5c\xde\xf6\xc3\x73\xcf\xac\xcc\xf6\x79\x07\x05\xb5\x60\xb9\x89\x9e\x56\x82\x67\x8f\x8c\x15\x89\xf6\x25\x3c\x1e\xb4\xe8\x83\x87\x2d\xff\x47\x83\x65\xb5\xc3\x5c\x3f\xfd\xf9\x4c\x0d\xe5\xbc\xdd\xda\xe8\x29\x93\xc8\x47\xae\xba\xbf\x7c\x38\xa5\xe7\x57\x55\x13\xb5\x7f\x39\xe6\xdb\xaa\xe9\x8e\xed\xdd\xea\x59\x93\x42\xf7\xbe\x74\x85\x7b\x53\x8d\xf7\x2e\x32\x01\xea\xe3\x3d\x94\x69\xef\xec\xf4\x98\x19\x7c\x5f\x47\xfc\x32\xb1\xfe\x3f\xdb\xdc\xd5\xe5\xd6\xe2\xcc\xde\x72\xc1\x35\x1f\x7a\x86\x25\xd7\xea\x09\xc2\x97\x68\xfc\x67\x44\xe3\xcb\xa2\xeb\x65\xd1\xf5\xb2\xe8\xda\xf7\x60\x79\x59\x74\xed\x4d\xcb\xb6\xcd\x51\x75\x4b\xef\xc7\x9d\x3c\x62\x2b\x74\x81\xb2\x1c\x79\xf2\x93\x18\xb9\xa3\x49\x2b\x27\x4d\x96\x8e\x3e\x3a\x3a\xba\x6f\x83\x3b\xbf\xb3\xbb\xb9\x25\xb9\x1f\x4d\xc3\x3e\xb5\x2f\x4f\xd9\xba\xbc\xde\xda\xba\x14\x6e\xa2\x3d\xe4\xf2\x95\xde\x66\xed\x5c\x43\xfe\x14\xd6\x6a\xba\xca\x7f\xaa\xfe\x74\x01\xf1\x7a\x35\x5b\x69\x8d\x76\x4e\x55\x18\x49\x18\x4c\x77\xdb\x87\xdb\xcc\x1d\x1b\xe7\x1d\xd6\x33\x43\xdd\xf2\xe9\xcd\x49\xfa\xbf\x91\x4f\x13\xfb\xd6\xd6\x6e\x39\x5e\x97\xaa\xb8\xcc\x5f\x75\x6b\xc0\xfc\xa9\x1a\x19\xcb\x30\x38\x31\x8c\xe2\xef\x77\xe2\x44\x8c\xd9\x0d\xf2\xef\xf0\xfd\xf7\x06\xa9\xbf\xff\x7b\xb0\xef\xf3\x39\xd8\xee\x5f\x83\x7d\xbf\x8f\xc1\x56\x78\xee\x60\xc9\xe5\x37\xd9\x8f\xf8\x26\xf4\xbf\x01\x00\x00\xff\xff\xfb\x35\xd4\x75\xe8\x42\x00\x00"), }, } fs["/"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ diff --git a/cmd/alertmanager/main.go b/cmd/alertmanager/main.go index 23d43d54..d5abdaf0 100644 --- a/cmd/alertmanager/main.go +++ b/cmd/alertmanager/main.go @@ -48,7 +48,6 @@ import ( "github.com/prometheus/alertmanager/nflog" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/email" - "github.com/prometheus/alertmanager/notify/hipchat" "github.com/prometheus/alertmanager/notify/opsgenie" "github.com/prometheus/alertmanager/notify/pagerduty" "github.com/prometheus/alertmanager/notify/pushover" @@ -157,9 +156,6 @@ func buildReceiverIntegrations(nc *config.Receiver, tmpl *template.Template, log for i, c := range nc.SlackConfigs { add("slack", i, c, func(l log.Logger) (notify.Notifier, error) { return slack.New(c, tmpl, l) }) } - for i, c := range nc.HipchatConfigs { - add("hipchat", i, c, func(l log.Logger) (notify.Notifier, error) { return hipchat.New(c, tmpl, l) }) - } for i, c := range nc.VictorOpsConfigs { add("victorops", i, c, func(l log.Logger) (notify.Notifier, error) { return victorops.New(c, tmpl, l) }) } diff --git a/config/config.go b/config/config.go index 5294e4da..485e9ac6 100644 --- a/config/config.go +++ b/config/config.go @@ -308,26 +308,6 @@ func (c *Config) UnmarshalYAML(unmarshal func(interface{}) error) error { sc.APIURL = c.Global.SlackAPIURL } } - for _, hc := range rcv.HipchatConfigs { - if hc.HTTPConfig == nil { - hc.HTTPConfig = c.Global.HTTPConfig - } - if hc.APIURL == nil { - if c.Global.HipchatAPIURL == nil { - return fmt.Errorf("no global Hipchat API URL set") - } - hc.APIURL = c.Global.HipchatAPIURL - } - if !strings.HasSuffix(hc.APIURL.Path, "/") { - hc.APIURL.Path += "/" - } - if hc.AuthToken == "" { - if c.Global.HipchatAuthToken == "" { - return fmt.Errorf("no global Hipchat Auth Token set") - } - hc.AuthToken = c.Global.HipchatAuthToken - } - } for _, poc := range rcv.PushoverConfigs { if poc.HTTPConfig == nil { poc.HTTPConfig = c.Global.HTTPConfig @@ -459,7 +439,6 @@ func DefaultGlobalConfig() GlobalConfig { SMTPHello: "localhost", SMTPRequireTLS: true, PagerdutyURL: mustParseURL("https://events.pagerduty.com/v2/enqueue"), - HipchatAPIURL: mustParseURL("https://api.hipchat.com/"), OpsGenieAPIURL: mustParseURL("https://api.opsgenie.com/"), WeChatAPIURL: mustParseURL("https://qyapi.weixin.qq.com/cgi-bin/"), VictorOpsAPIURL: mustParseURL("https://alert.victorops.com/integrations/generic/20131114/alert/"), @@ -574,8 +553,6 @@ type GlobalConfig struct { SMTPRequireTLS bool `yaml:"smtp_require_tls,omitempty" json:"smtp_require_tls,omitempty"` SlackAPIURL *SecretURL `yaml:"slack_api_url,omitempty" json:"slack_api_url,omitempty"` PagerdutyURL *URL `yaml:"pagerduty_url,omitempty" json:"pagerduty_url,omitempty"` - HipchatAPIURL *URL `yaml:"hipchat_api_url,omitempty" json:"hipchat_api_url,omitempty"` - HipchatAuthToken Secret `yaml:"hipchat_auth_token,omitempty" json:"hipchat_auth_token,omitempty"` OpsGenieAPIURL *URL `yaml:"opsgenie_api_url,omitempty" json:"opsgenie_api_url,omitempty"` OpsGenieAPIKey Secret `yaml:"opsgenie_api_key,omitempty" json:"opsgenie_api_key,omitempty"` WeChatAPIURL *URL `yaml:"wechat_api_url,omitempty" json:"wechat_api_url,omitempty"` @@ -708,7 +685,6 @@ type Receiver struct { EmailConfigs []*EmailConfig `yaml:"email_configs,omitempty" json:"email_configs,omitempty"` PagerdutyConfigs []*PagerdutyConfig `yaml:"pagerduty_configs,omitempty" json:"pagerduty_configs,omitempty"` - HipchatConfigs []*HipchatConfig `yaml:"hipchat_configs,omitempty" json:"hipchat_configs,omitempty"` SlackConfigs []*SlackConfig `yaml:"slack_configs,omitempty" json:"slack_configs,omitempty"` WebhookConfigs []*WebhookConfig `yaml:"webhook_configs,omitempty" json:"webhook_configs,omitempty"` OpsGenieConfigs []*OpsGenieConfig `yaml:"opsgenie_configs,omitempty" json:"opsgenie_configs,omitempty"` diff --git a/config/config_test.go b/config/config_test.go index 4df99465..946fef93 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -326,7 +326,7 @@ func TestHideConfigSecrets(t *testing.T) { // String method must not reveal authentication credentials. s := c.String() - if strings.Count(s, "") != 15 || strings.Contains(s, "mysecret") { + if strings.Count(s, "") != 13 || strings.Contains(s, "mysecret") { t.Fatal("config's String method reveals authentication credentials.") } } @@ -548,18 +548,16 @@ func TestEmptyFieldsAndRegex(t *testing.T) { var expectedConf = Config{ Global: &GlobalConfig{ - HTTPConfig: &commoncfg.HTTPClientConfig{}, - ResolveTimeout: model.Duration(5 * time.Minute), - SMTPSmarthost: HostPort{Host: "localhost", Port: "25"}, - SMTPFrom: "alertmanager@example.org", - HipchatAuthToken: "mysecret", - HipchatAPIURL: mustParseURL("https://hipchat.foobar.org/"), - SlackAPIURL: (*SecretURL)(mustParseURL("http://slack.example.com/")), - SMTPRequireTLS: true, - PagerdutyURL: mustParseURL("https://events.pagerduty.com/v2/enqueue"), - OpsGenieAPIURL: mustParseURL("https://api.opsgenie.com/"), - WeChatAPIURL: mustParseURL("https://qyapi.weixin.qq.com/cgi-bin/"), - VictorOpsAPIURL: mustParseURL("https://alert.victorops.com/integrations/generic/20131114/alert/"), + HTTPConfig: &commoncfg.HTTPClientConfig{}, + ResolveTimeout: model.Duration(5 * time.Minute), + SMTPSmarthost: HostPort{Host: "localhost", Port: "25"}, + SMTPFrom: "alertmanager@example.org", + SlackAPIURL: (*SecretURL)(mustParseURL("http://slack.example.com/")), + SMTPRequireTLS: true, + PagerdutyURL: mustParseURL("https://events.pagerduty.com/v2/enqueue"), + OpsGenieAPIURL: mustParseURL("https://api.opsgenie.com/"), + WeChatAPIURL: mustParseURL("https://qyapi.weixin.qq.com/cgi-bin/"), + VictorOpsAPIURL: mustParseURL("https://alert.victorops.com/integrations/generic/20131114/alert/"), }, Templates: []string{ diff --git a/config/notifiers.go b/config/notifiers.go index 0330c5fb..d112e268 100644 --- a/config/notifiers.go +++ b/config/notifiers.go @@ -80,18 +80,6 @@ var ( Footer: `{{ template "slack.default.footer" . }}`, } - // DefaultHipchatConfig defines default values for Hipchat configurations. - DefaultHipchatConfig = HipchatConfig{ - NotifierConfig: NotifierConfig{ - VSendResolved: false, - }, - Color: `{{ if eq .Status "firing" }}red{{ else }}green{{ end }}`, - From: `{{ template "hipchat.default.from" . }}`, - Notify: false, - Message: `{{ template "hipchat.default.message" . }}`, - MessageFormat: `text`, - } - // DefaultOpsGenieConfig defines default values for OpsGenie configurations. DefaultOpsGenieConfig = OpsGenieConfig{ NotifierConfig: NotifierConfig{ @@ -372,35 +360,6 @@ func (c *SlackConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { return unmarshal((*plain)(c)) } -// HipchatConfig configures notifications via Hipchat. -type HipchatConfig struct { - NotifierConfig `yaml:",inline" json:",inline"` - - HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` - - APIURL *URL `yaml:"api_url,omitempty" json:"api_url,omitempty"` - AuthToken Secret `yaml:"auth_token,omitempty" json:"auth_token,omitempty"` - RoomID string `yaml:"room_id,omitempty" json:"room_id,omitempty"` - From string `yaml:"from,omitempty" json:"from,omitempty"` - Notify bool `yaml:"notify,omitempty" json:"notify,omitempty"` - Message string `yaml:"message,omitempty" json:"message,omitempty"` - MessageFormat string `yaml:"message_format,omitempty" json:"message_format,omitempty"` - Color string `yaml:"color,omitempty" json:"color,omitempty"` -} - -// UnmarshalYAML implements the yaml.Unmarshaler interface. -func (c *HipchatConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { - *c = DefaultHipchatConfig - type plain HipchatConfig - if err := unmarshal((*plain)(c)); err != nil { - return err - } - if c.RoomID == "" { - return fmt.Errorf("missing room id in Hipchat config") - } - return nil -} - // WebhookConfig configures notifications via a generic webhook. type WebhookConfig struct { NotifierConfig `yaml:",inline" json:",inline"` diff --git a/config/notifiers_test.go b/config/notifiers_test.go index 9208ba96..a7346fe0 100644 --- a/config/notifiers_test.go +++ b/config/notifiers_test.go @@ -148,23 +148,6 @@ details: } } -func TestHipchatRoomIDIsPresent(t *testing.T) { - in := ` -room_id: '' -` - var cfg HipchatConfig - err := yaml.UnmarshalStrict([]byte(in), &cfg) - - expected := "missing room id in Hipchat config" - - if err == nil { - t.Fatalf("no error returned, expected:\n%v", expected) - } - if err.Error() != expected { - t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) - } -} - func TestWebhookURLIsPresent(t *testing.T) { in := `{}` var cfg WebhookConfig diff --git a/config/testdata/conf.empty-fields.yml b/config/testdata/conf.empty-fields.yml index afba5f28..bbbbf909 100644 --- a/config/testdata/conf.empty-fields.yml +++ b/config/testdata/conf.empty-fields.yml @@ -4,8 +4,6 @@ global: smtp_auth_username: '' smtp_auth_password: '' smtp_hello: '' - hipchat_auth_token: 'mysecret' - hipchat_api_url: 'https://hipchat.foobar.org/' slack_api_url: 'https://slack.com/webhook' diff --git a/config/testdata/conf.good.yml b/config/testdata/conf.good.yml index 6bec2099..ed923f0a 100644 --- a/config/testdata/conf.good.yml +++ b/config/testdata/conf.good.yml @@ -5,10 +5,6 @@ global: smtp_auth_username: 'alertmanager' smtp_auth_password: "multiline\nmysecret" smtp_hello: "host.example.org" - # The auth token for Hipchat. - hipchat_auth_token: "mysecret" - # Alternative host for Hipchat. - hipchat_api_url: 'https://hipchat.foobar.org/' slack_api_url: "http://mysecret.example.com/" http_config: proxy_url: 'http://127.0.0.1:1025' @@ -123,12 +119,6 @@ receivers: - name: 'team-DB-pager' pagerduty_configs: - routing_key: "mysecret" -- name: 'team-X-hipchat' - hipchat_configs: - - auth_token: "mysecret" - room_id: 85 - message_format: html - notify: true - name: victorOps-receiver victorops_configs: - api_key: mysecret diff --git a/doc/examples/simple.yml b/doc/examples/simple.yml index 8f0f4972..3dfbdbe5 100644 --- a/doc/examples/simple.yml +++ b/doc/examples/simple.yml @@ -4,10 +4,6 @@ global: smtp_from: 'alertmanager@example.org' smtp_auth_username: 'alertmanager' smtp_auth_password: 'password' - # The auth token for Hipchat. - hipchat_auth_token: '1234556789' - # Alternative host for Hipchat. - hipchat_api_url: 'https://hipchat.foobar.org/' # The directory from which notification templates are read. templates: @@ -126,10 +122,3 @@ receivers: - name: 'team-DB-pager' pagerduty_configs: - service_key: - -- name: 'team-X-hipchat' - hipchat_configs: - - auth_token: - room_id: 85 - message_format: html - notify: true diff --git a/notify/hipchat/hipchat.go b/notify/hipchat/hipchat.go deleted file mode 100644 index f9014fca..00000000 --- a/notify/hipchat/hipchat.go +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2019 Prometheus Team -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hipchat - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "net/http" - - "github.com/go-kit/kit/log" - commoncfg "github.com/prometheus/common/config" - - "github.com/prometheus/alertmanager/config" - "github.com/prometheus/alertmanager/notify" - "github.com/prometheus/alertmanager/template" - "github.com/prometheus/alertmanager/types" -) - -// Notifier implements a Notifier for Hipchat notifications. -type Notifier struct { - conf *config.HipchatConfig - tmpl *template.Template - logger log.Logger - client *http.Client - retrier *notify.Retrier -} - -// New returns a new Hipchat notification handler. -func New(c *config.HipchatConfig, t *template.Template, l log.Logger) (*Notifier, error) { - client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "hipchat", false) - if err != nil { - return nil, err - } - return &Notifier{ - conf: c, - tmpl: t, - logger: l, - client: client, - // Response codes 429 (rate limiting) and 5xx can potentially recover. - // 2xx response codes indicate successful requests. - // https://developer.atlassian.com/hipchat/guide/hipchat-rest-api/api-response-codes - retrier: ¬ify.Retrier{RetryCodes: []int{http.StatusTooManyRequests}}, - }, nil -} - -type hipchatReq struct { - From string `json:"from"` - Notify bool `json:"notify"` - Message string `json:"message"` - MessageFormat string `json:"message_format"` - Color string `json:"color"` -} - -// Notify implements the Notifier interface. -func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { - var err error - var msg string - var ( - data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger) - tmplText = notify.TmplText(n.tmpl, data, &err) - tmplHTML = notify.TmplHTML(n.tmpl, data, &err) - roomid = tmplText(n.conf.RoomID) - apiURL = n.conf.APIURL.Copy() - ) - apiURL.Path += fmt.Sprintf("v2/room/%s/notification", roomid) - q := apiURL.Query() - q.Set("auth_token", string(n.conf.AuthToken)) - apiURL.RawQuery = q.Encode() - - if n.conf.MessageFormat == "html" { - msg = tmplHTML(n.conf.Message) - } else { - msg = tmplText(n.conf.Message) - } - - req := &hipchatReq{ - From: tmplText(n.conf.From), - Notify: n.conf.Notify, - Message: msg, - MessageFormat: n.conf.MessageFormat, - Color: tmplText(n.conf.Color), - } - if err != nil { - return false, err - } - - var buf bytes.Buffer - if err := json.NewEncoder(&buf).Encode(req); err != nil { - return false, err - } - - resp, err := notify.PostJSON(ctx, n.client, apiURL.String(), &buf) - if err != nil { - return true, notify.RedactURL(err) - } - defer notify.Drain(resp) - - return n.retrier.Check(resp.StatusCode, nil) -} diff --git a/notify/hipchat/hipchat_test.go b/notify/hipchat/hipchat_test.go deleted file mode 100644 index 7c35430e..00000000 --- a/notify/hipchat/hipchat_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2019 Prometheus Team -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hipchat - -import ( - "fmt" - "net/http" - "testing" - - "github.com/go-kit/kit/log" - commoncfg "github.com/prometheus/common/config" - "github.com/stretchr/testify/require" - - "github.com/prometheus/alertmanager/config" - "github.com/prometheus/alertmanager/notify/test" -) - -func TestHipchatRetry(t *testing.T) { - notifier, err := New( - &config.HipchatConfig{ - HTTPConfig: &commoncfg.HTTPClientConfig{}, - }, - test.CreateTmpl(t), - log.NewNopLogger(), - ) - require.NoError(t, err) - retryCodes := append(test.DefaultRetryCodes(), http.StatusTooManyRequests) - for statusCode, expected := range test.RetryTests(retryCodes) { - actual, _ := notifier.retrier.Check(statusCode, nil) - require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) - } -} - -func TestHipchatRedactedURL(t *testing.T) { - ctx, u, fn := test.GetContextWithCancelingURL() - defer fn() - - token := "secret_token" - notifier, err := New( - &config.HipchatConfig{ - APIURL: &config.URL{URL: u}, - AuthToken: config.Secret(token), - HTTPConfig: &commoncfg.HTTPClientConfig{}, - }, - test.CreateTmpl(t), - log.NewNopLogger(), - ) - require.NoError(t, err) - - test.AssertNotifyLeaksNoSecret(t, ctx, notifier, token) -} diff --git a/notify/notify.go b/notify/notify.go index fae7d73e..a61aa25e 100644 --- a/notify/notify.go +++ b/notify/notify.go @@ -239,7 +239,6 @@ func newMetrics(r prometheus.Registerer) *metrics { } for _, integration := range []string{ "email", - "hipchat", "pagerduty", "wechat", "pushover", diff --git a/template/default.tmpl b/template/default.tmpl index 97719e43..b26eebbf 100644 --- a/template/default.tmpl +++ b/template/default.tmpl @@ -24,10 +24,6 @@ {{ define "slack.default.footer" }}{{ end }} -{{ define "hipchat.default.from" }}{{ template "__alertmanager" . }}{{ end }} -{{ define "hipchat.default.message" }}{{ template "__subject" . }}{{ end }} - - {{ define "pagerduty.default.description" }}{{ template "__subject" . }}{{ end }} {{ define "pagerduty.default.client" }}{{ template "__alertmanager" . }}{{ end }} {{ define "pagerduty.default.clientURL" }}{{ template "__alertmanagerURL" . }}{{ end }}