go.ligato.io/vpp-agent/v3@v3.5.0/cmd/agentctl/client/scheduler.go (about) 1 package client 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "net/url" 8 9 "go.ligato.io/vpp-agent/v3/cmd/agentctl/api/types" 10 "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" 11 "go.ligato.io/vpp-agent/v3/proto/ligato/kvscheduler" 12 ) 13 14 func (c *Client) SchedulerDump(ctx context.Context, opts types.SchedulerDumpOptions) ([]api.RecordedKVWithMetadata, error) { 15 query := url.Values{} 16 query.Set("key-prefix", opts.KeyPrefix) 17 query.Set("view", opts.View) 18 19 resp, err := c.get(ctx, "/scheduler/dump", query, nil) 20 if err != nil { 21 return nil, err 22 } 23 var dump []api.RecordedKVWithMetadata 24 if err := json.NewDecoder(resp.body).Decode(&dump); err != nil { 25 return nil, fmt.Errorf("decoding reply failed: %v", err) 26 } 27 return dump, nil 28 } 29 30 func (c *Client) SchedulerValues(ctx context.Context, opts types.SchedulerValuesOptions) ([]*kvscheduler.BaseValueStatus, error) { 31 query := url.Values{} 32 query.Set("key-prefix", opts.KeyPrefix) 33 query.Set("key", opts.Key) 34 35 resp, err := c.get(ctx, "/scheduler/status", query, nil) 36 if err != nil { 37 return nil, err 38 } 39 var status []*kvscheduler.BaseValueStatus 40 if opts.Key != "" { 41 status = []*kvscheduler.BaseValueStatus{{}} 42 err = json.NewDecoder(resp.body).Decode(status[0]) 43 } else { 44 err = json.NewDecoder(resp.body).Decode(&status) 45 } 46 if err != nil { 47 return nil, fmt.Errorf("decoding reply failed: %v", err) 48 } 49 50 return status, nil 51 } 52 53 func (c *Client) SchedulerResync(ctx context.Context, opts types.SchedulerResyncOptions) (*api.RecordedTxn, error) { 54 query := url.Values{} 55 if opts.Retry { 56 query.Set("retry", "1") 57 } 58 if opts.Verbose { 59 query.Set("verbose", "1") 60 } 61 62 resp, err := c.post(ctx, "/scheduler/downstream-resync", query, nil, nil) 63 if err != nil { 64 return nil, err 65 } 66 67 var rectxn api.RecordedTxn 68 if err := json.NewDecoder(resp.body).Decode(&rectxn); err != nil { 69 return nil, fmt.Errorf("decoding reply failed: %v", err) 70 } 71 72 return &rectxn, nil 73 } 74 75 func (c *Client) SchedulerHistory(ctx context.Context, opts types.SchedulerHistoryOptions) (api.RecordedTxns, error) { 76 query := url.Values{} 77 if opts.SeqNum >= 0 { 78 query.Set("seq-num", fmt.Sprint(opts.SeqNum)) 79 } 80 81 resp, err := c.get(ctx, "/scheduler/txn-history", query, nil) 82 if err != nil { 83 return nil, err 84 } 85 86 if opts.SeqNum >= 0 { 87 var rectxn api.RecordedTxn 88 if err := json.NewDecoder(resp.body).Decode(&rectxn); err != nil { 89 return nil, fmt.Errorf("decoding reply failed: %v", err) 90 } 91 return api.RecordedTxns{&rectxn}, nil 92 } 93 94 var rectxn api.RecordedTxns 95 if err := json.NewDecoder(resp.body).Decode(&rectxn); err != nil { 96 return nil, fmt.Errorf("decoding reply failed: %v", err) 97 } 98 99 return rectxn, nil 100 }