changeset 49:8409af16d6e5

Sleep for 20 seconds when we receive a 429 response
author Mike Pavone <pavone@retrodev.com>
date Sun, 11 Aug 2013 04:35:02 -0700
parents 855c05c9cae1
children f4399a22a704
files src/requests.tp src/solver.tp
diffstat 2 files changed, 51 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/requests.tp	Sun Aug 11 04:03:51 2013 -0700
+++ b/src/requests.tp	Sun Aug 11 04:35:02 2013 -0700
@@ -109,6 +109,7 @@
 				_message <- decoded get: "message" withDefault: ""
 				#{
 					status <- { "error" }
+					httpCode <- { _code }
 					message <- { _message }
 					string <- {
 						"Error: " . _message
@@ -119,8 +120,17 @@
 				}
 			}
 		} else: {
-			#{print <- print: "HTTP response gave error! code was: " . _code . "\n"}
-
+			#{
+				status <- { "error" }
+				httpCode <- { _code }
+				message <- { "HTTP response gave error! code was: " . _code . "\n" }
+				string <- {
+					"Error: " . message
+				}
+				print <- {
+					print: string . "\n"
+				}
+			}
 		}
 	}
 
@@ -164,6 +174,7 @@
 				_message <- decoded get: "message" withDefault: ""
 				#{
 					status <- { "error" }
+					httpCode <- { _code }
 					message <- { _message }
 					string <- {
 						"Error: " . _message
@@ -174,7 +185,17 @@
 				}
 			}} // end if
 		} else: {
-			#{print <- print: "HTTP response gave error! code was: " . _code . "\n"}
+			#{
+				status <- { "error" }
+				httpCode <- { _code }
+				message <- { "HTTP response gave error! code was: " . _code . "\n" }
+				string <- {
+					"Error: " . message
+				}
+				print <- {
+					print: string . "\n"
+				}
+			}
 		}
 	}
 
--- a/src/solver.tp	Sun Aug 11 04:03:51 2013 -0700
+++ b/src/solver.tp	Sun Aug 11 04:35:02 2013 -0700
@@ -138,11 +138,26 @@
 		}
 
 		solve:withAuth:andInfo:andProg <- :progId :authKey :info :prog {
-			start <- os time
-			resp <- (requests evalId: progId (info allInputs)) sendWithKey: authKey
-			end <- os time
-			if: (end - start) < 4 {
-				os sleep: (4 - (end - start))
+			statusCode <- 429
+			resp <- false
+			start <- 0
+			end <- 0
+			while: { statusCode = 429} do: {
+				start <- os time
+				resp <- (requests evalId: progId (info allInputs)) sendWithKey: authKey
+				end <- os time
+				if: (resp status) = "ok" {
+					statusCode <- 200
+					if: (end - start) < 4 {
+						os sleep: (4 - (end - start))
+					}
+				} else: {
+					statusCode <- resp httpCode
+					if: statusCode = 429 {
+						print: "API is pissed, waiting 20 seconds...\n"
+						os sleep: 20
+					}
+				}
 			}
 			if: (resp status) = "ok" {
 				print: "Start: " . (string: start) . ", End: " . (string: start) . "Duration: " . (string: end - start) . "\n"
@@ -180,8 +195,13 @@
 								print: "None of our programs actually matched 0x" . (hex: failOutput) ." with input 0x" . (hex: failInput) ." :(\n"
 							}
 						} else: {
-							print: "Got message: " . (gresp message) . ", moving on\n"
-							cur <- cur + 1
+							if: (gresp httpCode) = 429 {
+								print: "API is pissed, waiting 20 seconds...\n"
+								os sleep: 20
+							} else: {
+								print: "Got message: " . (gresp message) . ", moving on\n"
+								cur <- cur + 1
+							}
 						}
 					}
 				}