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

     1  package volumeserver
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  
     7  	"code.cloudfoundry.org/lager"
     8  	"github.com/pf-qiu/concourse/v6/atc/metric"
     9  )
    10  
    11  func (s *Server) ListDestroyingVolumes(w http.ResponseWriter, r *http.Request) {
    12  	workerName := r.URL.Query().Get("worker_name")
    13  
    14  	logger := s.logger.Session("list-destroying-volumes", lager.Data{"worker": workerName})
    15  
    16  	if workerName == "" {
    17  		logger.Info("no-worker-specified")
    18  		w.WriteHeader(http.StatusBadRequest)
    19  		return
    20  	}
    21  
    22  	volumeHandles, err := s.destroyer.FindDestroyingVolumesForGc(workerName)
    23  	if err != nil {
    24  		logger.Error("failed-to-find-destroying-volumes", err)
    25  		w.WriteHeader(http.StatusInternalServerError)
    26  		return
    27  	}
    28  
    29  	logger.Debug("volumes-to-destroy", lager.Data{"count": len(volumeHandles)})
    30  
    31  	metric.VolumesToBeGarbageCollected{
    32  		Volumes: len(volumeHandles),
    33  	}.Emit(logger)
    34  
    35  	w.Header().Set("Content-Type", "application/json")
    36  	err = json.NewEncoder(w).Encode(volumeHandles)
    37  	if err != nil {
    38  		logger.Error("failed-to-encode-volumes", err)
    39  		w.WriteHeader(http.StatusInternalServerError)
    40  	}
    41  }