|
7 | 7 | "net/http" |
8 | 8 | "regexp" |
9 | 9 | "strings" |
| 10 | + "time" |
10 | 11 |
|
11 | 12 | "github.com/lauripiispanen/most-active-github-users-counter/net" |
12 | 13 | ) |
@@ -70,6 +71,9 @@ func (client HTTPGithubClient) SearchUsers(query UserSearchQuery) (GithubSearchR |
70 | 71 | perPage := 5 |
71 | 72 | totalUsersCount := 0 |
72 | 73 |
|
| 74 | + retryCount := 0 |
| 75 | + maxRetryCount := 10 |
| 76 | + |
73 | 77 | Pages: |
74 | 78 | for totalCount < query.MaxUsers { |
75 | 79 | previousCursor := "" |
@@ -119,16 +123,37 @@ Pages: |
119 | 123 |
|
120 | 124 | body, err := client.Request("https://api.github.com/graphql", graphQlString) |
121 | 125 | if err != nil { |
122 | | - log.Fatal(err) |
| 126 | + retryCount++ |
| 127 | + if retryCount < maxRetryCount { |
| 128 | + log.Println("error making graphql request... retrying") |
| 129 | + time.Sleep(10 * time.Second) |
| 130 | + continue Pages |
| 131 | + } else { |
| 132 | + log.Fatalln("Too many errors received. Quitting.") |
| 133 | + } |
123 | 134 | } |
124 | 135 |
|
125 | 136 | var response interface{} |
126 | 137 | if err := json.Unmarshal(body, &response); err != nil { |
127 | | - log.Fatal(err) |
| 138 | + retryCount++ |
| 139 | + if retryCount < maxRetryCount { |
| 140 | + log.Println("error unmarshalling JSON response... retrying") |
| 141 | + time.Sleep(10 * time.Second) |
| 142 | + continue Pages |
| 143 | + } else { |
| 144 | + log.Fatalln("Too many errors received. Quitting.") |
| 145 | + } |
128 | 146 | } |
129 | 147 | rootNode := response.(map[string]interface{}) |
130 | 148 | if val, ok := rootNode["errors"]; ok { |
131 | | - log.Fatalf("%s", val) |
| 149 | + retryCount++ |
| 150 | + if retryCount < maxRetryCount { |
| 151 | + log.Printf("Received error response (retrying): %+v", val) |
| 152 | + time.Sleep(10 * time.Second) |
| 153 | + continue Pages |
| 154 | + } else { |
| 155 | + log.Fatalln("Too many errors received. Quitting.") |
| 156 | + } |
132 | 157 | } |
133 | 158 | dataNode := rootNode["data"].(map[string]interface{}) |
134 | 159 | searchNode := dataNode["search"].(map[string]interface{}) |
|
0 commit comments