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

     1  package workerserver
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  
     7  	"github.com/pf-qiu/concourse/v6/atc"
     8  	"github.com/pf-qiu/concourse/v6/atc/api/accessor"
     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) ListWorkers(w http.ResponseWriter, r *http.Request) {
    14  	logger := s.logger.Session("list-workers")
    15  
    16  	var (
    17  		workers []db.Worker
    18  		err     error
    19  	)
    20  
    21  	acc := accessor.GetAccessor(r)
    22  
    23  	if acc.IsAdmin() {
    24  		workers, err = s.dbWorkerFactory.Workers()
    25  	} else {
    26  		workers, err = s.dbWorkerFactory.VisibleWorkers(acc.TeamNames())
    27  	}
    28  
    29  	if err != nil {
    30  		logger.Error("failed-to-get-workers", err)
    31  		w.WriteHeader(http.StatusInternalServerError)
    32  		return
    33  	}
    34  
    35  	atcWorkers := make([]atc.Worker, len(workers))
    36  	for i, savedWorker := range workers {
    37  		atcWorkers[i] = present.Worker(savedWorker)
    38  	}
    39  
    40  	w.Header().Set("Content-Type", "application/json")
    41  	err = json.NewEncoder(w).Encode(atcWorkers)
    42  	if err != nil {
    43  		logger.Error("failed-to-encode-workers", err)
    44  		w.WriteHeader(http.StatusInternalServerError)
    45  	}
    46  }