sourcemaps
Build and Publish / Metadata (push) Successful in 2s
Build and Publish / BuildAndDeployAmd64 (push) Successful in 1m5s

This commit is contained in:
mats committed 2026-09-19 16:24:34 +02:00
1 parent 97743ea21c
commit 1aa264675e
11 files changed
+538 -17

No files matched your search

+16 -1
View File
@@ -7,6 +7,7 @@ import (
"encoding/base64"
"encoding/json"
"fmt"
"git.tornberg.me/go-otel/internal/sourcemaps"
"io"
"log"
"net/http"
@@ -500,6 +501,17 @@ func (c *Collector) HandleSourceMap(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated)
}
// HandleListSourceMaps lists the release/source pairs currently loaded, so a
// deploy can verify its uploads (and that they survived a restart).
func (c *Collector) HandleListSourceMaps(w http.ResponseWriter, r *http.Request) {
list := []sourcemaps.Entry{}
if c.sourceMaps != nil {
list = c.sourceMaps.List()
}
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(list)
}
// HandleResolveStacks maps raw browser stacktraces back to source using the
// uploaded source maps. Body: {"items":[{"release":"...","stacktrace":"..."}]};
// the response has one resolved stacktrace per item, in order.
@@ -515,14 +527,17 @@ func (c *Collector) HandleResolveStacks(w http.ResponseWriter, r *http.Request)
return
}
out := make([]string, len(req.Items))
frames := make([][]sourcemaps.Frame, len(req.Items))
for i, it := range req.Items {
out[i] = it.Stacktrace
frames[i] = []sourcemaps.Frame{}
if c.sourceMaps != nil {
out[i] = c.sourceMaps.ResolveStack(it.Release, it.Stacktrace)
frames[i] = c.sourceMaps.ResolveFrames(it.Release, it.Stacktrace)
}
}
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(map[string]any{"resolved": out})
_ = json.NewEncoder(w).Encode(map[string]any{"resolved": out, "frames": frames})
}
// HandleIssueByID returns a single issue by id, including its samples.