github.com/grafana/pyroscope@v1.18.0/public/assets_embedded.go (about) 1 //go:build embedassets 2 // +build embedassets 3 4 package public 5 6 import ( 7 "embed" 8 "fmt" 9 "io/fs" 10 "net/http" 11 "path/filepath" 12 ) 13 14 var AssetsEmbedded = true 15 16 //go:embed build 17 var assets embed.FS 18 19 func Assets() (http.FileSystem, error) { 20 fsys, err := fs.Sub(assets, "build") 21 22 if err != nil { 23 return nil, err 24 } 25 26 return http.FS(fsys), nil 27 } 28 29 // NewIndexHandler parses and executes the webpack-built index.html 30 // Then returns a handler that serves that templated file 31 func NewIndexHandler(basePath string) (http.HandlerFunc, error) { 32 indexPath := filepath.Join("build", "index.html") 33 p, err := assets.ReadFile(indexPath) 34 if err != nil { 35 return nil, err 36 } 37 38 buf, err := ExecuteTemplate(p, Params{ 39 BasePath: basePath, 40 }) 41 if err != nil { 42 return nil, fmt.Errorf("could not execute template: %v", err) 43 } 44 45 return func(w http.ResponseWriter, r *http.Request) { 46 w.Header().Add("Content-Type", "text/html") 47 _, err := w.Write(buf) 48 if err != nil { 49 http.Error(w, err.Error(), http.StatusInternalServerError) 50 } 51 }, nil 52 }