Skip to content

Commit 117c4ab

Browse files
committed
Debug shit
1 parent 86fe63f commit 117c4ab

2 files changed

Lines changed: 62 additions & 53 deletions

File tree

internal/command/metrics/metrics.go

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
package metrics
22

33
import (
4-
"bytes"
54
"context"
6-
"fmt"
75
"io"
8-
"net/http"
9-
"time"
106

11-
"github.com/PuerkitoBio/rehttp"
127
"github.com/spf13/cobra"
13-
"github.com/superfly/flyctl/internal/buildinfo"
148
"github.com/superfly/flyctl/internal/command"
15-
"github.com/superfly/flyctl/internal/config"
169
"github.com/superfly/flyctl/internal/metrics"
1710
"github.com/superfly/flyctl/iostreams"
1811
)
@@ -60,31 +53,5 @@ func run(ctx context.Context) error {
6053

6154
stdin_value := string(stdin_bytes)
6255

63-
authToken, err := metrics.GetMetricsToken(ctx)
64-
if err != nil {
65-
return err
66-
}
67-
68-
cfg := config.FromContext(ctx)
69-
request, err := http.NewRequest("POST", cfg.MetricsBaseURL+"/metrics_post", bytes.NewBuffer([]byte(stdin_value)))
70-
if err != nil {
71-
return err
72-
}
73-
74-
request.Header.Set("Authorization", authToken)
75-
request.Header.Set("User-Agent", fmt.Sprintf("flyctl/%s", buildinfo.Info().Version))
76-
77-
retryTransport := rehttp.NewTransport(http.DefaultTransport, rehttp.RetryAll(rehttp.RetryMaxRetries(3), rehttp.RetryTimeoutErr()), rehttp.ConstDelay(0))
78-
79-
client := http.Client{
80-
Transport: retryTransport,
81-
Timeout: time.Second * 5,
82-
}
83-
84-
resp, err := client.Do(request)
85-
if err != nil {
86-
return err
87-
}
88-
89-
return resp.Body.Close()
56+
return metrics.SendMetrics(ctx, stdin_value)
9057
}

internal/metrics/db.go

Lines changed: 61 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,17 @@ import (
44
"bytes"
55
"context"
66
"encoding/json"
7+
"fmt"
8+
"io"
9+
"net/http"
710
"os"
811
"os/exec"
12+
"time"
913

14+
"github.com/PuerkitoBio/rehttp"
1015
"github.com/superfly/flyctl/agent"
16+
"github.com/superfly/flyctl/internal/buildinfo"
17+
"github.com/superfly/flyctl/internal/config"
1118
"github.com/superfly/flyctl/iostreams"
1219
)
1320

@@ -25,37 +32,72 @@ func FlushMetrics(ctx context.Context) error {
2532

2633
}
2734

28-
flyctl, err := os.Executable()
29-
if err != nil {
30-
return err
31-
}
35+
iostream := iostreams.FromContext(ctx)
3236

33-
cmd := exec.Command(flyctl, "metrics", "send")
37+
// On CI, always block on metrics send. This sucks, but the alternative is not getting metrics from CI at all. There are timeouts in place to prevent this from taking more than 15 seconds
3438

35-
buffer := bytes.Buffer{}
36-
buffer.Write(json)
39+
if iostream.IsInteractive() {
40+
flyctl, err := os.Executable()
41+
if err != nil {
42+
return err
43+
}
3744

38-
cmd.Stdin = &buffer
39-
cmd.Env = os.Environ()
45+
cmd := exec.Command(flyctl, "metrics", "send")
46+
stdin, err := cmd.StdinPipe()
47+
if err != nil {
48+
return err
49+
}
4050

41-
agent.SetSysProcAttributes(cmd)
51+
go func() {
52+
defer stdin.Close()
53+
io.WriteString(stdin, string(json))
54+
}()
4255

43-
if err := cmd.Start(); err != nil {
44-
return err
45-
}
56+
cmd.Env = os.Environ()
57+
cmd.Env = append(cmd.Env, "FLY_NO_UPDATE_CHECK=1")
4658

47-
io := iostreams.FromContext(ctx)
59+
agent.SetSysProcAttributes(cmd)
4860

49-
// On CI, always block on metrics send. This sucks, but the alternative is not getting metrics from CI at all. There are timeouts in place to prevent this from taking more than 15 seconds
50-
if io.IsInteractive() {
51-
if err := cmd.Process.Release(); err != nil {
61+
if err := cmd.Start(); err != nil {
5262
return err
5363
}
54-
} else {
55-
if err := cmd.Wait(); err != nil {
64+
65+
if err := cmd.Process.Release(); err != nil {
5666
return err
5767
}
68+
} else {
69+
SendMetrics(ctx, string(json))
5870
}
5971

6072
return nil
6173
}
74+
75+
func SendMetrics(ctx context.Context, json string) error {
76+
authToken, err := GetMetricsToken(ctx)
77+
if err != nil {
78+
return err
79+
}
80+
81+
cfg := config.FromContext(ctx)
82+
request, err := http.NewRequest("POST", cfg.MetricsBaseURL+"/metrics_post", bytes.NewBuffer([]byte(json)))
83+
if err != nil {
84+
return err
85+
}
86+
87+
request.Header.Set("Authorization", authToken)
88+
request.Header.Set("User-Agent", fmt.Sprintf("flyctl/%s", buildinfo.Info().Version))
89+
90+
retryTransport := rehttp.NewTransport(http.DefaultTransport, rehttp.RetryAll(rehttp.RetryMaxRetries(3), rehttp.RetryTimeoutErr()), rehttp.ConstDelay(0))
91+
92+
client := http.Client{
93+
Transport: retryTransport,
94+
Timeout: time.Second * 5,
95+
}
96+
97+
resp, err := client.Do(request)
98+
if err != nil {
99+
return err
100+
}
101+
102+
return resp.Body.Close()
103+
}

0 commit comments

Comments
 (0)