github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/requester/publicapi/endpoints_events.go (about) 1 package publicapi 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "github.com/filecoin-project/bacalhau/pkg/model" 8 "github.com/filecoin-project/bacalhau/pkg/publicapi/handlerwrapper" 9 ) 10 11 type eventsRequest struct { 12 ClientID string `json:"client_id" example:"ac13188e93c97a9c2e7cf8e86c7313156a73436036f30da1ececc2ce79f9ea51"` 13 JobID string `json:"job_id" example:"9304c616-291f-41ad-b862-54e133c0149e"` 14 } 15 16 type eventsResponse struct { 17 Events []model.JobHistory `json:"events"` 18 } 19 20 // events godoc 21 // 22 // @ID pkg/requester/publicapi/events 23 // @Summary Returns the events related to the job-id passed in the body payload. Useful for troubleshooting. 24 // @Description.markdown endpoints_events 25 // @Tags Job 26 // @Accept json 27 // @Produce json 28 // @Param eventsRequest body eventsRequest true "Request must specify a `client_id`. To retrieve your `client_id`, you can do the following: (1) submit a dummy job to Bacalhau (or use one you created before), (2) run `bacalhau describe <job-id>` and fetch the `ClientID` field." 29 // @Success 200 {object} eventsResponse 30 // @Failure 400 {object} string 31 // @Failure 500 {object} string 32 // @Router /requester/events [post] 33 // 34 //nolint:lll 35 //nolint:dupl 36 func (s *RequesterAPIServer) events(res http.ResponseWriter, req *http.Request) { 37 var eventsReq eventsRequest 38 if err := json.NewDecoder(req.Body).Decode(&eventsReq); err != nil { 39 http.Error(res, err.Error(), http.StatusBadRequest) 40 return 41 } 42 res.Header().Set(handlerwrapper.HTTPHeaderClientID, eventsReq.ClientID) 43 res.Header().Set(handlerwrapper.HTTPHeaderJobID, eventsReq.JobID) 44 45 ctx := req.Context() 46 events, err := s.jobStore.GetJobHistory(ctx, eventsReq.JobID) 47 if err != nil { 48 http.Error(res, err.Error(), http.StatusInternalServerError) 49 return 50 } 51 res.WriteHeader(http.StatusOK) 52 err = json.NewEncoder(res).Encode(eventsResponse{ 53 Events: events, 54 }) 55 if err != nil { 56 http.Error(res, err.Error(), http.StatusInternalServerError) 57 return 58 } 59 }