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  }