|
@@ -17,6 +17,7 @@ import (
|
|
"github.com/docker/docker/pkg/ioutils"
|
|
"github.com/docker/docker/pkg/ioutils"
|
|
pkgerrors "github.com/pkg/errors"
|
|
pkgerrors "github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/sirupsen/logrus"
|
|
|
|
+ "golang.org/x/sync/errgroup"
|
|
)
|
|
)
|
|
|
|
|
|
func optionsHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
func optionsHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
@@ -69,15 +70,48 @@ func (s *systemRouter) getVersion(ctx context.Context, w http.ResponseWriter, r
|
|
}
|
|
}
|
|
|
|
|
|
func (s *systemRouter) getDiskUsage(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
func (s *systemRouter) getDiskUsage(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
- du, err := s.backend.SystemDiskUsage(ctx)
|
|
|
|
- if err != nil {
|
|
|
|
|
|
+ eg, ctx := errgroup.WithContext(ctx)
|
|
|
|
+
|
|
|
|
+ var du *types.DiskUsage
|
|
|
|
+ eg.Go(func() error {
|
|
|
|
+ var err error
|
|
|
|
+ du, err = s.backend.SystemDiskUsage(ctx)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ var builderSize int64 // legacy
|
|
|
|
+ eg.Go(func() error {
|
|
|
|
+ var err error
|
|
|
|
+ builderSize, err = s.fscache.DiskUsage(ctx)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return pkgerrors.Wrap(err, "error getting fscache build cache usage")
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ var buildCache []*types.BuildCache
|
|
|
|
+ eg.Go(func() error {
|
|
|
|
+ var err error
|
|
|
|
+ buildCache, err = s.builder.DiskUsage(ctx)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return pkgerrors.Wrap(err, "error getting fscache build cache usage")
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ if err := eg.Wait(); err != nil {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
- builderSize, err := s.builder.DiskUsage(ctx)
|
|
|
|
- if err != nil {
|
|
|
|
- return pkgerrors.Wrap(err, "error getting build cache usage")
|
|
|
|
|
|
+
|
|
|
|
+ for _, b := range buildCache {
|
|
|
|
+ builderSize += b.Size
|
|
}
|
|
}
|
|
|
|
+
|
|
du.BuilderSize = builderSize
|
|
du.BuilderSize = builderSize
|
|
|
|
+ du.BuildCache = buildCache
|
|
|
|
|
|
return httputils.WriteJSON(w, http.StatusOK, du)
|
|
return httputils.WriteJSON(w, http.StatusOK, du)
|
|
}
|
|
}
|