github.com/quite/nomad@v0.8.6/command/agent_info.go (about)

     1  package command
     2  
     3  import (
     4  	"fmt"
     5  	"sort"
     6  	"strings"
     7  
     8  	"github.com/posener/complete"
     9  )
    10  
    11  type AgentInfoCommand struct {
    12  	Meta
    13  }
    14  
    15  func (c *AgentInfoCommand) Help() string {
    16  	helpText := `
    17  Usage: nomad agent-info [options]
    18  
    19    Display status information about the local agent.
    20  
    21  General Options:
    22  
    23    ` + generalOptionsUsage()
    24  	return strings.TrimSpace(helpText)
    25  }
    26  
    27  func (c *AgentInfoCommand) Synopsis() string {
    28  	return "Display status information about the local agent"
    29  }
    30  
    31  func (c *AgentInfoCommand) AutocompleteFlags() complete.Flags {
    32  	return c.Meta.AutocompleteFlags(FlagSetClient)
    33  }
    34  
    35  func (c *AgentInfoCommand) AutocompleteArgs() complete.Predictor {
    36  	return complete.PredictNothing
    37  }
    38  
    39  func (c *AgentInfoCommand) Name() string { return "agent-info" }
    40  
    41  func (c *AgentInfoCommand) Run(args []string) int {
    42  	flags := c.Meta.FlagSet(c.Name(), FlagSetClient)
    43  	flags.Usage = func() { c.Ui.Output(c.Help()) }
    44  	if err := flags.Parse(args); err != nil {
    45  		return 1
    46  	}
    47  
    48  	// Check that we got no arguments
    49  	args = flags.Args()
    50  	if len(args) > 0 {
    51  		c.Ui.Error("This command takes no arguments")
    52  		c.Ui.Error(commandErrorText(c))
    53  		return 1
    54  	}
    55  
    56  	// Get the HTTP client
    57  	client, err := c.Meta.Client()
    58  	if err != nil {
    59  		c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err))
    60  		return 1
    61  	}
    62  
    63  	// Query the agent info
    64  	info, err := client.Agent().Self()
    65  	if err != nil {
    66  		c.Ui.Error(fmt.Sprintf("Error querying agent info: %s", err))
    67  		return 1
    68  	}
    69  
    70  	// Sort and output agent info
    71  	statsKeys := make([]string, 0, len(info.Stats))
    72  	for key := range info.Stats {
    73  		statsKeys = append(statsKeys, key)
    74  	}
    75  	sort.Strings(statsKeys)
    76  
    77  	for _, key := range statsKeys {
    78  		c.Ui.Output(key)
    79  		statsData, _ := info.Stats[key]
    80  		statsDataKeys := make([]string, len(statsData))
    81  		i := 0
    82  		for key := range statsData {
    83  			statsDataKeys[i] = key
    84  			i++
    85  		}
    86  		sort.Strings(statsDataKeys)
    87  
    88  		for _, key := range statsDataKeys {
    89  			c.Ui.Output(fmt.Sprintf("  %s = %v", key, statsData[key]))
    90  		}
    91  	}
    92  
    93  	return 0
    94  }