Add REST API endpoint to get task by ID

This commit is contained in:
Ken Hibino
2021-07-17 06:16:15 -07:00
parent f9d9166248
commit 8ff8ec57bc
3 changed files with 88 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ package main
import (
"encoding/json"
"errors"
"log"
"net/http"
"strconv"
@@ -623,3 +624,33 @@ func getPageOptions(r *http.Request) (pageSize, pageNum int) {
}
return pageSize, pageNum
}
func newGetTaskHandlerFunc(inspector *asynq.Inspector) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
qname, taskid := vars["qname"], vars["task_id"]
if qname == "" {
http.Error(w, "queue name cannot be empty", http.StatusBadRequest)
return
}
if taskid == "" {
http.Error(w, "task_id cannot be empty", http.StatusBadRequest)
return
}
info, err := inspector.GetTaskInfo(qname, taskid)
switch {
case errors.Is(err, asynq.ErrQueueNotFound), errors.Is(err, asynq.ErrTaskNotFound):
http.Error(w, err.Error(), http.StatusNotFound)
return
case err != nil:
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if err := json.NewEncoder(w).Encode(toTaskInfo(info)); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
}