Use go:embed instead of generate using esc (#4356)
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
This commit is contained in:
parent
b121247922
commit
7e4a7e359f
1
Makefile
1
Makefile
|
|
@ -129,7 +129,6 @@ install-tools:
|
|||
cd $(TOOLS_MOD_DIR) && go install github.com/client9/misspell/cmd/misspell
|
||||
cd $(TOOLS_MOD_DIR) && go install github.com/golangci/golangci-lint/cmd/golangci-lint
|
||||
cd $(TOOLS_MOD_DIR) && go install github.com/google/addlicense
|
||||
cd $(TOOLS_MOD_DIR) && go install github.com/mjibson/esc
|
||||
cd $(TOOLS_MOD_DIR) && go install github.com/ory/go-acc
|
||||
cd $(TOOLS_MOD_DIR) && go install github.com/pavius/impi/cmd/impi
|
||||
cd $(TOOLS_MOD_DIR) && go install github.com/tcnksm/ghr
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ require (
|
|||
github.com/golangci/golangci-lint v1.42.1
|
||||
github.com/google/addlicense v1.0.0
|
||||
github.com/jcchavezs/porto v0.4.0
|
||||
github.com/mjibson/esc v0.2.0
|
||||
github.com/ory/go-acc v0.2.6
|
||||
github.com/pavius/impi v0.0.3
|
||||
github.com/tcnksm/ghr v0.14.0
|
||||
|
|
|
|||
|
|
@ -550,8 +550,6 @@ github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxd
|
|||
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
github.com/mjibson/esc v0.2.0 h1:k96hdaR9Z+nMcnDwNrOvhdBqtjyMrbVyxLpsRCdP2mA=
|
||||
github.com/mjibson/esc v0.2.0/go.mod h1:9Hw9gxxfHulMF5OJKCyhYD7PzlSdhzXyaGEBRPH1OPs=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ import (
|
|||
_ "github.com/golangci/golangci-lint/cmd/golangci-lint"
|
||||
_ "github.com/google/addlicense"
|
||||
_ "github.com/jcchavezs/porto/cmd/porto"
|
||||
_ "github.com/mjibson/esc"
|
||||
_ "github.com/ory/go-acc"
|
||||
_ "github.com/pavius/impi/cmd/impi"
|
||||
_ "github.com/tcnksm/ghr"
|
||||
|
|
|
|||
|
|
@ -15,40 +15,48 @@
|
|||
package zpages // import "go.opentelemetry.io/collector/service/internal/zpages"
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
|
||||
"go.opentelemetry.io/collector/service/internal/zpages/tmplgen"
|
||||
)
|
||||
|
||||
var (
|
||||
fs = tmplgen.FS(false)
|
||||
templateFunctions = template.FuncMap{
|
||||
"even": even,
|
||||
"getKey": getKey,
|
||||
"getValue": getValue,
|
||||
}
|
||||
componentHeaderTemplate = parseTemplate("component_header")
|
||||
extensionsTableTemplate = parseTemplate("extensions_table")
|
||||
headerTemplate = parseTemplate("header")
|
||||
footerTemplate = parseTemplate("footer")
|
||||
pipelinesTableTemplate = parseTemplate("pipelines_table")
|
||||
propertiesTableTemplate = parseTemplate("properties_table")
|
||||
|
||||
//go:embed templates/component_header.html
|
||||
componentHeaderBytes []byte
|
||||
componentHeaderTemplate = parseTemplate("component_header", componentHeaderBytes)
|
||||
|
||||
//go:embed templates/extensions_table.html
|
||||
extensionsTableBytes []byte
|
||||
extensionsTableTemplate = parseTemplate("extensions_table", extensionsTableBytes)
|
||||
|
||||
//go:embed templates/header.html
|
||||
headerBytes []byte
|
||||
headerTemplate = parseTemplate("header", headerBytes)
|
||||
|
||||
//go:embed templates/footer.html
|
||||
footerBytes []byte
|
||||
footerTemplate = parseTemplate("footer", footerBytes)
|
||||
|
||||
//go:embed templates/pipelines_table.html
|
||||
pipelinesTableBytes []byte
|
||||
pipelinesTableTemplate = parseTemplate("pipelines_table", pipelinesTableBytes)
|
||||
|
||||
//go:embed templates/properties_table.html
|
||||
propertiesTableBytes []byte
|
||||
propertiesTableTemplate = parseTemplate("properties_table", propertiesTableBytes)
|
||||
)
|
||||
|
||||
func parseTemplate(name string) *template.Template {
|
||||
f, err := fs.Open("/templates/" + name + ".html")
|
||||
if err != nil {
|
||||
log.Panicf("%v: %v", name, err)
|
||||
}
|
||||
defer f.Close()
|
||||
text, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
log.Panicf("%v: %v", name, err)
|
||||
}
|
||||
return template.Must(template.New(name).Funcs(templateFunctions).Parse(string(text)))
|
||||
func parseTemplate(name string, bytes []byte) *template.Template {
|
||||
fmt.Println(string(bytes))
|
||||
return template.Must(template.New(name).Funcs(templateFunctions).Parse(string(bytes)))
|
||||
}
|
||||
|
||||
// HeaderData contains data for the header template.
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
// Copyright The OpenTelemetry Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package tmplgen // import "go.opentelemetry.io/collector/service/internal/zpages/tmplgen"
|
||||
|
||||
//go:generate esc -pkg tmplgen -o resources.go -modtime "0" ../templates/
|
||||
//go:generate addlicense -y "" -c "The OpenTelemetry Authors" resources.go
|
||||
|
|
@ -1,309 +0,0 @@
|
|||
// Code generated by "esc -pkg tmplgen -o resources.go -modtime 0 ../templates/"; DO NOT EDIT.
|
||||
|
||||
package tmplgen
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type _escLocalFS struct{}
|
||||
|
||||
var _escLocal _escLocalFS
|
||||
|
||||
type _escStaticFS struct{}
|
||||
|
||||
var _escStatic _escStaticFS
|
||||
|
||||
type _escDirectory struct {
|
||||
fs http.FileSystem
|
||||
name string
|
||||
}
|
||||
|
||||
type _escFile struct {
|
||||
compressed string
|
||||
size int64
|
||||
modtime int64
|
||||
local string
|
||||
isDir bool
|
||||
|
||||
once sync.Once
|
||||
data []byte
|
||||
name string
|
||||
}
|
||||
|
||||
func (_escLocalFS) Open(name string) (http.File, error) {
|
||||
f, present := _escData[path.Clean(name)]
|
||||
if !present {
|
||||
return nil, os.ErrNotExist
|
||||
}
|
||||
return os.Open(f.local)
|
||||
}
|
||||
|
||||
func (_escStaticFS) prepare(name string) (*_escFile, error) {
|
||||
f, present := _escData[path.Clean(name)]
|
||||
if !present {
|
||||
return nil, os.ErrNotExist
|
||||
}
|
||||
var err error
|
||||
f.once.Do(func() {
|
||||
f.name = path.Base(name)
|
||||
if f.size == 0 {
|
||||
return
|
||||
}
|
||||
var gr *gzip.Reader
|
||||
b64 := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(f.compressed))
|
||||
gr, err = gzip.NewReader(b64)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
f.data, err = ioutil.ReadAll(gr)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return f, nil
|
||||
}
|
||||
|
||||
func (fs _escStaticFS) Open(name string) (http.File, error) {
|
||||
f, err := fs.prepare(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return f.File()
|
||||
}
|
||||
|
||||
func (dir _escDirectory) Open(name string) (http.File, error) {
|
||||
return dir.fs.Open(dir.name + name)
|
||||
}
|
||||
|
||||
func (f *_escFile) File() (http.File, error) {
|
||||
type httpFile struct {
|
||||
*bytes.Reader
|
||||
*_escFile
|
||||
}
|
||||
return &httpFile{
|
||||
Reader: bytes.NewReader(f.data),
|
||||
_escFile: f,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (f *_escFile) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *_escFile) Readdir(count int) ([]os.FileInfo, error) {
|
||||
if !f.isDir {
|
||||
return nil, fmt.Errorf(" escFile.Readdir: '%s' is not directory", f.name)
|
||||
}
|
||||
|
||||
fis, ok := _escDirs[f.local]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf(" escFile.Readdir: '%s' is directory, but we have no info about content of this dir, local=%s", f.name, f.local)
|
||||
}
|
||||
limit := count
|
||||
if count <= 0 || limit > len(fis) {
|
||||
limit = len(fis)
|
||||
}
|
||||
|
||||
if len(fis) == 0 && count > 0 {
|
||||
return nil, io.EOF
|
||||
}
|
||||
|
||||
return fis[0:limit], nil
|
||||
}
|
||||
|
||||
func (f *_escFile) Stat() (os.FileInfo, error) {
|
||||
return f, nil
|
||||
}
|
||||
|
||||
func (f *_escFile) Name() string {
|
||||
return f.name
|
||||
}
|
||||
|
||||
func (f *_escFile) Size() int64 {
|
||||
return f.size
|
||||
}
|
||||
|
||||
func (f *_escFile) Mode() os.FileMode {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (f *_escFile) ModTime() time.Time {
|
||||
return time.Unix(f.modtime, 0)
|
||||
}
|
||||
|
||||
func (f *_escFile) IsDir() bool {
|
||||
return f.isDir
|
||||
}
|
||||
|
||||
func (f *_escFile) Sys() interface{} {
|
||||
return f
|
||||
}
|
||||
|
||||
// FS returns a http.Filesystem for the embedded assets. If useLocal is true,
|
||||
// the filesystem's contents are instead used.
|
||||
func FS(useLocal bool) http.FileSystem {
|
||||
if useLocal {
|
||||
return _escLocal
|
||||
}
|
||||
return _escStatic
|
||||
}
|
||||
|
||||
// Dir returns a http.Filesystem for the embedded assets on a given prefix dir.
|
||||
// If useLocal is true, the filesystem's contents are instead used.
|
||||
func Dir(useLocal bool, name string) http.FileSystem {
|
||||
if useLocal {
|
||||
return _escDirectory{fs: _escLocal, name: name}
|
||||
}
|
||||
return _escDirectory{fs: _escStatic, name: name}
|
||||
}
|
||||
|
||||
// FSByte returns the named file from the embedded assets. If useLocal is
|
||||
// true, the filesystem's contents are instead used.
|
||||
func FSByte(useLocal bool, name string) ([]byte, error) {
|
||||
if useLocal {
|
||||
f, err := _escLocal.Open(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
b, err := ioutil.ReadAll(f)
|
||||
_ = f.Close()
|
||||
return b, err
|
||||
}
|
||||
f, err := _escStatic.prepare(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return f.data, nil
|
||||
}
|
||||
|
||||
// FSMustByte is the same as FSByte, but panics if name is not present.
|
||||
func FSMustByte(useLocal bool, name string) []byte {
|
||||
b, err := FSByte(useLocal, name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// FSString is the string version of FSByte.
|
||||
func FSString(useLocal bool, name string) (string, error) {
|
||||
b, err := FSByte(useLocal, name)
|
||||
return string(b), err
|
||||
}
|
||||
|
||||
// FSMustString is the string version of FSMustByte.
|
||||
func FSMustString(useLocal bool, name string) string {
|
||||
return string(FSMustByte(useLocal, name))
|
||||
}
|
||||
|
||||
var _escData = map[string]*_escFile{
|
||||
|
||||
"/templates/component_header.html": {
|
||||
name: "component_header.html",
|
||||
local: "../templates/component_header.html",
|
||||
size: 156,
|
||||
modtime: 0,
|
||||
compressed: `
|
||||
H4sIAAAAAAAC/1SMsQqDMBRFd7/iIq7q5lBiltKt9B8CPklQX6R1e9x/L6ZQ2vXcc65ZE3AZ0V3ztmcV
|
||||
PW467TnpQVZmzZp0Kfs96VJQizTjw1uyAgAXB+8C4lPmsT4fydqbdY+wCen64F0fB19iWV/yF/54X0en
|
||||
U3kHAAD//zT+SdCcAAAA
|
||||
`,
|
||||
},
|
||||
|
||||
"/templates/extensions_table.html": {
|
||||
name: "extensions_table.html",
|
||||
local: "../templates/extensions_table.html",
|
||||
size: 353,
|
||||
modtime: 0,
|
||||
compressed: `
|
||||
H4sIAAAAAAAC/2SQwU7DMBBE7/2KlemRNJwjxxwQHDnwB248DRbOOnK2tGD531HTQIvqk1fzZjU7Wuw2
|
||||
gCb5CmjVNiaHVE2j7Tz3DT0osyIiynltqWlp8xSHMTJYntmN0bOUsgDJcg9ap3jw7HC8n7+z5y0epgU7
|
||||
oxX5HeETfMGv9NPTkv4i2e6jT3HPrqE7AEui8yaECbdWkzPYUXWlaHFkg++5VR1YkJTRlt4Tdq06HVfK
|
||||
4zeOAp58ZLYD2pw3L/sQXu2AUpT5N+raGl2Lu0TRtaTfqsCulJWu52bNTwAAAP//sz5qjmEBAAA=
|
||||
`,
|
||||
},
|
||||
|
||||
"/templates/footer.html": {
|
||||
name: "footer.html",
|
||||
local: "../templates/footer.html",
|
||||
size: 15,
|
||||
modtime: 0,
|
||||
compressed: `
|
||||
H4sIAAAAAAAC/7LRT8pPqbTjstHPKMnNsQMEAAD//wEFevAPAAAA
|
||||
`,
|
||||
},
|
||||
|
||||
"/templates/header.html": {
|
||||
name: "header.html",
|
||||
local: "../templates/header.html",
|
||||
size: 467,
|
||||
modtime: 0,
|
||||
compressed: `
|
||||
H4sIAAAAAAAC/5TRMU8sIRAH8P4+BY/25eC9szGGxUItLIwW11giO7uMB8wG5rxsLvfdDdnTxNhoBeFP
|
||||
fpnM3/y5fbzZPj/dicAp2pVph4guj52ELK0J4Hq7EkIIk4Cd8MGVCtzJPQ/rS3mOGDmCPR7Vtl1OJ6OX
|
||||
lyWNmHeiQOxkDVTY71mgpyxFKDB0UuvD4aBogswQIQGXWSHpwb21Xwo9Sf1d4jlCDQD8wQTmqV5pPVDm
|
||||
qkaiMYKbsCpPSTfpenAJ49w9OIaCLv6995Sr/AXtqQc1Aqc+tgn/qwv1T6czpzD3ONJ6wrxTCbPy9ROv
|
||||
vuDEoocBiqjF/5RszGuV1uhFsCujl0bMC/Vz62vzZe1hY98DAAD//7qRGmLTAQAA
|
||||
`,
|
||||
},
|
||||
|
||||
"/templates/pipelines_table.html": {
|
||||
name: "pipelines_table.html",
|
||||
local: "../templates/pipelines_table.html",
|
||||
size: 1930,
|
||||
modtime: 0,
|
||||
compressed: `
|
||||
H4sIAAAAAAAC/7SVwXLTMBCG7zyFxnRyIjVcU1scoMxwgGE6vIAsbYKmykqzklu3xu/OWLZVp84Fgi8Z
|
||||
Kfq1/+y3f5QiiMoA8+HJQJlVlhTQ1jshNR527H3G3zDGWBFoWAwbxaQ13gksPzBh9AFLA/vAi4p/qY35
|
||||
Lo5Q5BUv8qBObvENVt7dDJ+/55uFdGEgAQNQb/EVXR1+Prk1Pb7VQQTwn0UQK7rcgQT9AORX9PhBVoL3
|
||||
dlWT28ZZCotGinyKTdteCbYr2fUne3QWAcMtKmc1hq4bBSTwAOyK7KNGBc27uIx37uyjH2WDdMv0nsED
|
||||
4It8dj7mNUVayPsD2RrVjr0FgIzPKoHxsLzK2xZQse3spEfVtr3d9RTxroud/h3EqUgK8UVVZjH9pzrj
|
||||
ILNhkjMypyMBmUYCsh9JNE/pfQUw1hbsF8G+zPrBd93HZ6cdGI2A4gjlAuTmWU65SAKQJ9/fa1QljZYZ
|
||||
nxRFLvjSvaLXrQCq+TT/M6oNCaKb8/Qc2YmeI5vovfwuV8HnyC7xuckz8ouSs/zOtrMuwYQLGjfhgsYl
|
||||
XOmFWYUWNG5JC0bLCCsqLgjbfJfexEFX5PEvmP8JAAD//50711CKBwAA
|
||||
`,
|
||||
},
|
||||
|
||||
"/templates/properties_table.html": {
|
||||
name: "properties_table.html",
|
||||
local: "../templates/properties_table.html",
|
||||
size: 420,
|
||||
modtime: 0,
|
||||
compressed: `
|
||||
H4sIAAAAAAAC/2SRwW7DIBBE7/6KVRr1VMc5u5gfqFT11Ds2U8sqWVuwqRoR/r1yTCpb4YAEO48ZDarV
|
||||
MR7ezQkp1apqdaHEtA4U5OLQ7NrRW/gyTKYbuK/puNMFEVGMtB/Y4pfqho6UUr71hnvk0Qvt4XACyyw6
|
||||
fPhxgpcBIasXoqThi/ADztRqOC8l/j+L6b57P57Z1vQEIEdZnoELeER1jGBL5WqixJJxQ89NBxZ4favg
|
||||
nvTaQ95wSWnuQlVi9RrUz9yG6XXZr+vDg3TrsTX4NO6M2WLDVOLv3YJtSoWqbl+h/wIAAP//aLmk3KQB
|
||||
AAA=
|
||||
`,
|
||||
},
|
||||
|
||||
"/templates": {
|
||||
name: "templates",
|
||||
local: `../templates/`,
|
||||
isDir: true,
|
||||
},
|
||||
}
|
||||
|
||||
var _escDirs = map[string][]os.FileInfo{
|
||||
|
||||
"../templates/": {
|
||||
_escData["/templates/component_header.html"],
|
||||
_escData["/templates/extensions_table.html"],
|
||||
_escData["/templates/footer.html"],
|
||||
_escData["/templates/header.html"],
|
||||
_escData["/templates/pipelines_table.html"],
|
||||
_escData["/templates/properties_table.html"],
|
||||
},
|
||||
}
|
||||
Loading…
Reference in New Issue