admin interface: Introduce seperate instance page
This commit is contained in:
parent
a420155c7c
commit
34d1f557a0
7 changed files with 83 additions and 50 deletions
|
|
@ -85,6 +85,12 @@ func (admin *Admin) HandleRoute(ctx context.Context, route string) (handler http
|
||||||
router.Handler(http.MethodGet, route, index)
|
router.Handler(http.MethodGet, route, index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add a handler for the instances page
|
||||||
|
{
|
||||||
|
instances := admin.instances(ctx)
|
||||||
|
router.Handler(http.MethodGet, route+"instance/", instances)
|
||||||
|
}
|
||||||
|
|
||||||
// add a handler for the user page
|
// add a handler for the user page
|
||||||
{
|
{
|
||||||
users := admin.users(ctx)
|
users := admin.users(ctx)
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ func (admin *Admin) components(ctx context.Context) http.Handler {
|
||||||
admin.Dependencies.Templating,
|
admin.Dependencies.Templating,
|
||||||
templating.Crumbs(
|
templating.Crumbs(
|
||||||
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
||||||
|
component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
|
||||||
component.MenuItem{Title: "Components", Path: "/admin/components/"},
|
component.MenuItem{Title: "Components", Path: "/admin/components/"},
|
||||||
),
|
),
|
||||||
templating.Title("Components"),
|
templating.Title("Components"),
|
||||||
|
|
@ -51,6 +52,7 @@ func (admin *Admin) ingredients(ctx context.Context) http.Handler {
|
||||||
admin.Dependencies.Templating,
|
admin.Dependencies.Templating,
|
||||||
templating.Crumbs(
|
templating.Crumbs(
|
||||||
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
||||||
|
component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
|
||||||
component.DummyMenuItem,
|
component.DummyMenuItem,
|
||||||
component.DummyMenuItem,
|
component.DummyMenuItem,
|
||||||
),
|
),
|
||||||
|
|
@ -68,8 +70,8 @@ func (admin *Admin) ingredients(ctx context.Context) http.Handler {
|
||||||
return ac, nil, err
|
return ac, nil, err
|
||||||
}
|
}
|
||||||
funcs = []templating.FlagFunc{
|
funcs = []templating.FlagFunc{
|
||||||
templating.ReplaceCrumb(1, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
|
templating.ReplaceCrumb(2, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
|
||||||
templating.ReplaceCrumb(2, component.MenuItem{Title: "Ingredients", Path: template.URL("/admin/instance/" + slug + "/ingredients/")}),
|
templating.ReplaceCrumb(3, component.MenuItem{Title: "Ingredients", Path: template.URL("/admin/instance/" + slug + "/ingredients/")}),
|
||||||
templating.Title(instance.Name() + " - Ingredients"),
|
templating.Title(instance.Name() + " - Ingredients"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ func (admin *Admin) grants(ctx context.Context) http.Handler {
|
||||||
admin.Dependencies.Templating,
|
admin.Dependencies.Templating,
|
||||||
templating.Crumbs(
|
templating.Crumbs(
|
||||||
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
||||||
|
component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
|
||||||
component.DummyMenuItem,
|
component.DummyMenuItem,
|
||||||
component.DummyMenuItem,
|
component.DummyMenuItem,
|
||||||
),
|
),
|
||||||
|
|
@ -136,8 +137,8 @@ func (gc *grantsContext) use(r *http.Request, slug string, admin *Admin) (funcs
|
||||||
|
|
||||||
// replace the functions
|
// replace the functions
|
||||||
funcs = []templating.FlagFunc{
|
funcs = []templating.FlagFunc{
|
||||||
templating.ReplaceCrumb(1, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
|
templating.ReplaceCrumb(2, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
|
||||||
templating.ReplaceCrumb(2, component.MenuItem{Title: "Grants", Path: template.URL("/admin/instance/" + slug + "/grants/")}),
|
templating.ReplaceCrumb(3, component.MenuItem{Title: "Grants", Path: template.URL("/admin/instance/" + slug + "/grants/")}),
|
||||||
templating.Title(gc.Instance.Slug + " - Grants"),
|
templating.Title(gc.Instance.Slug + " - Grants"),
|
||||||
}
|
}
|
||||||
return funcs, nil
|
return funcs, nil
|
||||||
|
|
|
||||||
|
|
@ -208,48 +208,3 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</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="/admin/instance/{{.Slug}}">Details</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
43
internal/dis/component/server/admin/html/instances.html
Normal file
43
internal/dis/component/server/admin/html/instances.html
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
|
||||||
|
<div class="pure-u-1">
|
||||||
|
<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-2-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="/admin/instance/{{.Slug}}">Details</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
|
@ -87,6 +87,15 @@ var indexTemplate = templating.Parse[indexContext](
|
||||||
templating.Assets(assets.AssetsAdmin),
|
templating.Assets(assets.AssetsAdmin),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed "html/instances.html"
|
||||||
|
var instancesHTML []byte
|
||||||
|
var instancesTemplate = templating.Parse[indexContext](
|
||||||
|
"instances.html", instancesHTML, nil,
|
||||||
|
|
||||||
|
templating.Title("Instances"),
|
||||||
|
templating.Assets(assets.AssetsAdmin),
|
||||||
|
)
|
||||||
|
|
||||||
type indexContext struct {
|
type indexContext struct {
|
||||||
templating.RuntimeFlags
|
templating.RuntimeFlags
|
||||||
|
|
||||||
|
|
@ -102,10 +111,26 @@ func (admin *Admin) index(ctx context.Context) http.Handler {
|
||||||
),
|
),
|
||||||
templating.Actions(
|
templating.Actions(
|
||||||
component.MenuItem{Title: "Users", Path: "/admin/users/"},
|
component.MenuItem{Title: "Users", Path: "/admin/users/"},
|
||||||
|
component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
|
||||||
component.MenuItem{Title: "Components", Path: "/admin/components/", Priority: component.SmallButton},
|
component.MenuItem{Title: "Components", Path: "/admin/components/", Priority: component.SmallButton},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return tpl.HTMLHandler(func(r *http.Request) (idx indexContext, err error) {
|
||||||
|
idx.Distillery, idx.Instances, err = admin.Status(r.Context(), false)
|
||||||
|
return
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (admin *Admin) instances(ctx context.Context) http.Handler {
|
||||||
|
tpl := instancesTemplate.Prepare(
|
||||||
|
admin.Dependencies.Templating,
|
||||||
|
templating.Crumbs(
|
||||||
|
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
||||||
|
component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
return tpl.HTMLHandler(func(r *http.Request) (idx indexContext, err error) {
|
return tpl.HTMLHandler(func(r *http.Request) (idx indexContext, err error) {
|
||||||
idx.Distillery, idx.Instances, err = admin.Status(r.Context(), true)
|
idx.Distillery, idx.Instances, err = admin.Status(r.Context(), true)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ func (admin *Admin) instance(ctx context.Context) http.Handler {
|
||||||
admin.Dependencies.Templating,
|
admin.Dependencies.Templating,
|
||||||
templating.Crumbs(
|
templating.Crumbs(
|
||||||
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
component.MenuItem{Title: "Admin", Path: "/admin/"},
|
||||||
|
component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
|
||||||
component.DummyMenuItem,
|
component.DummyMenuItem,
|
||||||
),
|
),
|
||||||
templating.Actions(
|
templating.Actions(
|
||||||
|
|
@ -64,7 +65,7 @@ func (admin *Admin) instance(ctx context.Context) http.Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
funcs = []templating.FlagFunc{
|
funcs = []templating.FlagFunc{
|
||||||
templating.ReplaceCrumb(1, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
|
templating.ReplaceCrumb(2, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
|
||||||
templating.ReplaceAction(0, component.MenuItem{Title: "Grants", Path: template.URL("/admin/grants/" + slug)}),
|
templating.ReplaceAction(0, component.MenuItem{Title: "Grants", Path: template.URL("/admin/grants/" + slug)}),
|
||||||
templating.ReplaceAction(1, component.MenuItem{Title: "Ingredients", Path: template.URL("/admin/ingredients/" + slug), Priority: component.SmallButton}),
|
templating.ReplaceAction(1, component.MenuItem{Title: "Ingredients", Path: template.URL("/admin/ingredients/" + slug), Priority: component.SmallButton}),
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue