Skip to content

Commit 7ddd5e4

Browse files
committed
clean up connects
1 parent 7672e25 commit 7ddd5e4

File tree

7 files changed

+62
-46
lines changed

7 files changed

+62
-46
lines changed

cmd/ctrlc/ctrlc.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ var (
1818
func init() {
1919
cobra.OnInitialize(initConfig)
2020
cmd.PersistentFlags().StringVar(&cfgFile, "config", "", "Config file (default is $HOME/.ctrlc.yaml)")
21+
viper.BindEnv("config", "CTRLPLANE_CONFIG")
22+
23+
cmd.PersistentFlags().String("url", "", "API URL")
24+
viper.BindPFlag("url", cmd.PersistentFlags().Lookup("url"))
25+
viper.BindEnv("url", "CTRLPLANE_URL")
26+
27+
cmd.PersistentFlags().String("api-key", "", "API key for authentication")
28+
viper.BindPFlag("api-key", cmd.PersistentFlags().Lookup("api-key"))
29+
viper.BindEnv("api-key", "CTRLPLANE_API_KEY")
2130
}
2231

2332
func main() {

cmd/ctrlc/root/agent/run/run.go

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package run
22

33
import (
44
"log"
5-
"os"
65
"strings"
76
"time"
87

@@ -12,45 +11,35 @@ import (
1211
)
1312

1413
func NewAgentRunCmd() *cobra.Command {
15-
var proxyAddr string
1614
var agentName string
1715
var workspace string
1816
var metadata map[string]string
1917
var insecure bool
20-
var targetId string
18+
var associatedResources []string
2119

2220
cmd := &cobra.Command{
2321
Use: "run",
2422
Short: "Run the agent",
2523
Long: `Run the agent to establish connection with the proxy.`,
2624
RunE: func(cmd *cobra.Command, args []string) error {
27-
if proxyAddr == "" {
28-
proxyAddr = viper.GetString("url")
29-
proxyAddr = strings.TrimPrefix(proxyAddr, "https://")
30-
proxyAddr = strings.TrimPrefix(proxyAddr, "http://")
31-
}
25+
proxyAddr := viper.GetString("url")
26+
proxyAddr = strings.TrimPrefix(proxyAddr, "https://")
27+
proxyAddr = strings.TrimPrefix(proxyAddr, "http://")
3228

3329
if insecure {
3430
proxyAddr = "ws://" + proxyAddr
3531
} else {
3632
proxyAddr = "wss://" + proxyAddr
3733
}
3834

39-
apiKey := os.Getenv("CTRLPLANE_API_KEY")
40-
if apiKey == "" {
41-
apiKey = viper.GetString("api-key")
42-
}
43-
44-
opts := []func(*agent.Agent){
45-
agent.WithMetadata(metadata),
46-
agent.WithHeader("X-API-Key", apiKey),
47-
agent.WithHeader("X-Workspace", workspace),
48-
}
49-
35+
apiKey := viper.GetString("api-key")
5036
agent := agent.NewAgent(
5137
proxyAddr,
5238
agentName,
53-
opts...,
39+
agent.WithMetadata(metadata),
40+
agent.WithHeader("X-API-Key", apiKey),
41+
agent.WithHeader("X-Workspace", workspace),
42+
agent.WithAssociatedResources(associatedResources),
5443
)
5544

5645
backoff := time.Second
@@ -72,12 +61,11 @@ func NewAgentRunCmd() *cobra.Command {
7261
SilenceUsage: true,
7362
}
7463

75-
cmd.Flags().StringVarP(&proxyAddr, "proxy", "p", "app.ctrlplane.dev", "Proxy address to connect through")
7664
cmd.Flags().StringVarP(&agentName, "name", "n", "", "Name for this agent")
7765
cmd.Flags().StringVarP(&workspace, "workspace", "w", "", "Workspace for this agent")
78-
cmd.Flags().StringVarP(&targetId, "target", "t", "", "Target ID to link this agent too")
7966
cmd.Flags().StringToStringVar(&metadata, "metadata", make(map[string]string), "Metadata key-value pairs (e.g. --metadata key=value)")
80-
cmd.Flags().BoolVar(&insecure, "insecure", false, "Allow insecure connections")
67+
cmd.Flags().BoolVar(&insecure, "insecure", false, "Allow insecure connections (a.k use ws://)")
68+
cmd.Flags().StringArrayVarP(&associatedResources, "associated-resource", "r", []string{}, "Resource ID or Identifier to associate this agent with")
8169

8270
cmd.MarkFlagRequired("workspace")
8371
cmd.MarkFlagRequired("name")

cmd/ctrlc/root/api/api.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,9 @@ func NewAPICmd() *cobra.Command {
3131
return cmd.Help()
3232
},
3333
}
34-
cmd.PersistentFlags().String("url", "", "API URL")
35-
cmd.PersistentFlags().String("api-key", "", "API key for authentication")
3634
cmd.PersistentFlags().String("template", "", "Template for output format. Accepts Go template format (e.g. --template='{{.status.phase}}')")
3735
cmd.PersistentFlags().String("format", "json", "Output format. Accepts 'json' or 'yaml'")
3836

39-
viper.BindPFlag("url", cmd.PersistentFlags().Lookup("url"))
40-
viper.BindPFlag("api-key", cmd.PersistentFlags().Lookup("api-key"))
41-
4237
cmd.AddCommand(get.NewGetCmd())
4338
cmd.AddCommand(create.NewCreateCmd())
4439
cmd.AddCommand(upsert.NewUpsertCmd())

cmd/ctrlc/root/api/delete/delete.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ func NewDeleteCmd() *cobra.Command {
1515
},
1616
}
1717

18-
1918
cmd.AddCommand(resource.NewDeleteResourceCmd())
2019

2120
return cmd

pkg/agent/agent.go

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"log"
77
"net/http"
88
"os"
9+
"runtime"
10+
"strconv"
911
"time"
1012

1113
"github.com/creack/pty"
@@ -34,26 +36,28 @@ func GetControllerProxyURL() string {
3436
}
3537

3638
type Agent struct {
37-
headers http.Header
38-
client *client.Client
39-
serverURL string
40-
agentName string
41-
StopSignal chan struct{}
42-
metadata map[string]string
43-
manager *ptysession.Manager
39+
headers http.Header
40+
client *client.Client
41+
serverURL string
42+
agentName string
43+
StopSignal chan struct{}
44+
metadata map[string]string
45+
associatedResources []string
46+
manager *ptysession.Manager
4447
}
4548

4649
func NewAgent(serverURL, agentName string, opts ...func(*Agent)) *Agent {
4750
headers := make(http.Header)
4851
headers.Set("User-Agent", "ctrlplane-cli")
4952
headers.Set("X-Agent-Name", agentName)
5053
agent := &Agent{
51-
headers: headers,
52-
serverURL: serverURL,
53-
agentName: agentName,
54-
StopSignal: make(chan struct{}),
55-
metadata: make(map[string]string),
56-
manager: ptysession.GetManager(),
54+
headers: headers,
55+
serverURL: serverURL,
56+
agentName: agentName,
57+
StopSignal: make(chan struct{}),
58+
metadata: make(map[string]string),
59+
manager: ptysession.GetManager(),
60+
associatedResources: []string{},
5761
}
5862
for _, opt := range opts {
5963
opt(agent)
@@ -135,12 +139,23 @@ func (a *Agent) handleConnect() {
135139
log.Printf("Agent %s connected to server", a.agentName)
136140

137141
connectPayload := payloads.AgentConnectJson{
138-
Type: payloads.AgentConnectJsonTypeAgentConnect,
139-
Name: a.agentName,
140-
Config: map[string]interface{}{},
141-
Metadata: a.metadata,
142+
Type: payloads.AgentConnectJsonTypeAgentConnect,
143+
Name: a.agentName,
144+
Config: map[string]interface{}{},
145+
Metadata: a.metadata,
146+
AssociatedResources: a.associatedResources,
142147
}
143148

149+
var memStats runtime.MemStats
150+
runtime.ReadMemStats(&memStats)
151+
connectPayload.Metadata["go/memstats/totalalloc"] = strconv.FormatUint(memStats.TotalAlloc, 10)
152+
connectPayload.Metadata["go/memstats/sys"] = strconv.FormatUint(memStats.Sys, 10)
153+
connectPayload.Metadata["runtime/os"] = runtime.GOOS
154+
connectPayload.Metadata["runtime/arch"] = runtime.GOARCH
155+
connectPayload.Metadata["go/version"] = runtime.Version()
156+
connectPayload.Metadata["go/compiler"] = runtime.Compiler
157+
connectPayload.Metadata["go/numcpu"] = strconv.Itoa(runtime.NumCPU())
158+
144159
data, err := json.Marshal(connectPayload)
145160
if err != nil {
146161
log.Printf("Error marshaling connect payload: %v", err)

pkg/agent/options.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,10 @@ func WithHeader(key string, value string) func(*Agent) {
1111
a.headers.Set(key, value)
1212
}
1313
}
14+
15+
16+
func WithAssociatedResources(resources []string) func(*Agent) {
17+
return func(a *Agent) {
18+
a.associatedResources = resources
19+
}
20+
}

pkg/payloads/agent_connect_generated.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)