Skip to content

Commit 0e5eecd

Browse files
authored
feat: add more logging around echo tar (coder#10731)
1 parent ced6ae0 commit 0e5eecd

File tree

4 files changed

+28
-4
lines changed

4 files changed

+28
-4
lines changed

coderd/coderdtest/coderdtest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,7 @@ func createAnotherUserRetry(t testing.TB, client *codersdk.Client, organizationI
709709
// with testing.
710710
func CreateTemplateVersion(t testing.TB, client *codersdk.Client, organizationID uuid.UUID, res *echo.Responses, mutators ...func(*codersdk.CreateTemplateVersionRequest)) codersdk.TemplateVersion {
711711
t.Helper()
712-
data, err := echo.Tar(res)
712+
data, err := echo.TarWithOptions(context.Background(), client.Logger(), res)
713713
require.NoError(t, err)
714714
file, err := client.Upload(context.Background(), codersdk.ContentTypeTar, bytes.NewReader(data))
715715
require.NoError(t, err)

coderd/prometheusmetrics/insights/metricscollector_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/stretchr/testify/assert"
1616
"github.com/stretchr/testify/require"
1717

18+
"cdr.dev/slog"
1819
"cdr.dev/slog/sloggers/slogtest"
1920
"github.com/coder/coder/v2/agent/agenttest"
2021
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -41,6 +42,7 @@ func TestCollectInsights(t *testing.T) {
4142
Pubsub: ps,
4243
}
4344
client := coderdtest.New(t, options)
45+
client.SetLogger(logger.Named("client").Leveled(slog.LevelDebug))
4446

4547
// Given
4648
// Initialize metrics collector

provisioner/echo/serve.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import (
1313
"golang.org/x/xerrors"
1414
protobuf "google.golang.org/protobuf/proto"
1515

16+
"cdr.dev/slog"
17+
1618
"github.com/coder/coder/v2/provisionersdk"
1719
"github.com/coder/coder/v2/provisionersdk/proto"
1820
)
@@ -211,6 +213,15 @@ type Responses struct {
211213

212214
// Tar returns a tar archive of responses to provisioner operations.
213215
func Tar(responses *Responses) ([]byte, error) {
216+
logger := slog.Make()
217+
return TarWithOptions(context.Background(), logger, responses)
218+
}
219+
220+
// TarWithOptions returns a tar archive of responses to provisioner operations,
221+
// but it gives more insight into the archiving process.
222+
func TarWithOptions(ctx context.Context, logger slog.Logger, responses *Responses) ([]byte, error) {
223+
logger = logger.Named("echo_tar")
224+
214225
if responses == nil {
215226
responses = &Responses{
216227
ParseComplete, ApplyComplete, PlanComplete,
@@ -242,6 +253,7 @@ func Tar(responses *Responses) ([]byte, error) {
242253
if err != nil {
243254
return err
244255
}
256+
logger.Debug(ctx, "write proto", slog.F("name", name), slog.F("message", string(data)))
245257

246258
err = writer.WriteHeader(&tar.Header{
247259
Name: name,
@@ -252,10 +264,11 @@ func Tar(responses *Responses) ([]byte, error) {
252264
return err
253265
}
254266

255-
_, err = writer.Write(data)
267+
n, err := writer.Write(data)
256268
if err != nil {
257269
return err
258270
}
271+
logger.Debug(context.Background(), "proto written", slog.F("name", name), slog.F("bytes_written", n))
259272

260273
return nil
261274
}

provisionersdk/session.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"bytes"
66
"context"
77
"fmt"
8+
"hash/crc32"
89
"io"
910
"os"
1011
"path/filepath"
@@ -216,6 +217,11 @@ func (s *Session) extractArchive() error {
216217
}
217218
return xerrors.Errorf("read template source archive: %w", err)
218219
}
220+
s.Logger.Debug(context.Background(), "read archive entry",
221+
slog.F("name", header.Name),
222+
slog.F("mod_time", header.ModTime),
223+
slog.F("size", header.Size))
224+
219225
// Security: don't untar absolute or relative paths, as this can allow a malicious tar to overwrite
220226
// files outside the workdir.
221227
if !filepath.IsLocal(header.Name) {
@@ -253,8 +259,11 @@ func (s *Session) extractArchive() error {
253259
if err != nil {
254260
return xerrors.Errorf("create file %q (mode %s): %w", headerPath, mode, err)
255261
}
262+
263+
hash := crc32.NewIEEE()
264+
hashReader := io.TeeReader(reader, hash)
256265
// Max file size of 10MiB.
257-
size, err := io.CopyN(file, reader, 10<<20)
266+
size, err := io.CopyN(file, hashReader, 10<<20)
258267
if xerrors.Is(err, io.EOF) {
259268
err = nil
260269
}
@@ -270,7 +279,7 @@ func (s *Session) extractArchive() error {
270279
slog.F("size_bytes", size),
271280
slog.F("path", headerPath),
272281
slog.F("mode", mode),
273-
)
282+
slog.F("checksum", fmt.Sprintf("%x", hash.Sum(nil))))
274283
}
275284
}
276285
return nil

0 commit comments

Comments
 (0)