github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/api/handlers/libpod/system.go (about)

     1  package libpod
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/hanks177/podman/v4/libpod"
     7  	"github.com/hanks177/podman/v4/pkg/api/handlers/utils"
     8  	api "github.com/hanks177/podman/v4/pkg/api/types"
     9  	"github.com/hanks177/podman/v4/pkg/domain/entities"
    10  	"github.com/hanks177/podman/v4/pkg/domain/infra/abi"
    11  	"github.com/hanks177/podman/v4/pkg/util"
    12  	"github.com/gorilla/schema"
    13  	"github.com/pkg/errors"
    14  )
    15  
    16  // SystemPrune removes unused data
    17  func SystemPrune(w http.ResponseWriter, r *http.Request) {
    18  	decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
    19  	runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
    20  
    21  	query := struct {
    22  		All     bool `schema:"all"`
    23  		Volumes bool `schema:"volumes"`
    24  	}{}
    25  
    26  	if err := decoder.Decode(&query, r.URL.Query()); err != nil {
    27  		utils.Error(w, http.StatusBadRequest,
    28  			errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
    29  		return
    30  	}
    31  	filterMap, err := util.PrepareFilters(r)
    32  	if err != nil {
    33  		utils.Error(w, http.StatusBadRequest,
    34  			errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
    35  		return
    36  	}
    37  
    38  	containerEngine := abi.ContainerEngine{Libpod: runtime}
    39  
    40  	pruneOptions := entities.SystemPruneOptions{
    41  		All:     query.All,
    42  		Volume:  query.Volumes,
    43  		Filters: *filterMap,
    44  	}
    45  	report, err := containerEngine.SystemPrune(r.Context(), pruneOptions)
    46  	if err != nil {
    47  		utils.InternalServerError(w, err)
    48  		return
    49  	}
    50  
    51  	utils.WriteResponse(w, http.StatusOK, report)
    52  }
    53  
    54  func DiskUsage(w http.ResponseWriter, r *http.Request) {
    55  	// Options are only used by the CLI
    56  	options := entities.SystemDfOptions{}
    57  	runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
    58  	ic := abi.ContainerEngine{Libpod: runtime}
    59  	response, err := ic.SystemDf(r.Context(), options)
    60  	if err != nil {
    61  		utils.InternalServerError(w, err)
    62  		return
    63  	}
    64  	utils.WriteResponse(w, http.StatusOK, response)
    65  }