mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 16:13:45 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package client
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"sort"
 | |
| 	"time"
 | |
| 
 | |
| 	controlapi "github.com/moby/buildkit/api/services/control"
 | |
| 	"github.com/pkg/errors"
 | |
| )
 | |
| 
 | |
| type UsageInfo struct {
 | |
| 	ID      string
 | |
| 	Mutable bool
 | |
| 	InUse   bool
 | |
| 	Size    int64
 | |
| 
 | |
| 	CreatedAt   time.Time
 | |
| 	LastUsedAt  *time.Time
 | |
| 	UsageCount  int
 | |
| 	Parent      string
 | |
| 	Description string
 | |
| 	RecordType  UsageRecordType
 | |
| 	Shared      bool
 | |
| }
 | |
| 
 | |
| func (c *Client) DiskUsage(ctx context.Context, opts ...DiskUsageOption) ([]*UsageInfo, error) {
 | |
| 	info := &DiskUsageInfo{}
 | |
| 	for _, o := range opts {
 | |
| 		o.SetDiskUsageOption(info)
 | |
| 	}
 | |
| 
 | |
| 	req := &controlapi.DiskUsageRequest{Filter: info.Filter}
 | |
| 	resp, err := c.controlClient().DiskUsage(ctx, req)
 | |
| 	if err != nil {
 | |
| 		return nil, errors.Wrap(err, "failed to call diskusage")
 | |
| 	}
 | |
| 
 | |
| 	var du []*UsageInfo
 | |
| 
 | |
| 	for _, d := range resp.Record {
 | |
| 		du = append(du, &UsageInfo{
 | |
| 			ID:          d.ID,
 | |
| 			Mutable:     d.Mutable,
 | |
| 			InUse:       d.InUse,
 | |
| 			Size:        d.Size_,
 | |
| 			Parent:      d.Parent,
 | |
| 			CreatedAt:   d.CreatedAt,
 | |
| 			Description: d.Description,
 | |
| 			UsageCount:  int(d.UsageCount),
 | |
| 			LastUsedAt:  d.LastUsedAt,
 | |
| 			RecordType:  UsageRecordType(d.RecordType),
 | |
| 			Shared:      d.Shared,
 | |
| 		})
 | |
| 	}
 | |
| 
 | |
| 	sort.Slice(du, func(i, j int) bool {
 | |
| 		if du[i].Size == du[j].Size {
 | |
| 			return du[i].ID > du[j].ID
 | |
| 		}
 | |
| 		return du[i].Size > du[j].Size
 | |
| 	})
 | |
| 
 | |
| 	return du, nil
 | |
| }
 | |
| 
 | |
| type DiskUsageOption interface {
 | |
| 	SetDiskUsageOption(*DiskUsageInfo)
 | |
| }
 | |
| 
 | |
| type DiskUsageInfo struct {
 | |
| 	Filter []string
 | |
| }
 | |
| 
 | |
| type UsageRecordType string
 | |
| 
 | |
| const (
 | |
| 	UsageRecordTypeInternal    UsageRecordType = "internal"
 | |
| 	UsageRecordTypeFrontend    UsageRecordType = "frontend"
 | |
| 	UsageRecordTypeLocalSource UsageRecordType = "source.local"
 | |
| 	UsageRecordTypeGitCheckout UsageRecordType = "source.git.checkout"
 | |
| 	UsageRecordTypeCacheMount  UsageRecordType = "exec.cachemount"
 | |
| 	UsageRecordTypeRegular     UsageRecordType = "regular"
 | |
| )
 | 
