github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/workerserver/prune.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/db"
     9  )
    10  
    11  func (s *Server) PruneWorker(w http.ResponseWriter, r *http.Request) {
    12  	logger := s.logger.Session("pruning-worker")
    13  	workerName := r.FormValue(":worker_name")
    14  
    15  	worker, found, err := s.dbWorkerFactory.GetWorker(workerName)
    16  	if err != nil {
    17  		logger.Error("failed-finding-worker-to-prune", err)
    18  		w.WriteHeader(http.StatusInternalServerError)
    19  		return
    20  	}
    21  
    22  	if !found {
    23  		logger.Error("failed-to-find-worker", err)
    24  		w.WriteHeader(http.StatusNotFound)
    25  		return
    26  	}
    27  
    28  	err = worker.Prune()
    29  	if err == db.ErrWorkerNotPresent {
    30  		logger.Error("failed-to-find-worker", err)
    31  		w.WriteHeader(http.StatusNotFound)
    32  		return
    33  	}
    34  
    35  	if err == db.ErrCannotPruneRunningWorker {
    36  		logger.Error("failed-to-prune-non-stalled-worker", err)
    37  		responseBody := atc.PruneWorkerResponseBody{
    38  			Stderr: "cannot prune running worker",
    39  		}
    40  
    41  		w.Header().Set("Content-Type", "application/json")
    42  		w.WriteHeader(http.StatusBadRequest)
    43  		err = json.NewEncoder(w).Encode(responseBody)
    44  		if err != nil {
    45  			logger.Error("failed-to-encode-prune-worker-response-body", err)
    46  			w.WriteHeader(http.StatusInternalServerError)
    47  		}
    48  		return
    49  	}
    50  
    51  	if err != nil {
    52  		logger.Error("failed-to-prune-worker", err)
    53  		w.WriteHeader(http.StatusInternalServerError)
    54  		return
    55  	}
    56  
    57  	w.WriteHeader(http.StatusOK)
    58  }