mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 08:03:43 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package client
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"time"
 | |
| 
 | |
| 	controlapi "github.com/moby/buildkit/api/services/control"
 | |
| 	apitypes "github.com/moby/buildkit/api/types"
 | |
| 	"github.com/moby/buildkit/solver/pb"
 | |
| 	specs "github.com/opencontainers/image-spec/specs-go/v1"
 | |
| 	"github.com/pkg/errors"
 | |
| )
 | |
| 
 | |
| // WorkerInfo contains information about a worker
 | |
| type WorkerInfo struct {
 | |
| 	ID        string
 | |
| 	Labels    map[string]string
 | |
| 	Platforms []specs.Platform
 | |
| 	GCPolicy  []PruneInfo
 | |
| }
 | |
| 
 | |
| // ListWorkers lists all active workers
 | |
| func (c *Client) ListWorkers(ctx context.Context, opts ...ListWorkersOption) ([]*WorkerInfo, error) {
 | |
| 	info := &ListWorkersInfo{}
 | |
| 	for _, o := range opts {
 | |
| 		o.SetListWorkersOption(info)
 | |
| 	}
 | |
| 
 | |
| 	req := &controlapi.ListWorkersRequest{Filter: info.Filter}
 | |
| 	resp, err := c.controlClient().ListWorkers(ctx, req)
 | |
| 	if err != nil {
 | |
| 		return nil, errors.Wrap(err, "failed to list workers")
 | |
| 	}
 | |
| 
 | |
| 	var wi []*WorkerInfo
 | |
| 
 | |
| 	for _, w := range resp.Record {
 | |
| 		wi = append(wi, &WorkerInfo{
 | |
| 			ID:        w.ID,
 | |
| 			Labels:    w.Labels,
 | |
| 			Platforms: pb.ToSpecPlatforms(w.Platforms),
 | |
| 			GCPolicy:  fromAPIGCPolicy(w.GCPolicy),
 | |
| 		})
 | |
| 	}
 | |
| 
 | |
| 	return wi, nil
 | |
| }
 | |
| 
 | |
| // ListWorkersOption is an option for a worker list query
 | |
| type ListWorkersOption interface {
 | |
| 	SetListWorkersOption(*ListWorkersInfo)
 | |
| }
 | |
| 
 | |
| // ListWorkersInfo is a payload for worker list query
 | |
| type ListWorkersInfo struct {
 | |
| 	Filter []string
 | |
| }
 | |
| 
 | |
| func fromAPIGCPolicy(in []*apitypes.GCPolicy) []PruneInfo {
 | |
| 	out := make([]PruneInfo, 0, len(in))
 | |
| 	for _, p := range in {
 | |
| 		out = append(out, PruneInfo{
 | |
| 			All:          p.All,
 | |
| 			Filter:       p.Filters,
 | |
| 			KeepDuration: time.Duration(p.KeepDuration),
 | |
| 			KeepBytes:    p.KeepBytes,
 | |
| 		})
 | |
| 	}
 | |
| 	return out
 | |
| }
 | 
