diff --git a/internal/dis/component/server/admin/admin.go b/internal/dis/component/server/admin/admin.go
index de440c5..e85091b 100644
--- a/internal/dis/component/server/admin/admin.go
+++ b/internal/dis/component/server/admin/admin.go
@@ -85,6 +85,12 @@ func (admin *Admin) HandleRoute(ctx context.Context, route string) (handler http
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
{
users := admin.users(ctx)
diff --git a/internal/dis/component/server/admin/components.go b/internal/dis/component/server/admin/components.go
index 04a2dca..4808fc4 100644
--- a/internal/dis/component/server/admin/components.go
+++ b/internal/dis/component/server/admin/components.go
@@ -35,6 +35,7 @@ func (admin *Admin) components(ctx context.Context) http.Handler {
admin.Dependencies.Templating,
templating.Crumbs(
component.MenuItem{Title: "Admin", Path: "/admin/"},
+ component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
component.MenuItem{Title: "Components", Path: "/admin/components/"},
),
templating.Title("Components"),
@@ -51,6 +52,7 @@ func (admin *Admin) ingredients(ctx context.Context) http.Handler {
admin.Dependencies.Templating,
templating.Crumbs(
component.MenuItem{Title: "Admin", Path: "/admin/"},
+ component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
component.DummyMenuItem,
component.DummyMenuItem,
),
@@ -68,8 +70,8 @@ func (admin *Admin) ingredients(ctx context.Context) http.Handler {
return ac, nil, err
}
funcs = []templating.FlagFunc{
- templating.ReplaceCrumb(1, 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(2, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
+ templating.ReplaceCrumb(3, component.MenuItem{Title: "Ingredients", Path: template.URL("/admin/instance/" + slug + "/ingredients/")}),
templating.Title(instance.Name() + " - Ingredients"),
}
diff --git a/internal/dis/component/server/admin/grants.go b/internal/dis/component/server/admin/grants.go
index cbc237f..23d200f 100644
--- a/internal/dis/component/server/admin/grants.go
+++ b/internal/dis/component/server/admin/grants.go
@@ -46,6 +46,7 @@ func (admin *Admin) grants(ctx context.Context) http.Handler {
admin.Dependencies.Templating,
templating.Crumbs(
component.MenuItem{Title: "Admin", Path: "/admin/"},
+ component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
component.DummyMenuItem,
component.DummyMenuItem,
),
@@ -136,8 +137,8 @@ func (gc *grantsContext) use(r *http.Request, slug string, admin *Admin) (funcs
// replace the functions
funcs = []templating.FlagFunc{
- templating.ReplaceCrumb(1, 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(2, component.MenuItem{Title: "Instance", Path: template.URL("/admin/instance/" + slug)}),
+ templating.ReplaceCrumb(3, component.MenuItem{Title: "Grants", Path: template.URL("/admin/instance/" + slug + "/grants/")}),
templating.Title(gc.Instance.Slug + " - Grants"),
}
return funcs, nil
diff --git a/internal/dis/component/server/admin/html/index.html b/internal/dis/component/server/admin/html/index.html
index 3a831d1..458e02f 100644
--- a/internal/dis/component/server/admin/html/index.html
+++ b/internal/dis/component/server/admin/html/index.html
@@ -208,48 +208,3 @@
-
-
-
Instances
-
-
-
-
- | Total |
- Running |
- Stopped |
-
-
-
-
- |
- {{ .TotalCount }}
- |
-
- {{ .RunningCount }}
- |
-
- {{ .StoppedCount }}
- |
-
-
-
-
-
-
-
-{{range .Instances}}
-
-
-
- {{.Slug}}
- {{ if not .Running }} not running{{ end }}
-
-
- {{.URL}}
-
- Details
-
-
-
-{{end}}
\ No newline at end of file
diff --git a/internal/dis/component/server/admin/html/instances.html b/internal/dis/component/server/admin/html/instances.html
new file mode 100644
index 0000000..b6a3587
--- /dev/null
+++ b/internal/dis/component/server/admin/html/instances.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+ | Total |
+ Running |
+ Stopped |
+
+
+
+
+ |
+ {{ .TotalCount }}
+ |
+
+ {{ .RunningCount }}
+ |
+
+ {{ .StoppedCount }}
+ |
+
+
+
+
+
+
+
+{{range .Instances}}
+
+
+
+ {{.Slug}}
+ {{ if not .Running }} not running{{ end }}
+
+
+ {{.URL}}
+
+ Details
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/internal/dis/component/server/admin/index.go b/internal/dis/component/server/admin/index.go
index 76fcba4..7026f52 100644
--- a/internal/dis/component/server/admin/index.go
+++ b/internal/dis/component/server/admin/index.go
@@ -87,6 +87,15 @@ var indexTemplate = templating.Parse[indexContext](
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 {
templating.RuntimeFlags
@@ -102,10 +111,26 @@ func (admin *Admin) index(ctx context.Context) http.Handler {
),
templating.Actions(
component.MenuItem{Title: "Users", Path: "/admin/users/"},
+ component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
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) {
idx.Distillery, idx.Instances, err = admin.Status(r.Context(), true)
return
diff --git a/internal/dis/component/server/admin/instance.go b/internal/dis/component/server/admin/instance.go
index c784760..429db76 100644
--- a/internal/dis/component/server/admin/instance.go
+++ b/internal/dis/component/server/admin/instance.go
@@ -36,6 +36,7 @@ func (admin *Admin) instance(ctx context.Context) http.Handler {
admin.Dependencies.Templating,
templating.Crumbs(
component.MenuItem{Title: "Admin", Path: "/admin/"},
+ component.MenuItem{Title: "Instances", Path: "/admin/instance/"},
component.DummyMenuItem,
),
templating.Actions(
@@ -64,7 +65,7 @@ func (admin *Admin) instance(ctx context.Context) http.Handler {
}
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(1, component.MenuItem{Title: "Ingredients", Path: template.URL("/admin/ingredients/" + slug), Priority: component.SmallButton}),