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

- - - - - - - - - - - - - - - - -
TotalRunningStopped
- {{ .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 @@ + +
+ + + + + + + + + + + + + + + +
TotalRunningStopped
+ {{ .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}),