github.com/wtfutil/wtf@v0.43.0/modules/airbrake/client.go (about) 1 package airbrake 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/wtfutil/wtf/utils" 8 ) 9 10 func project(projectID int, authToken string) (*Project, error) { 11 url := fmt.Sprintf( 12 "https://api.airbrake.io/api/v4/projects/%d?key=%s", 13 projectID, authToken) 14 req, err := http.NewRequest("GET", url, http.NoBody) 15 if err != nil { 16 return nil, err 17 } 18 19 req.Header.Add("Accept", "application/json") 20 req.Header.Add("Content-Type", "application/json") 21 22 httpClient := &http.Client{} 23 resp, err := httpClient.Do(req) 24 if err != nil { 25 return nil, err 26 } 27 28 p := &ProjectJSON{} 29 err = utils.ParseJSON(p, resp.Body) 30 if err != nil { 31 return nil, err 32 } 33 34 return &p.Project, nil 35 } 36 37 func groups(projectID int, authToken string) ([]Group, error) { 38 url := fmt.Sprintf( 39 "https://api.airbrake.io/api/v4/projects/%d/groups?key=%s&limit=10&order=last_notice&resolved=false", 40 projectID, authToken) 41 req, err := http.NewRequest("GET", url, http.NoBody) 42 if err != nil { 43 return nil, err 44 } 45 46 req.Header.Add("Accept", "application/json") 47 req.Header.Add("Content-Type", "application/json") 48 49 httpClient := &http.Client{} 50 resp, err := httpClient.Do(req) 51 if err != nil { 52 return nil, err 53 } 54 defer func() { _ = resp.Body.Close() }() 55 56 j := &GroupJSON{} 57 err = utils.ParseJSON(j, resp.Body) 58 if err != nil { 59 return nil, err 60 } 61 62 return j.Groups, nil 63 } 64 65 func resolveGroup(projectID int64, groupID, authToken string) error { 66 url := fmt.Sprintf( 67 "https://airbrake.io/api/v4/projects/%d/groups/%s/resolved?key=%s", 68 projectID, groupID, authToken) 69 req, err := http.NewRequest("PUT", url, http.NoBody) 70 if err != nil { 71 return err 72 } 73 74 req.Header.Add("Accept", "application/json") 75 req.Header.Add("Content-Type", "application/json") 76 77 httpClient := &http.Client{} 78 resp, err := httpClient.Do(req) 79 if err != nil { 80 return err 81 } 82 defer func() { _ = resp.Body.Close() }() 83 84 return nil 85 } 86 87 func muteGroup(projectID int64, groupID, authToken string) error { 88 url := fmt.Sprintf( 89 "https://airbrake.io/api/v4/projects/%d/groups/%s/muted?key=%s", 90 projectID, groupID, authToken) 91 req, err := http.NewRequest("PUT", url, http.NoBody) 92 if err != nil { 93 return err 94 } 95 96 req.Header.Add("Accept", "application/json") 97 req.Header.Add("Content-Type", "application/json") 98 99 httpClient := &http.Client{} 100 resp, err := httpClient.Do(req) 101 if err != nil { 102 return err 103 } 104 defer func() { _ = resp.Body.Close() }() 105 106 return nil 107 } 108 109 func unmuteGroup(projectID int64, groupID, authToken string) error { 110 url := fmt.Sprintf( 111 "https://airbrake.io/api/v4/projects/%d/groups/%s/unmuted?key=%s", 112 projectID, groupID, authToken) 113 req, err := http.NewRequest("PUT", url, http.NoBody) 114 if err != nil { 115 return err 116 } 117 118 req.Header.Add("Accept", "application/json") 119 req.Header.Add("Content-Type", "application/json") 120 121 httpClient := &http.Client{} 122 resp, err := httpClient.Do(req) 123 if err != nil { 124 return err 125 } 126 defer func() { _ = resp.Body.Close() }() 127 128 return nil 129 }