diff options
Diffstat (limited to 'api/handlers.go')
| -rw-r--r-- | api/handlers.go | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/api/handlers.go b/api/handlers.go index c9c3031..04fcc23 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -227,16 +227,30 @@ func (h *Handler) GetArticle(w http.ResponseWriter, r *http.Request) { return } - base := "https://api.enterprise.wikimedia.com/v2/structured-contents/" + url.QueryEscape(article) - req, err := http.NewRequestWithContext(ctx, "GET", base+"?limit=1&filters[project]=en.wikipedia.org", nil) + baseURL := "https://api.enterprise.wikimedia.com/v2/structured-contents/" + url.QueryEscape(article) + queryURL := baseURL + "?limit=1&filters[project]=en.wikipedia.org" + + req, err := http.NewRequestWithContext(ctx, "GET", queryURL, nil) if err != nil { serverError(w, "could not build request") return } req.Header.Set("Authorization", "Bearer "+acct.AccessToken) + start := time.Now() resp, err := http.DefaultClient.Do(req) + elapsed := int(time.Since(start).Milliseconds()) + if err != nil { + log.Printf("article request failed: user=%s article=%s error=%v (%dms)", username, article, err, elapsed) + h.db.LogApiCall(ctx, &db.ApiLogEntry{ + Username: username, + ArticleName: article, + StatusCode: 0, + ResponseMs: elapsed, + Error: err.Error(), + RequestURL: queryURL, + }) serverError(w, "wikimedia api error") return } @@ -244,6 +258,16 @@ func (h *Handler) GetArticle(w http.ResponseWriter, r *http.Request) { if resp.StatusCode < 200 || resp.StatusCode >= 300 { b, _ := io.ReadAll(resp.Body) + log.Printf("article request failed: user=%s article=%s status=%d body=%s (%dms)", + username, article, resp.StatusCode, string(b), elapsed) + h.db.LogApiCall(ctx, &db.ApiLogEntry{ + Username: username, + ArticleName: article, + StatusCode: resp.StatusCode, + ResponseMs: elapsed, + Error: string(b), + RequestURL: queryURL, + }) http.Error(w, string(b), resp.StatusCode) return } |
