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 }