File tree Expand file tree Collapse file tree 5 files changed +56
-40
lines changed
Expand file tree Collapse file tree 5 files changed +56
-40
lines changed Original file line number Diff line number Diff line change 99 "sync"
1010
1111 jira "github.com/andygrunwald/go-jira"
12+ "github.com/shiftstack/bugwatcher/pkg/jiraclient"
1213 "github.com/shiftstack/bugwatcher/pkg/query"
1314)
1415
@@ -28,16 +29,9 @@ func main() {
2829 log .Fatalf ("error unmarshaling TEAM_MEMBERS_DICT: %v" , err )
2930 }
3031
31- var jiraClient * jira.Client
32- {
33- var err error
34- jiraClient , err = jira .NewClient (
35- (& jira.BearerAuthTransport {Token : JIRA_TOKEN }).Client (),
36- query .JiraBaseURL ,
37- )
38- if err != nil {
39- log .Fatalf ("FATAL: error building a Jira client: %v" , err )
40- }
32+ jiraClient , err := jiraclient .NewWithToken (query .JiraBaseURL , JIRA_TOKEN )
33+ if err != nil {
34+ log .Fatalf ("error building a Jira client: %v" , err )
4135 }
4236
4337 triageChecks := [... ]triageCheck {
Original file line number Diff line number Diff line change 88 "sync"
99
1010 jira "github.com/andygrunwald/go-jira"
11+ "github.com/shiftstack/bugwatcher/pkg/jiraclient"
1112 "github.com/shiftstack/bugwatcher/pkg/query"
1213)
1314
@@ -18,16 +19,9 @@ var JIRA_TOKEN = os.Getenv("JIRA_TOKEN")
1819func main () {
1920 ctx := context .Background ()
2021
21- var jiraClient * jira.Client
22- {
23- var err error
24- jiraClient , err = jira .NewClient (
25- (& jira.BearerAuthTransport {Token : JIRA_TOKEN }).Client (),
26- query .JiraBaseURL ,
27- )
28- if err != nil {
29- log .Fatalf ("FATAL: error building a Jira client: %v" , err )
30- }
22+ jiraClient , err := jiraclient .NewWithToken (query .JiraBaseURL , JIRA_TOKEN )
23+ if err != nil {
24+ log .Fatalf ("error building a Jira client: %v" , err )
3125 }
3226
3327 triageChecks := [... ]triageCheck {
Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ import (
1010 "time"
1111
1212 jira "github.com/andygrunwald/go-jira"
13+ "github.com/shiftstack/bugwatcher/pkg/jiraclient"
1314 "github.com/shiftstack/bugwatcher/pkg/query"
1415)
1516
@@ -35,16 +36,9 @@ func main() {
3536 log .Fatalf ("error unmarshaling TEAM_MEMBERS_DICT: %v" , err )
3637 }
3738
38- var jiraClient * jira.Client
39- {
40- var err error
41- jiraClient , err = jira .NewClient (
42- (& jira.BearerAuthTransport {Token : JIRA_TOKEN }).Client (),
43- query .JiraBaseURL ,
44- )
45- if err != nil {
46- log .Fatalf ("error building a Jira client: %v" , err )
47- }
39+ jiraClient , err := jiraclient .NewWithToken (query .JiraBaseURL , JIRA_TOKEN )
40+ if err != nil {
41+ log .Fatalf ("error building a Jira client: %v" , err )
4842 }
4943
5044 var wg sync.WaitGroup
Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ import (
1010
1111 jira "github.com/andygrunwald/go-jira"
1212 "github.com/shiftstack/bugwatcher/cmd/triage/tasker"
13+ "github.com/shiftstack/bugwatcher/pkg/jiraclient"
1314 "github.com/shiftstack/bugwatcher/pkg/query"
1415)
1516
@@ -29,16 +30,9 @@ func main() {
2930 log .Fatalf ("error unmarshaling TEAM_MEMBERS_DICT: %v" , err )
3031 }
3132
32- var jiraClient * jira.Client
33- {
34- var err error
35- jiraClient , err = jira .NewClient (
36- (& jira.BearerAuthTransport {Token : JIRA_TOKEN }).Client (),
37- query .JiraBaseURL ,
38- )
39- if err != nil {
40- log .Fatalf ("error building a Jira client: %v" , err )
41- }
33+ jiraClient , err := jiraclient .NewWithToken (query .JiraBaseURL , JIRA_TOKEN )
34+ if err != nil {
35+ log .Fatalf ("error building a Jira client: %v" , err )
4236 }
4337
4438 var (
Original file line number Diff line number Diff line change 1+ package jiraclient
2+
3+ import (
4+ "log"
5+ "net/http"
6+ "strconv"
7+ "time"
8+
9+ jira "github.com/andygrunwald/go-jira"
10+ )
11+
12+ type throttlingHttpClient struct {
13+ * http.Client
14+ }
15+
16+ func (c * throttlingHttpClient ) Do (req * http.Request ) (* http.Response , error ) {
17+ res , err := c .Client .Do (req )
18+
19+ if res .StatusCode == http .StatusTooManyRequests {
20+ wait := time .Second * 1
21+ if retryAfter := res .Header .Get ("retry-after" ); retryAfter != "" {
22+ if n , err := strconv .Atoi (retryAfter ); err != nil {
23+ wait = time .Duration (n ) * time .Second
24+ }
25+ }
26+ log .Printf ("Throttled by Jira: waiting %s" , wait )
27+ time .Sleep (wait )
28+ return c .Do (req )
29+ }
30+
31+ return res , err
32+ }
33+
34+ // NewWithToken returns a Jira client that retries when hitting 429
35+ func NewWithToken (baseURL , jiraToken string ) (jiraClient * jira.Client , err error ) {
36+ return jira .NewClient (
37+ & throttlingHttpClient {(& jira.BearerAuthTransport {Token : jiraToken }).Client ()},
38+ baseURL ,
39+ )
40+ }
You can’t perform that action at this time.
0 commit comments