Finish adding the goinfo page.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
da41214617
commit
187e7cec54
@ -1,10 +1,41 @@
|
|||||||
package conf
|
package conf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
type ServeYaml struct {
|
type ServeYaml struct {
|
||||||
DataStorage string `yaml:"dataStorage"`
|
DataStorage string `yaml:"dataStorage"`
|
||||||
Domains []string `yaml:"domains"`
|
Domains []string `yaml:"domains"`
|
||||||
RangeSupported bool `yaml:"rangeSupported"`
|
RangeSupported bool `yaml:"rangeSupported"`
|
||||||
FilterURLQueries bool `yaml:"filterURLQueries"`
|
|
||||||
EnableGoInfoPage bool `yaml:"enableGoInfoPage"`
|
EnableGoInfoPage bool `yaml:"enableGoInfoPage"`
|
||||||
CacheSettings CacheSettingsYaml `yaml:"cacheSettings"`
|
CacheSettings CacheSettingsYaml `yaml:"cacheSettings"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sy ServeYaml) GetDomainString() string {
|
||||||
|
if len(sy.Domains) == 0 {
|
||||||
|
return "all"
|
||||||
|
} else {
|
||||||
|
return strings.Join(sy.Domains, " ")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sy ServeYaml) GetDataStoragePath() string {
|
||||||
|
if sy.DataStorage == "" || !filepath.IsAbs(sy.DataStorage) {
|
||||||
|
wd, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
if sy.DataStorage == "" {
|
||||||
|
return wd
|
||||||
|
} else {
|
||||||
|
return path.Join(wd, sy.DataStorage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return sy.DataStorage
|
||||||
|
}
|
||||||
|
}
|
||||||
|
311
goinfo.go.html
Normal file
311
goinfo.go.html
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="robots" content="noindex, nofollow, nositelinkssearchbox">
|
||||||
|
<title>Go Info</title>
|
||||||
|
<style>
|
||||||
|
.full-heading {
|
||||||
|
margin: auto;
|
||||||
|
width: 80%;
|
||||||
|
border: black 1px solid;
|
||||||
|
text-align: center;
|
||||||
|
background-color: mediumslateblue;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, th, td {
|
||||||
|
margin: auto;
|
||||||
|
text-align: left;
|
||||||
|
border: black 1px solid;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, td {
|
||||||
|
background-color: lightgray;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background-color: lightsteelblue;
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
<div class="full-heading">
|
||||||
|
<h1>{{ .GoVersion }} - {{ .ProductName }}</h1>
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ if .FullOutput }}
|
||||||
|
<div class="full-heading">
|
||||||
|
<b>
|
||||||
|
<a href="?">Less Output</a>
|
||||||
|
</b>
|
||||||
|
</div>
|
||||||
|
{{ else }}
|
||||||
|
<div class="full-heading">
|
||||||
|
<b>
|
||||||
|
<a href="?full">More Output</a>
|
||||||
|
</b>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Product Name</th>
|
||||||
|
<td>{{ .ProductName }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Product Description</th>
|
||||||
|
<td>{{ .ProductDescription }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Product Location</th>
|
||||||
|
<td>{{ .ProductLocation }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Build Commit</th>
|
||||||
|
<td>#{{ .BuildVersion }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Build Date</th>
|
||||||
|
<td>{{ .BuildDate }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Working Directory</th>
|
||||||
|
<td>{{ .WorkingDirectory }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ if .FullOutput }}
|
||||||
|
<tr>
|
||||||
|
<th>Process ID</th>
|
||||||
|
<td>{{ .ProcessID }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Parent Process ID</th>
|
||||||
|
<td>{{ .ParentProcessID }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Go Version</th>
|
||||||
|
<td>{{ .GoVersion }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Go Toolchain</th>
|
||||||
|
<td>{{ .Compiler }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>GOROOT</th>
|
||||||
|
<td>{{ .GoRoot }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>GOMAXPROCS</th>
|
||||||
|
<td>{{ .GoMaxProcs }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Go Routine Count</th>
|
||||||
|
<td>{{ .GoRoutineNum }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Go c go call Count</th>
|
||||||
|
<td>{{ .GoCGoCallNum }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Hostname</th>
|
||||||
|
<td>{{ .Hostname }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Operating System</th>
|
||||||
|
<td>{{ .GoOS }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Architecture</th>
|
||||||
|
<td>{{ .GoArch }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Number of Cores</th>
|
||||||
|
<td>{{ .NumCPU }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Memory Page Size</th>
|
||||||
|
<td>{{ .PageSize }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Listen Type</th>
|
||||||
|
<td>{{ .ListenSettings.WebNetwork }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Listening Address</th>
|
||||||
|
<td>{{ .ListenSettings.Web }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Listening Method</th>
|
||||||
|
<td>{{ .ListenSettings.WebMethod }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Identifying</th>
|
||||||
|
<td>{{ .ListenSettings.Identify }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ if and .FullOutput .ListenSettings.Identify }}
|
||||||
|
<tr>
|
||||||
|
<th>Server</th>
|
||||||
|
<td>Clerie Gilbert</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Powered By</th>
|
||||||
|
<td>Love</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Friendly</th>
|
||||||
|
<td>True</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Template Storage Path</th>
|
||||||
|
<td>{{ .ServeSettings.GetDataStoragePath }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Served Domains</th>
|
||||||
|
<td>{{ .ServeSettings.GetDomainString }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Range Supported</th>
|
||||||
|
<td>{{ .ServeSettings.RangeSupported }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
{{ if .FullOutput }}
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Enable Template Caching</th>
|
||||||
|
<td>{{ .ServeSettings.CacheSettings.EnableTemplateCaching }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Enable Template Cache Purge</th>
|
||||||
|
<td>{{ .ServeSettings.CacheSettings.EnableTemplateCachePurge }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Enable Content Caching</th>
|
||||||
|
<td>{{ .ServeSettings.CacheSettings.EnableContentsCaching }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Enable Content Cache Purge</th>
|
||||||
|
<td>{{ .ServeSettings.CacheSettings.EnableContentsCachePurge }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Max Age</th>
|
||||||
|
<td>{{ .ServeSettings.CacheSettings.MaxAge }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Enable Last Modified Precondition Support</th>
|
||||||
|
<td>{{ .ServeSettings.CacheSettings.NotModifiedResponseUsingLastModified }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Enable ETag Precondition Support</th>
|
||||||
|
<td>{{ .ServeSettings.CacheSettings.NotModifiedResponseUsingETags }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Environment Variables</th>
|
||||||
|
</tr>
|
||||||
|
{{ range .Environment }}
|
||||||
|
<tr>
|
||||||
|
<td>{{ . }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Number of Registered Pages</th>
|
||||||
|
<td>{{ len .RegisteredPages }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
{{ if and .FullOutput (not (eq (len .RegisteredPages) 0)) }}
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Registered Pages</th>
|
||||||
|
</tr>
|
||||||
|
{{ range .RegisteredPages }}
|
||||||
|
<tr>
|
||||||
|
<td>{{ . }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Number of Cached Pages</th>
|
||||||
|
<td>{{ len .CachedPages }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
{{ if and .FullOutput (not (eq (len .CachedPages) 0)) }}
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Cached Pages</th>
|
||||||
|
</tr>
|
||||||
|
{{ range .CachedPages }}
|
||||||
|
<tr>
|
||||||
|
<td>{{ . }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ if .FullOutput }}
|
||||||
|
<div class="full-heading">
|
||||||
|
<b>
|
||||||
|
<a href="?">Less Output</a>
|
||||||
|
</b>
|
||||||
|
</div>
|
||||||
|
{{ else }}
|
||||||
|
<div class="full-heading">
|
||||||
|
<b>
|
||||||
|
<a href="?full">More Output</a>
|
||||||
|
</b>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -20,12 +20,16 @@ func newGoInfoPage(handlerIn *PageHandler, dataStore string, cacheTemplates bool
|
|||||||
if cacheTemplates {
|
if cacheTemplates {
|
||||||
ptm = &sync.Mutex{}
|
ptm = &sync.Mutex{}
|
||||||
}
|
}
|
||||||
return &goInfoPage{
|
pageToReturn := &goInfoPage{
|
||||||
Handler: handlerIn,
|
Handler: handlerIn,
|
||||||
DataStore: dataStore,
|
DataStore: dataStore,
|
||||||
CacheTemplate: cacheTemplates,
|
CacheTemplate: cacheTemplates,
|
||||||
PageTemplateMutex: ptm,
|
PageTemplateMutex: ptm,
|
||||||
}
|
}
|
||||||
|
if !cacheTemplates {
|
||||||
|
_, _ = pageToReturn.getPageTemplate()
|
||||||
|
}
|
||||||
|
return pageToReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
type goInfoPage struct {
|
type goInfoPage struct {
|
||||||
@ -49,6 +53,7 @@ type goInfoTemplateMarshal struct {
|
|||||||
RegisteredPages []string
|
RegisteredPages []string
|
||||||
CachedPages []string
|
CachedPages []string
|
||||||
ProcessID int
|
ProcessID int
|
||||||
|
ParentProcessID int
|
||||||
ProductLocation string
|
ProductLocation string
|
||||||
ProductName string
|
ProductName string
|
||||||
ProductDescription string
|
ProductDescription string
|
||||||
@ -63,6 +68,9 @@ type goInfoTemplateMarshal struct {
|
|||||||
NumCPU int
|
NumCPU int
|
||||||
GoRoot string
|
GoRoot string
|
||||||
GoMaxProcs int
|
GoMaxProcs int
|
||||||
|
Compiler string
|
||||||
|
GoArch string
|
||||||
|
GoOS string
|
||||||
ListenSettings conf.ListenYaml
|
ListenSettings conf.ListenYaml
|
||||||
ServeSettings conf.ServeYaml
|
ServeSettings conf.ServeYaml
|
||||||
Environment []string
|
Environment []string
|
||||||
@ -102,6 +110,7 @@ func (gipg *goInfoPage) GetContents(urlParameters url.Values) (contentType strin
|
|||||||
RegisteredPages: regPages,
|
RegisteredPages: regPages,
|
||||||
CachedPages: cacPages,
|
CachedPages: cacPages,
|
||||||
ProcessID: os.Getpid(),
|
ProcessID: os.Getpid(),
|
||||||
|
ParentProcessID: os.Getppid(),
|
||||||
ProductLocation: getStringOrError(os.Executable),
|
ProductLocation: getStringOrError(os.Executable),
|
||||||
ProductName: info.BuildName,
|
ProductName: info.BuildName,
|
||||||
ProductDescription: info.BuildDescription,
|
ProductDescription: info.BuildDescription,
|
||||||
@ -116,6 +125,9 @@ func (gipg *goInfoPage) GetContents(urlParameters url.Values) (contentType strin
|
|||||||
NumCPU: runtime.NumCPU(),
|
NumCPU: runtime.NumCPU(),
|
||||||
GoRoot: runtime.GOROOT(),
|
GoRoot: runtime.GOROOT(),
|
||||||
GoMaxProcs: runtime.GOMAXPROCS(0),
|
GoMaxProcs: runtime.GOMAXPROCS(0),
|
||||||
|
Compiler: runtime.Compiler,
|
||||||
|
GoArch: runtime.GOARCH,
|
||||||
|
GoOS: runtime.GOOS,
|
||||||
ListenSettings: info.ListenSettings,
|
ListenSettings: info.ListenSettings,
|
||||||
ServeSettings: info.ServeSettings,
|
ServeSettings: info.ServeSettings,
|
||||||
Environment: env,
|
Environment: env,
|
||||||
|
@ -19,7 +19,6 @@ type PageHandler struct {
|
|||||||
PageProviders map[string]PageProvider
|
PageProviders map[string]PageProvider
|
||||||
pageContentsCacheRWMutex *sync.RWMutex
|
pageContentsCacheRWMutex *sync.RWMutex
|
||||||
RangeSupported bool
|
RangeSupported bool
|
||||||
FilterURLQueries bool
|
|
||||||
CacheSettings conf.CacheSettingsYaml
|
CacheSettings conf.CacheSettingsYaml
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +39,6 @@ func NewPageHandler(config conf.ServeYaml) *PageHandler {
|
|||||||
PageContentsCache: thePCCMap,
|
PageContentsCache: thePCCMap,
|
||||||
pageContentsCacheRWMutex: theMutex,
|
pageContentsCacheRWMutex: theMutex,
|
||||||
RangeSupported: config.RangeSupported,
|
RangeSupported: config.RangeSupported,
|
||||||
FilterURLQueries: config.FilterURLQueries,
|
|
||||||
CacheSettings: config.CacheSettings,
|
CacheSettings: config.CacheSettings,
|
||||||
}
|
}
|
||||||
if config.EnableGoInfoPage {
|
if config.EnableGoInfoPage {
|
||||||
|
Loading…
Reference in New Issue
Block a user