From 4205d3c1b0dff2e10a8af0a2db640aa7ffd7ba55 Mon Sep 17 00:00:00 2001 From: Kristoffer Dalby Date: Thu, 19 Jun 2025 15:26:42 +0200 Subject: [PATCH] cmd/hi: extract artifacts as directories instead of tar files - Change profile extraction from .pprof file to -pprof/ directory - Change mapresponses extraction from .mapresp file to -mapresponses/ directory - Update artifact listing to show directories with trailing slash - Improve organization by separating logs from data artifacts --- cmd/hi/docker.go | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/cmd/hi/docker.go b/cmd/hi/docker.go index 2fab993b..82f0ddfd 100644 --- a/cmd/hi/docker.go +++ b/cmd/hi/docker.go @@ -416,24 +416,29 @@ func listControlFiles(logsDir string) { } var logFiles []string - var tarFiles []string + var dataFiles []string + var dataDirs []string for _, entry := range entries { - if entry.IsDir() { - continue - } - name := entry.Name() - // Only show headscale (hs-*) files + // Only show headscale (hs-*) files and directories if !strings.HasPrefix(name, "hs-") { continue } - switch { - case strings.HasSuffix(name, ".stderr.log") || strings.HasSuffix(name, ".stdout.log"): - logFiles = append(logFiles, name) - case strings.HasSuffix(name, ".db") || strings.HasSuffix(name, ".pprof") || strings.HasSuffix(name, ".mapresp"): - tarFiles = append(tarFiles, name) + if entry.IsDir() { + // Include directories (pprof, mapresponses) + if strings.Contains(name, "-pprof") || strings.Contains(name, "-mapresponses") { + dataDirs = append(dataDirs, name) + } + } else { + // Include files + switch { + case strings.HasSuffix(name, ".stderr.log") || strings.HasSuffix(name, ".stdout.log"): + logFiles = append(logFiles, name) + case strings.HasSuffix(name, ".db"): + dataFiles = append(dataFiles, name) + } } } @@ -446,11 +451,14 @@ func listControlFiles(logsDir string) { } } - if len(tarFiles) > 0 { - log.Printf("Headscale files:") - for _, file := range tarFiles { + if len(dataFiles) > 0 || len(dataDirs) > 0 { + log.Printf("Headscale data:") + for _, file := range dataFiles { log.Printf(" %s", file) } + for _, dir := range dataDirs { + log.Printf(" %s/", dir) + } } } @@ -624,12 +632,12 @@ func extractContainerFiles(ctx context.Context, cli *client.Client, containerID, } // Extract profile directory - if err := extractDirectory(ctx, cli, containerID, "/tmp/profile", containerName+".pprof", logsDir, verbose); err != nil { + if err := extractDirectory(ctx, cli, containerID, "/tmp/profile", containerName+"-pprof", logsDir, verbose); err != nil { logExtractionError("profile directory", containerName, err, verbose) } // Extract map responses directory - if err := extractDirectory(ctx, cli, containerID, "/tmp/mapresponses", containerName+".mapresp", logsDir, verbose); err != nil { + if err := extractDirectory(ctx, cli, containerID, "/tmp/mapresponses", containerName+"-mapresponses", logsDir, verbose); err != nil { logExtractionError("mapresponses directory", containerName, err, verbose) }