control/info: Setup template inheritance
This commit is contained in:
parent
e5cd57cb7d
commit
dd7be3f520
12 changed files with 768 additions and 758 deletions
|
|
@ -51,7 +51,7 @@ func (home *Home) updateRender(ctx context.Context, io stream.IOStream) {
|
||||||
|
|
||||||
//go:embed "home.html"
|
//go:embed "home.html"
|
||||||
var homeHTMLStr string
|
var homeHTMLStr string
|
||||||
var homeTemplate = static.AssetsHomeHome.MustParse(homeHTMLStr)
|
var homeTemplate = static.AssetsHomeHome.MustParse(nil, homeHTMLStr)
|
||||||
|
|
||||||
func (home *Home) homeRender() ([]byte, error) {
|
func (home *Home) homeRender() ([]byte, error) {
|
||||||
var context HomeContext
|
var context HomeContext
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package info
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
_ "embed"
|
||||||
|
"html/template"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -9,9 +10,22 @@ import (
|
||||||
"github.com/FAU-CDI/wisski-distillery/pkg/lazy"
|
"github.com/FAU-CDI/wisski-distillery/pkg/lazy"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed "html/components.html"
|
//go:embed "html/base.html"
|
||||||
|
var baseTemplateString string
|
||||||
|
var baseTemplate = template.Must(template.New("base.html").Parse(baseTemplateString))
|
||||||
|
|
||||||
|
func base(name string) *template.Template {
|
||||||
|
clone := template.Must(baseTemplate.Clone())
|
||||||
|
clone.Tree.Name = name
|
||||||
|
return clone
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:embed "html/info_components.html"
|
||||||
var componentsTemplateString string
|
var componentsTemplateString string
|
||||||
var componentsTemplate = static.AssetsComponentsIndex.MustParse(componentsTemplateString)
|
var componentsTemplate = static.AssetsComponentsIndex.MustParse(
|
||||||
|
base("info_components.html"),
|
||||||
|
componentsTemplateString,
|
||||||
|
)
|
||||||
|
|
||||||
type componentsPageContext struct {
|
type componentsPageContext struct {
|
||||||
Time time.Time
|
Time time.Time
|
||||||
|
|
|
||||||
26
internal/dis/component/control/info/html/base.html
Normal file
26
internal/dis/component/control/info/html/base.html
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<title>{{ block "title" . }}Distillery Control Page{{ end }}</title>
|
||||||
|
{{ block "head" . }}head{{ end }}
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1 id="top">{{ template "title" . }}</h1>
|
||||||
|
<small>Generated at <code class="date">{{ .Time.Format "2006-01-02T15:04:05Z07:00" }}</code></small>
|
||||||
|
{{ block "header" . }}header{{ end }}
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<div class="pure-g">
|
||||||
|
{{ block "content" . }}content{{ end }}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Generated at <code>{{ .Time }}</code>
|
||||||
|
</footer>
|
||||||
|
{{ block "footer" . }}footer{{ end }}
|
||||||
|
</body>
|
||||||
|
|
@ -1,143 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Distillery Control Page - Components Page</title>
|
|
||||||
{{ CSS }}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<h1 id="top">Distillery Control Page - Components Page</h1>
|
|
||||||
<small>Generated at <code class="date">{{ .Time.Format "2006-01-02T15:04:05Z07:00" }}</code></small>
|
|
||||||
<p>
|
|
||||||
<a class="pure-button" href="/dis/index">Control</a> >
|
|
||||||
<a class="pure-button pure-button-primary" href="/dis/components">Components</a>
|
|
||||||
</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<div class="pure-g">
|
|
||||||
<div class="pure-u-1-1">
|
|
||||||
<h2 id="components">Components</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{ range $name, $comp := .Analytics.Components }}
|
|
||||||
<div class="pure-u-1-1" id="{{ $name }}">
|
|
||||||
<div class="padding">
|
|
||||||
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="3">
|
|
||||||
{{ $name }}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{{ range .Groups }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Implements
|
|
||||||
</td>
|
|
||||||
<td colspan="2">
|
|
||||||
<code><a href="#{{.}}">{{ . }}</a></code><br />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
{{ range $name, $comp := .CFields }}
|
|
||||||
<tr>
|
|
||||||
<td>Component Pointer</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ $name }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code><a href="#{{ $comp }}">{{ $comp }}</a></code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
{{ range $name, $iface := .IFields }}
|
|
||||||
<tr>
|
|
||||||
<td>Interface Slice</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ $name }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code><a href="#{{ $iface }}">[]{{ $iface }}</a></code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
{{ range $name, $sig := $comp.Methods }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Method
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ $name }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ $sig }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<div class="pure-u-1-1">
|
|
||||||
<h2 id="interfaces">Interfaces</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{ range $name, $group := .Analytics.Groups }}
|
|
||||||
<div class="pure-u-1-1" id="{{ $name }}">
|
|
||||||
<div class="padding">
|
|
||||||
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="3">
|
|
||||||
{{ $name }}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{{ range $name, $sig := $group.Methods }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Method
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ $name }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ $sig }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
{{ range $group.Components }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Implemented By
|
|
||||||
</td>
|
|
||||||
<td colspan="2">
|
|
||||||
<code><a href="#{{.}}">{{ . }}</a></code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{{ JS }}
|
|
||||||
</body>
|
|
||||||
|
|
@ -1,294 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Distillery Control Page</title>
|
|
||||||
{{ CSS }}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<h1 id="top">Distillery Control Page</h1>
|
|
||||||
<small>Generated at <code class="date">{{ .Time.Format "2006-01-02T15:04:05Z07:00" }}</code></small>
|
|
||||||
<p>
|
|
||||||
<a class="pure-button pure-button-primary" href="/dis/index">Control</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a class="pure-button" href="/dis/components">Components</a>
|
|
||||||
</p>
|
|
||||||
</header>
|
|
||||||
<main>
|
|
||||||
<div class="pure-g">
|
|
||||||
<div class="pure-u-1-1">
|
|
||||||
<h2 id="overview">Distillery Configuration</h2>
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-1 pure-u-xl-1-3">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Domains
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Primary
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.DefaultDomain}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Extra
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ range .Config.SelfExtraDomains }}
|
|
||||||
<code>{{.}}</code><br />
|
|
||||||
{{ end }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Email <small>(HTTPS)</small>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.CertbotEmail}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-1 pure-u-xl-1-3">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Database Settings
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
MySQL User Prefix
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.MysqlUserPrefix}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
MySQL Database Prefix
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.MysqlDatabasePrefix}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
GraphDB User Prefix
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.GraphDBUserPrefix}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
GraphDB Database Prefix
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.GraphDBRepoPrefix}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Bookkeeping Database
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.DistilleryDatabase}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-1 pure-u-xl-1-3">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Directory Settings
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<code>root</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.DeployRoot}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<code>config</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.ConfigPath}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<code>authorized_keys</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.GlobalAuthorizedKeysFile}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-1 pure-u-xl-2-5">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Misc Settings
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Homepage
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{{.Config.SelfRedirect}}" target="_blank" rel="noopener noreferrer">{{.Config.SelfRedirect}}</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Docker Network Name
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.DockerNetworkName}}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Backup Age
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{.Config.MaxBackupAge}}</code> Day(s)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1-1">
|
|
||||||
<h2 id="backups">Backups</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1">
|
|
||||||
<table class="pure-table pure-table-bordered padding">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Path</th>
|
|
||||||
<th>Created</th>
|
|
||||||
<th>Packed</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{{ range .Backups }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<code class="path">{{ .Path }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code class="date">{{ .Created.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ .Packed }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end}}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1">
|
|
||||||
<h2 id="instances">Instances</h2>
|
|
||||||
|
|
||||||
<table class="pure-table pure-table-bordered padding">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Total</th>
|
|
||||||
<th>Running</th>
|
|
||||||
<th>Stopped</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
{{ .TotalCount }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ .RunningCount }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ .StoppedCount }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<span class="hspace"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{range .Instances}}
|
|
||||||
<div class="pure-u-1 pure-u-xl-1-3">
|
|
||||||
<div class="wisski {{ if .Running }}running{{ else }}stopped{{ end }}">
|
|
||||||
<h3>
|
|
||||||
{{.Slug}}
|
|
||||||
{{ if not .Running }} <small>not running</small>{{ end }}
|
|
||||||
</h3>
|
|
||||||
<p>
|
|
||||||
<a href="{{.URL}}" target="_blank" rel="noopener noreferrer">{{.URL}}</a><br>
|
|
||||||
|
|
||||||
<a class="pure-button" href="/dis/instance/{{.Slug}}">Details</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Generated at <code>{{ .Time }}</code>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
{{ JS }}
|
|
||||||
</body>
|
|
||||||
131
internal/dis/component/control/info/html/info_components.html
Normal file
131
internal/dis/component/control/info/html/info_components.html
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
{{ define "title" }}Distillery Control Page - Components Page{{ end }}
|
||||||
|
|
||||||
|
{{ define "head" }}{{ CSS }}{{ end }}
|
||||||
|
{{ define "footer" }}{{ JS }}{{ end }}
|
||||||
|
|
||||||
|
{{ define "header"}}
|
||||||
|
<p>
|
||||||
|
<a class="pure-button" href="/dis/index">Control</a> >
|
||||||
|
<a class="pure-button pure-button-primary" href="/dis/components">Components</a>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "content" }}
|
||||||
|
<div class="pure-u-1-1">
|
||||||
|
<h2 id="components">Components</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ range $name, $comp := .Analytics.Components }}
|
||||||
|
<div class="pure-u-1-1" id="{{ $name }}">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="3">
|
||||||
|
{{ $name }}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{ range .Groups }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Implements
|
||||||
|
</td>
|
||||||
|
<td colspan="2">
|
||||||
|
<code><a href="#{{.}}">{{ . }}</a></code><br />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
{{ range $name, $comp := .CFields }}
|
||||||
|
<tr>
|
||||||
|
<td>Component Pointer</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ $name }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code><a href="#{{ $comp }}">{{ $comp }}</a></code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
{{ range $name, $iface := .IFields }}
|
||||||
|
<tr>
|
||||||
|
<td>Interface Slice</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ $name }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code><a href="#{{ $iface }}">[]{{ $iface }}</a></code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
{{ range $name, $sig := $comp.Methods }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Method
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ $name }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ $sig }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<div class="pure-u-1-1">
|
||||||
|
<h2 id="interfaces">Interfaces</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ range $name, $group := .Analytics.Groups }}
|
||||||
|
<div class="pure-u-1-1" id="{{ $name }}">
|
||||||
|
<div class="padding">
|
||||||
|
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="3">
|
||||||
|
{{ $name }}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{ range $name, $sig := $group.Methods }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Method
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ $name }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ $sig }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
{{ range $group.Components }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Implemented By
|
||||||
|
</td>
|
||||||
|
<td colspan="2">
|
||||||
|
<code><a href="#{{.}}">{{ . }}</a></code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
279
internal/dis/component/control/info/html/info_index.html
Normal file
279
internal/dis/component/control/info/html/info_index.html
Normal file
|
|
@ -0,0 +1,279 @@
|
||||||
|
{{ define "title" }}Distillery Control Page{{ end }}
|
||||||
|
|
||||||
|
{{ define "head" }}{{ CSS }}{{ end }}
|
||||||
|
{{ define "footer" }}{{ JS }}{{ end }}
|
||||||
|
|
||||||
|
{{ define "header"}}
|
||||||
|
<p>
|
||||||
|
<a class="pure-button pure-button-primary" href="/dis/index">Control</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a class="pure-button" href="/dis/components">Components</a>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "content" }}
|
||||||
|
<div class="pure-u-1-1">
|
||||||
|
<h2 id="overview">Distillery Configuration</h2>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-xl-1-3">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Domains
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Primary
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.DefaultDomain}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Extra
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ range .Config.SelfExtraDomains }}
|
||||||
|
<code>{{.}}</code><br />
|
||||||
|
{{ end }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Email <small>(HTTPS)</small>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.CertbotEmail}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-xl-1-3">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Database Settings
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
MySQL User Prefix
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.MysqlUserPrefix}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
MySQL Database Prefix
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.MysqlDatabasePrefix}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
GraphDB User Prefix
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.GraphDBUserPrefix}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
GraphDB Database Prefix
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.GraphDBRepoPrefix}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Bookkeeping Database
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.DistilleryDatabase}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-xl-1-3">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Directory Settings
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>root</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.DeployRoot}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>config</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.ConfigPath}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>authorized_keys</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.GlobalAuthorizedKeysFile}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-xl-2-5">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Misc Settings
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Homepage
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{.Config.SelfRedirect}}" target="_blank" rel="noopener noreferrer">{{.Config.SelfRedirect}}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Docker Network Name
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.DockerNetworkName}}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Backup Age
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{.Config.MaxBackupAge}}</code> Day(s)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1-1">
|
||||||
|
<h2 id="backups">Backups</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1">
|
||||||
|
<table class="pure-table pure-table-bordered padding">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Path</th>
|
||||||
|
<th>Created</th>
|
||||||
|
<th>Packed</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{ range .Backups }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code class="path">{{ .Path }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code class="date">{{ .Created.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ .Packed }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1">
|
||||||
|
<h2 id="instances">Instances</h2>
|
||||||
|
|
||||||
|
<table class="pure-table pure-table-bordered padding">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Total</th>
|
||||||
|
<th>Running</th>
|
||||||
|
<th>Stopped</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ .TotalCount }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ .RunningCount }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ .StoppedCount }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<span class="hspace"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{range .Instances}}
|
||||||
|
<div class="pure-u-1 pure-u-xl-1-3">
|
||||||
|
<div class="wisski {{ if .Running }}running{{ else }}stopped{{ end }}">
|
||||||
|
<h3>
|
||||||
|
{{.Slug}}
|
||||||
|
{{ if not .Running }} <small>not running</small>{{ end }}
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
<a href="{{.URL}}" target="_blank" rel="noopener noreferrer">{{.URL}}</a><br>
|
||||||
|
|
||||||
|
<a class="pure-button" href="/dis/instance/{{.Slug}}">Details</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{ end }}
|
||||||
300
internal/dis/component/control/info/html/info_instance.html
Normal file
300
internal/dis/component/control/info/html/info_instance.html
Normal file
|
|
@ -0,0 +1,300 @@
|
||||||
|
{{ define "title" }}Distillery Control Page - {{ .Info.Slug }}{{ end }}
|
||||||
|
|
||||||
|
{{ define "head" }}{{ CSS }}{{ end }}
|
||||||
|
{{ define "footer" }}{{ JS }}{{ end }}
|
||||||
|
|
||||||
|
{{ define "header"}}
|
||||||
|
<p>
|
||||||
|
<a class="pure-button" href="/dis/index">Control</a> >
|
||||||
|
<a class="pure-button pure-button-primary" href="/dis/instance/{{ .Info.Slug }}">Instance</a>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "content" }}
|
||||||
|
<div class="pure-u-1-1">
|
||||||
|
<h2 id="overview">Info & Status</h2>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-xl-2-5">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Overview
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Slug
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ .Info.Slug }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
URL
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ .Info.URL }}" target="_blank" rel="noopener noreferrer">{{ .Info.URL }}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Running
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ .Info.Running }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Locked
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ .Info.Locked }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-xl-2-5">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Component Settings
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Directory
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code style="overflow: auto;">{{ .Instance.FilesystemBase }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
SQL DB
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ .Instance.SqlDatabase }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
SQL User
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ .Instance.SqlUsername }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
TS Repo
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ .Instance.GraphDBRepository }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
TS User
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>{{ .Instance.GraphDBUsername }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1 pure-u-xl-2-5">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Build Status
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Created
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code class="date">{{ .Instance.Created.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Last Rebuild <br>
|
||||||
|
<button class="remote-action pure-button pure-button-action" data-action="rebuild" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Rebuild</button>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code class="date">{{ .Info.LastRebuild.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Last Cron<br>
|
||||||
|
<button class="remote-action pure-button pure-button-action" data-action="cron" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Cron</button>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code class="date">{{ .Info.LastRebuild.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Last Update <br>
|
||||||
|
<button class="remote-action pure-button pure-button-action" data-action="update" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Update</button>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code class="date">{{ .Info.LastUpdate.Format "2006-01-02T15:04:05Z07:00" }}</code><br>
|
||||||
|
(Automatic: <code>{{ .Instance.AutoBlindUpdateEnabled }}</code>)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1 pure-u-xl-2-5">
|
||||||
|
<!--
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Composer Status
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
???
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
???
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1-1">
|
||||||
|
<h2 id="wisski">WissKI Data</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1 pure-u-xl-1-2">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
Pathbuilders
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
{{ range $name, $xml := .Info.Pathbuilders }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>{{ $name }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code class="pathbuilder" data-name="{{ $name }}">{{ $xml }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-xl-1-2">
|
||||||
|
<div class="padding">
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
URI Prefixes
|
||||||
|
|
||||||
|
{{ if .Info.NoPrefixes }}
|
||||||
|
(excluded from resolver)
|
||||||
|
{{ end }}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{ range $index, $prefix := .Info.Prefixes }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>{{ $prefix }}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1-1">
|
||||||
|
<h2 id="snapshots">Snapshots</h2>
|
||||||
|
<p>
|
||||||
|
<button class="remote-action pure-button pure-button-action" data-action="snapshot" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Take a snapshot</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-u-1">
|
||||||
|
<table class="pure-table pure-table-bordered padding">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Path</th>
|
||||||
|
<th>Created</th>
|
||||||
|
<th>Packed</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{ range .Info.Snapshots }}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code class="path">{{ .Path }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code class="date">{{ .Created.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ .Packed }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{ end}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
@ -1,312 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Distillery Control Page - {{ .Info.Slug }}</title>
|
|
||||||
{{ CSS }}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<h1 id="top">Distillery Control Page - {{ .Info.Slug }}</h1>
|
|
||||||
<small>Generated at <code class="date">{{ .Time.Format "2006-01-02T15:04:05Z07:00" }}</code></small>
|
|
||||||
<p>
|
|
||||||
<a class="pure-button" href="/dis/index">Control</a> >
|
|
||||||
<a class="pure-button pure-button-primary" href="/dis/instance/{{ .Info.Slug }}">Instance</a>
|
|
||||||
</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<div class="pure-g">
|
|
||||||
<div class="pure-u-1-1">
|
|
||||||
<h2 id="overview">Info & Status</h2>
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-1 pure-u-xl-2-5">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Overview
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Slug
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ .Info.Slug }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
URL
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{{ .Info.URL }}" target="_blank" rel="noopener noreferrer">{{ .Info.URL }}</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Running
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ .Info.Running }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Locked
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ .Info.Locked }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-1 pure-u-xl-2-5">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Component Settings
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Directory
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code style="overflow: auto;">{{ .Instance.FilesystemBase }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
SQL DB
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ .Instance.SqlDatabase }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
SQL User
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ .Instance.SqlUsername }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
TS Repo
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ .Instance.GraphDBRepository }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
TS User
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code>{{ .Instance.GraphDBUsername }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1 pure-u-xl-2-5">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Build Status
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Created
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code class="date">{{ .Instance.Created.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Last Rebuild <br>
|
|
||||||
<button class="remote-action pure-button pure-button-action" data-action="rebuild" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Rebuild</button>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code class="date">{{ .Info.LastRebuild.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Last Cron<br>
|
|
||||||
<button class="remote-action pure-button pure-button-action" data-action="cron" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Cron</button>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code class="date">{{ .Info.LastRebuild.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
Last Update <br>
|
|
||||||
<button class="remote-action pure-button pure-button-action" data-action="update" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Update</button>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code class="date">{{ .Info.LastUpdate.Format "2006-01-02T15:04:05Z07:00" }}</code><br>
|
|
||||||
(Automatic: <code>{{ .Instance.AutoBlindUpdateEnabled }}</code>)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1 pure-u-xl-2-5">
|
|
||||||
<!--
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Composer Status
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
???
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
???
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1-1">
|
|
||||||
<h2 id="wisski">WissKI Data</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1 pure-u-xl-1-2">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2">
|
|
||||||
Pathbuilders
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
{{ range $name, $xml := .Info.Pathbuilders }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<code>{{ $name }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code class="pathbuilder" data-name="{{ $name }}">{{ $xml }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-1 pure-u-xl-1-2">
|
|
||||||
<div class="padding">
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="pure-table pure-table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
URI Prefixes
|
|
||||||
|
|
||||||
{{ if .Info.NoPrefixes }}
|
|
||||||
(excluded from resolver)
|
|
||||||
{{ end }}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{{ range $index, $prefix := .Info.Prefixes }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<code>{{ $prefix }}</code>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end }}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1-1">
|
|
||||||
<h2 id="snapshots">Snapshots</h2>
|
|
||||||
<p>
|
|
||||||
<button class="remote-action pure-button pure-button-action" data-action="snapshot" data-param="{{ .Instance.Slug }}" data-buffer="1000" data-force-reload="true">Take a snapshot</button>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pure-u-1">
|
|
||||||
<table class="pure-table pure-table-bordered padding">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Path</th>
|
|
||||||
<th>Created</th>
|
|
||||||
<th>Packed</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{{ range .Info.Snapshots }}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<code class="path">{{ .Path }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<code class="date">{{ .Created.Format "2006-01-02T15:04:05Z07:00" }}</code>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ .Packed }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{ end}}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{{ JS }}
|
|
||||||
</body>
|
|
||||||
|
|
@ -13,9 +13,12 @@ import (
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed "html/index.html"
|
//go:embed "html/info_index.html"
|
||||||
var indexTemplateStr string
|
var indexTemplateStr string
|
||||||
var indexTemplate = static.AssetsControlIndex.MustParse(indexTemplateStr)
|
var indexTemplate = static.AssetsControlIndex.MustParse(
|
||||||
|
base("info_index.html"),
|
||||||
|
indexTemplateStr,
|
||||||
|
)
|
||||||
|
|
||||||
type indexPageContext struct {
|
type indexPageContext struct {
|
||||||
Time time.Time
|
Time time.Time
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,12 @@ import (
|
||||||
"github.com/FAU-CDI/wisski-distillery/pkg/httpx"
|
"github.com/FAU-CDI/wisski-distillery/pkg/httpx"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed "html/instance.html"
|
//go:embed "html/info_instance.html"
|
||||||
var instanceTemplateString string
|
var instanceTemplateString string
|
||||||
var instanceTemplate = static.AssetsControlInstance.MustParse(instanceTemplateString)
|
var instanceTemplate = static.AssetsControlInstance.MustParse(
|
||||||
|
base("info_instance.html"),
|
||||||
|
instanceTemplateString,
|
||||||
|
)
|
||||||
|
|
||||||
type instancePageContext struct {
|
type instancePageContext struct {
|
||||||
Time time.Time
|
Time time.Time
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,11 @@ type Assets struct {
|
||||||
// MustParse parses a new template from the given source
|
// MustParse parses a new template from the given source
|
||||||
// and registers the Asset functions to it.
|
// and registers the Asset functions to it.
|
||||||
// See [Assets.RegisterFuncs].
|
// See [Assets.RegisterFuncs].
|
||||||
func (assets *Assets) MustParse(value string) *template.Template {
|
func (assets *Assets) MustParse(t *template.Template, value string) *template.Template {
|
||||||
return template.Must(assets.RegisterFuncs(template.New("")).Parse(value))
|
if t == nil {
|
||||||
|
t = template.New("")
|
||||||
|
}
|
||||||
|
return template.Must(assets.RegisterFuncs(t).Parse(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterFuncs registers three new template functions called "JS", "CSS" and "json".
|
// RegisterFuncs registers three new template functions called "JS", "CSS" and "json".
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue