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  }