Skip to content

Commit eac0bf9

Browse files
jeanbzagopherbot
authored andcommitted
internal/worker: Add since form param to /poll.
If the worker's latest timestamp is t, it's hard to get it to back and re-poll the index for older work. This CL adds a very simple utility that lets you do so. Change-Id: If12d385e245b6e64880dd7aa704b749603c7fecc Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/685455 kokoro-CI: kokoro <noreply+kokoro@google.com> Auto-Submit: Jonathan Amsterdam <jba@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Jonathan Amsterdam <jba@google.com>
1 parent 395738c commit eac0bf9

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

internal/worker/server.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,14 @@ func (s *Server) handlePollIndex(w http.ResponseWriter, r *http.Request) (err er
432432
defer derrors.Wrap(&err, "handlePollIndex(%q)", r.URL.Path)
433433
ctx := r.Context()
434434
limit := parseIntParam(r, "limit", 10)
435-
since, err := s.db.LatestIndexTimestamp(ctx)
436-
if err != nil {
437-
return err
435+
since, ok := parseTimeParam(r, "since")
436+
if !ok {
437+
since, err = s.db.LatestIndexTimestamp(ctx)
438+
if err != nil {
439+
return err
440+
}
438441
}
442+
log.Infof(ctx, "fetching %d versions since %v from the index", limit, since)
439443
modules, err := s.indexClient.GetVersions(ctx, since, limit)
440444
if err != nil {
441445
return err
@@ -885,12 +889,28 @@ func parseIntParam(r *http.Request, name string, defaultValue int) int {
885889
}
886890
val, err := strconv.Atoi(param)
887891
if err != nil {
888-
log.Errorf(r.Context(), "parsing query parameter %q: %v", name, err)
892+
log.Errorf(r.Context(), "parsing query parameter %q as an int: %v", name, err)
889893
return defaultValue
890894
}
891895
return val
892896
}
893897

898+
// parseTimeParam parses the named query parameter as a Time, using RFC RFC3339
899+
// layout. If the parameter is missing or there is a parse error, false is
900+
// returned.
901+
func parseTimeParam(r *http.Request, name string) (time.Time, bool) {
902+
param := r.FormValue(name)
903+
if param == "" {
904+
return time.Time{}, false
905+
}
906+
t, err := time.Parse(time.RFC3339, param)
907+
if err != nil {
908+
log.Errorf(r.Context(), "parsing query parameter %q as a time.Time: %v", name, err)
909+
return time.Time{}, false
910+
}
911+
return t, true
912+
}
913+
894914
type serverError struct {
895915
status int // HTTP status code
896916
err error // wrapped error

static/worker/index.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
<button title="Poll the module index for up to 2000 new versions."
4343
onclick="submitForm('pollForm', false); return false">Poll Module Index</button>
4444
<input type="number" name="limit" value="10"></input>
45+
<input type="text" name="since" value="" placeholder="2006-01-02T15:04:05Z07:00">
4546
<output name="result"></output>
4647
</form>
4748
<form action="/enqueue" method="post" name="enqueueForm">

0 commit comments

Comments
 (0)