github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/buildserver/resources.go (about)

     1  package buildserver
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  
     7  	"code.cloudfoundry.org/lager"
     8  	"github.com/pf-qiu/concourse/v6/atc"
     9  	"github.com/pf-qiu/concourse/v6/atc/api/present"
    10  	"github.com/pf-qiu/concourse/v6/atc/db"
    11  )
    12  
    13  func (s *Server) BuildResources(build db.Build) http.Handler {
    14  	logger := s.logger.Session("build-resources")
    15  
    16  	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    17  		inputs, outputs, err := build.Resources()
    18  		if err != nil {
    19  			logger.Error("cannot-find-build", err, lager.Data{"buildID": r.FormValue(":build_id")})
    20  			w.WriteHeader(http.StatusInternalServerError)
    21  			return
    22  		}
    23  
    24  		atcInputs := make([]atc.PublicBuildInput, 0, len(inputs))
    25  		for _, input := range inputs {
    26  			atcInputs = append(atcInputs, present.PublicBuildInput(input, build.PipelineID()))
    27  		}
    28  
    29  		atcOutputs := make([]atc.PublicBuildOutput, 0, len(outputs))
    30  		for _, output := range outputs {
    31  			atcOutputs = append(atcOutputs, present.PublicBuildOutput(output))
    32  		}
    33  
    34  		output := atc.BuildInputsOutputs{
    35  			Inputs:  atcInputs,
    36  			Outputs: atcOutputs,
    37  		}
    38  
    39  		w.Header().Set("Content-Type", "application/json")
    40  		w.WriteHeader(http.StatusOK)
    41  		err = json.NewEncoder(w).Encode(output)
    42  		if err != nil {
    43  			logger.Error("failed-to-encode-build-resources", err)
    44  			w.WriteHeader(http.StatusInternalServerError)
    45  		}
    46  	})
    47  }