mirror of
https://github.com/cuigh/swirl
synced 2025-06-26 18:16:50 +00:00
Add container logs page
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/cuigh/auxo/net/web"
|
||||
"github.com/cuigh/auxo/util/cast"
|
||||
"github.com/cuigh/swirl/biz/docker"
|
||||
@@ -12,51 +14,95 @@ type ContainerController struct {
|
||||
List web.HandlerFunc `path:"/" name:"container.list" authorize:"!" desc:"container list page"`
|
||||
Detail web.HandlerFunc `path:"/:id/detail" name:"container.detail" authorize:"!" desc:"container detail page"`
|
||||
Raw web.HandlerFunc `path:"/:id/raw" name:"container.raw" authorize:"!" desc:"container raw page"`
|
||||
Logs web.HandlerFunc `path:"/:id/logs" name:"container.logs" authorize:"!" desc:"container logs page"`
|
||||
Delete web.HandlerFunc `path:"/delete" method:"post" name:"container.delete" authorize:"!" desc:"delete container"`
|
||||
}
|
||||
|
||||
func Container() (c *ContainerController) {
|
||||
c = &ContainerController{}
|
||||
|
||||
c.List = func(ctx web.Context) error {
|
||||
name := ctx.Q("name")
|
||||
page := cast.ToIntD(ctx.Q("page"), 1)
|
||||
containers, totalCount, err := docker.ContainerList(name, page, model.PageSize)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m := newPagerModel(ctx, totalCount, model.PageSize, page).
|
||||
Add("Name", name).
|
||||
Add("Containers", containers)
|
||||
return ctx.Render("container/list", m)
|
||||
return &ContainerController{
|
||||
List: containerList,
|
||||
Detail: containerDetail,
|
||||
Raw: containerRaw,
|
||||
Logs: containerLogs,
|
||||
Delete: containerDelete,
|
||||
}
|
||||
|
||||
c.Detail = func(ctx web.Context) error {
|
||||
id := ctx.P("id")
|
||||
container, err := docker.ContainerInspect(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m := newModel(ctx).Add("Container", container)
|
||||
return ctx.Render("container/detail", m)
|
||||
}
|
||||
|
||||
c.Raw = func(ctx web.Context) error {
|
||||
id := ctx.P("id")
|
||||
container, raw, err := docker.ContainerInspectRaw(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
j, err := misc.JSONIndent(raw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m := newModel(ctx).Add("Container", container).Add("Raw", j)
|
||||
return ctx.Render("container/raw", m)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func containerList(ctx web.Context) error {
|
||||
args := &model.ContainerListArgs{}
|
||||
err := ctx.Bind(args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
args.PageSize = model.PageSize
|
||||
if args.PageIndex == 0 {
|
||||
args.PageIndex = 1
|
||||
}
|
||||
|
||||
containers, totalCount, err := docker.ContainerList(args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m := newPagerModel(ctx, totalCount, model.PageSize, args.PageIndex).
|
||||
Add("Name", args.Name).
|
||||
Add("Filter", args.Filter).
|
||||
Add("Containers", containers)
|
||||
return ctx.Render("container/list", m)
|
||||
}
|
||||
|
||||
func containerDetail(ctx web.Context) error {
|
||||
id := ctx.P("id")
|
||||
container, err := docker.ContainerInspect(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m := newModel(ctx).Add("Container", container)
|
||||
return ctx.Render("container/detail", m)
|
||||
}
|
||||
|
||||
func containerRaw(ctx web.Context) error {
|
||||
id := ctx.P("id")
|
||||
container, raw, err := docker.ContainerInspectRaw(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
j, err := misc.JSONIndent(raw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m := newModel(ctx).Add("Container", container).Add("Raw", j)
|
||||
return ctx.Render("container/raw", m)
|
||||
}
|
||||
|
||||
func containerLogs(ctx web.Context) error {
|
||||
id := ctx.P("id")
|
||||
container, _, err := docker.ContainerInspectRaw(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
line := cast.ToIntD(ctx.Q("line"), 500)
|
||||
timestamps := cast.ToBoolD(ctx.Q("timestamps"), false)
|
||||
stdout, stderr, err := docker.ContainerLogs(id, line, timestamps)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m := newModel(ctx).Add("Container", container).Add("Line", line).Add("Timestamps", timestamps).
|
||||
Add("Stdout", stdout.String()).Add("Stderr", stderr.String())
|
||||
return ctx.Render("container/logs", m)
|
||||
}
|
||||
|
||||
func containerDelete(ctx web.Context) error {
|
||||
ids := strings.Split(ctx.F("ids"), ",")
|
||||
for _, id := range ids {
|
||||
if err := docker.ContainerRemove(id); err != nil {
|
||||
return ajaxResult(ctx, err)
|
||||
}
|
||||
}
|
||||
return ajaxSuccess(ctx, nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user