X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flp_ws.c;h=f52f935f16b82dbcd689dc4e6878d9fdc213f09a;hb=2baa3ff01cb4db10a1a44fd0234ad3cfbe2a0e1b;hp=4549d92c8ab4b2855cae533459e9b5062ca08198;hpb=fa460465ab78c48ace6d8563e6d35917b30fab09;p=ppastats.git diff --git a/src/lp_ws.c b/src/lp_ws.c index 4549d92..f52f935 100644 --- a/src/lp_ws.c +++ b/src/lp_ws.c @@ -34,12 +34,13 @@ #include "lp_json.h" #include "ppastats.h" -static const char *QUERY_GET_PUBLISHED_BINARIES = "?ws.op=getPublishedBinaries"; +static const char * +QUERY_GET_PUBLISHED_BINARIES = "?ws.op=getPublishedBinaries&ws.size=300"; static const char *QUERY_GET_DOWNLOAD_COUNT = "?ws.op=getDownloadCount"; static const char * QUERY_GET_DAILY_DOWNLOAD_TOTALS = "?ws.op=getDailyDownloadTotals"; -static const int DEFAULT_FETCH_RETRIES = 3; +static const int DEFAULT_FETCH_RETRIES = 10; static CURL *curl; @@ -62,15 +63,8 @@ static size_t cbk_curl(void *buffer, size_t size, size_t nmemb, void *userp) return realsize; } -static char *fetch_url(const char *url) +static void init() { - struct ucontent *content = malloc(sizeof(struct ucontent)); - char *result; - long code; - int retries; - - log_debug(_("fetch_url(): %s"), url); - if (!curl) { log_debug(_("initializing CURL")); curl_global_init(CURL_GLOBAL_ALL); @@ -79,6 +73,19 @@ static char *fetch_url(const char *url) if (!curl) exit(EXIT_FAILURE); +} + +static char *fetch_url(const char *url) +{ + struct ucontent *content = malloc(sizeof(struct ucontent)); + char *result; + long code; + int retries; + unsigned int s; + + log_debug(_("fetch_url(): %s"), url); + + init(); result = NULL; @@ -106,21 +113,25 @@ static char *fetch_url(const char *url) case 502: case 503: case 504: - if (retries) { - log_err(_("Fetch failed with code %ld " - "for URL %s"), - code, - url); + log_err(_("Fetch failed with code %ld for URL %s"), + code, + url); - log_debug(_("Wait 5s before retry")); - sleep(5); + if (retries) { + s = 2 * (DEFAULT_FETCH_RETRIES - retries) + 2; + log_debug(_("Wait %ds before retry"), s); + sleep(s); free(content->data); retries--; goto retrieve; } + + break; default: - log_err(_("Fetch failed: %ld"), code); + log_err(_("Fetch failed with code %ld for URL %s"), + code, + url); } }