github.com/grafana/pyroscope@v1.18.0/pkg/operations/pages.go (about)

     1  package operations
     2  
     3  import (
     4  	_ "embed"
     5  	"fmt"
     6  	"html/template"
     7  
     8  	"github.com/grafana/pyroscope/pkg/phlaredb/bucketindex"
     9  )
    10  
    11  //go:embed tool.blocks.index.gohtml
    12  var indexPageHtml string
    13  
    14  //go:embed tool.blocks.list.gohtml
    15  var blocksPageHtml string
    16  
    17  //go:embed tool.blocks.detail.gohtml
    18  var blockDetailsPageHtml string
    19  
    20  type indexPageContent struct {
    21  	Users []string
    22  	Now   string
    23  }
    24  
    25  type blockListPageContent struct {
    26  	User           string
    27  	Index          *bucketindex.Index
    28  	SelectedPeriod string
    29  	SelectedBlocks *blockListResult
    30  	Query          *blockQuery
    31  	Now            string
    32  }
    33  
    34  type blockDetailsPageContent struct {
    35  	User  string
    36  	Block *blockDetails
    37  	Now   string
    38  }
    39  
    40  type templates struct {
    41  	indexTemplate        *template.Template
    42  	blocksTemplate       *template.Template
    43  	blockDetailsTemplate *template.Template
    44  }
    45  
    46  var pageTemplates = initTemplates()
    47  
    48  func initTemplates() *templates {
    49  	indexTemplate := template.New("index")
    50  	template.Must(indexTemplate.Parse(indexPageHtml))
    51  	blocksTemplate := template.New("blocks").Funcs(template.FuncMap{
    52  		"mul":    mul,
    53  		"add":    add,
    54  		"addf":   addf,
    55  		"subf":   subf,
    56  		"mulf":   mulf,
    57  		"divf":   divf,
    58  		"format": format,
    59  		"float":  float,
    60  	})
    61  	template.Must(blocksTemplate.Parse(blocksPageHtml))
    62  	blockDetailsTemplate := template.New("block-details")
    63  	template.Must(blockDetailsTemplate.Parse(blockDetailsPageHtml))
    64  	t := &templates{
    65  		indexTemplate:        indexTemplate,
    66  		blocksTemplate:       blocksTemplate,
    67  		blockDetailsTemplate: blockDetailsTemplate,
    68  	}
    69  	return t
    70  }
    71  
    72  func mul(param1, param2 int) int {
    73  	return param1 * param2
    74  }
    75  
    76  func mulf(param1, param2 float64) float64 {
    77  	return param1 * param2
    78  }
    79  
    80  func add(param1, param2 int) int {
    81  	return param1 + param2
    82  }
    83  
    84  func addf(param1, param2 float64) float64 {
    85  	return param1 + param2
    86  }
    87  
    88  func subf(param1, param2 float64) float64 {
    89  	return param1 - param2
    90  }
    91  
    92  func divf(param1, param2 int) float64 {
    93  	return float64(param1) / float64(param2)
    94  }
    95  
    96  func format(format string, value any) string {
    97  	return fmt.Sprintf(format, value)
    98  }
    99  
   100  func float(param int) float64 {
   101  	return float64(param)
   102  }