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  }