github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/requester/publicapi/endpoints_results.go (about)

     1  package publicapi
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  
     7  	"github.com/filecoin-project/bacalhau/pkg/jobstore"
     8  	"github.com/filecoin-project/bacalhau/pkg/model"
     9  	"github.com/filecoin-project/bacalhau/pkg/publicapi/handlerwrapper"
    10  	"github.com/filecoin-project/bacalhau/pkg/system"
    11  	oteltrace "go.opentelemetry.io/otel/trace"
    12  )
    13  
    14  type resultsRequest struct {
    15  	ClientID string `json:"client_id" example:"ac13188e93c97a9c2e7cf8e86c7313156a73436036f30da1ececc2ce79f9ea51"`
    16  	JobID    string `json:"job_id" example:"9304c616-291f-41ad-b862-54e133c0149e"`
    17  }
    18  
    19  type resultsResponse struct {
    20  	Results []model.PublishedResult `json:"results"`
    21  }
    22  
    23  // results godoc
    24  //
    25  //	@ID						pkg/requester/publicapi/results
    26  //	@Summary				Returns the results of the job-id specified in the body payload.
    27  //	@Description.markdown	endpoints_results
    28  //	@Tags					Job
    29  //	@Accept					json
    30  //	@Produce				json
    31  //	@Param					stateRequest	body		stateRequest	true	" "
    32  //	@Success				200				{object}	resultsResponse
    33  //	@Failure				400				{object}	string
    34  //	@Failure				500				{object}	string
    35  //	@Router					/requester/results [post]
    36  func (s *RequesterAPIServer) results(res http.ResponseWriter, req *http.Request) {
    37  	ctx := req.Context()
    38  	var stateReq stateRequest
    39  	if err := json.NewDecoder(req.Body).Decode(&stateReq); err != nil {
    40  		http.Error(res, err.Error(), http.StatusBadRequest)
    41  		return
    42  	}
    43  	res.Header().Set(handlerwrapper.HTTPHeaderClientID, stateReq.ClientID)
    44  	res.Header().Set(handlerwrapper.HTTPHeaderJobID, stateReq.JobID)
    45  
    46  	ctx = system.AddJobIDToBaggage(ctx, stateReq.JobID)
    47  	system.AddJobIDFromBaggageToSpan(ctx, oteltrace.SpanFromContext(ctx))
    48  
    49  	stateResolver := jobstore.GetStateResolver(s.jobStore)
    50  	results, err := stateResolver.GetResults(ctx, stateReq.JobID)
    51  	if err != nil {
    52  		http.Error(res, err.Error(), http.StatusInternalServerError)
    53  		return
    54  	}
    55  
    56  	res.WriteHeader(http.StatusOK)
    57  	err = json.NewEncoder(res).Encode(resultsResponse{
    58  		Results: results,
    59  	})
    60  	if err != nil {
    61  		http.Error(res, err.Error(), http.StatusInternalServerError)
    62  		return
    63  	}
    64  }