-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathagent_info.go
More file actions
120 lines (89 loc) · 2.08 KB
/
Copy pathagent_info.go
File metadata and controls
120 lines (89 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package command
import (
"bytes"
"context"
"encoding/json"
"fmt"
"strings"
structs "github.com/seashell/drago/drago/structs"
cli "github.com/seashell/drago/pkg/cli"
"github.com/spf13/pflag"
)
// AgentInfoCommand :
type AgentInfoCommand struct {
UI cli.UI
Command
// Parsed flags
json bool
}
func (c *AgentInfoCommand) FlagSet() *pflag.FlagSet {
flags := c.Command.FlagSet(c.Name())
flags.Usage = func() { c.UI.Output("\n" + c.Help() + "\n") }
// General options
flags.BoolVar(&c.json, "json", false, "")
return flags
}
// Name :
func (c *AgentInfoCommand) Name() string {
return "agent-info"
}
// Synopsis :
func (c *AgentInfoCommand) Synopsis() string {
return "Display status information about the local agent"
}
// Run :
func (c *AgentInfoCommand) Run(ctx context.Context, args []string) int {
flags := c.FlagSet()
if err := flags.Parse(args); err != nil {
return 1
}
args = flags.Args()
if len(args) > 0 {
c.UI.Error("This command takes no arguments")
c.UI.Error(`For additional help, try 'drago agent info --help'`)
return 1
}
// Get the HTTP client
api, err := c.Command.APIClient()
if err != nil {
c.UI.Error(fmt.Sprintf("Error setting up API client: %s", err))
return 1
}
info, err := api.Agent().Self()
if err != nil {
c.UI.Error(fmt.Sprintf("Error retrieving agent info: %s", err))
return 1
}
c.UI.Output(c.formatAgentInfo(info))
return 0
}
// Help :
func (c *AgentInfoCommand) Help() string {
h := `
Usage: drago agent-info [options]
Display status information about the local agent.
General Options:
` + GlobalOptions() + `
Agent Info Options:
--json
Enable JSON output.
`
return strings.TrimSpace(h)
}
func (c *AgentInfoCommand) formatAgentInfo(info *structs.Agent) string {
var b bytes.Buffer
enc := json.NewEncoder(&b)
enc.SetIndent("", " ")
fpolicy := map[string]interface{}{
"config": info.Config,
"stats": info.Stats,
}
if err := enc.Encode(fpolicy); err != nil {
c.UI.Error(fmt.Sprintf("Error formatting JSON output: %s", err))
}
s := b.String()
if c.json {
return s
}
return cleanJSONString(s)
}