From 14a7d936d22b4405bae59f14f51d2b00561943e2 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 1 Jan 2024 18:16:57 +0800 Subject: [PATCH] :sparkles: RoadSign Sideload now built-in web ui --- Dockerfile | 6 ++++ pkg/sideload/processes.go | 29 +++++++++++++++++++ pkg/sideload/server.go | 12 ++++++++ pkg/sideload/view/.dockerignore | 2 ++ .../components/data/sites-table-action.vue | 4 ++- .../view/src/components/data/sites-table.vue | 2 +- pkg/sign/pm.go | 4 +-- 7 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 pkg/sideload/processes.go create mode 100644 pkg/sideload/view/.dockerignore diff --git a/Dockerfile b/Dockerfile index ca9c27f..71cee3c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,14 @@ # Building Backend FROM golang:alpine as roadsign-server +RUN apk add nodejs npm + WORKDIR /source COPY . . +WORKDIR /source/pkg/sideload/view +RUN npm install +RUN npm run build +WORKDIR /source RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -buildvcs -o /dist ./pkg/cmd/server/main.go # Runtime diff --git a/pkg/sideload/processes.go b/pkg/sideload/processes.go new file mode 100644 index 0000000..6d4267e --- /dev/null +++ b/pkg/sideload/processes.go @@ -0,0 +1,29 @@ +package sideload + +import ( + "code.smartsheep.studio/goatworks/roadsign/pkg/sign" + "github.com/gofiber/fiber/v2" + "github.com/samber/lo" +) + +func getProcesses(c *fiber.Ctx) error { + processes := lo.FlatMap(sign.App.Sites, func(item *sign.SiteConfig, idx int) []*sign.ProcessInstance { + return item.Processes + }) + + return c.JSON(processes) +} + +func getProcessLog(c *fiber.Ctx) error { + processes := lo.FlatMap(sign.App.Sites, func(item *sign.SiteConfig, idx int) []*sign.ProcessInstance { + return item.Processes + }) + + if target, ok := lo.Find(processes, func(item *sign.ProcessInstance) bool { + return item.ID == c.Params("id") + }); !ok { + return fiber.NewError(fiber.StatusNotFound) + } else { + return c.SendString(target.GetLogs()) + } +} diff --git a/pkg/sideload/server.go b/pkg/sideload/server.go index d2f2646..ce7bcba 100644 --- a/pkg/sideload/server.go +++ b/pkg/sideload/server.go @@ -1,8 +1,11 @@ package sideload import ( + "code.smartsheep.studio/goatworks/roadsign/pkg/sideload/view" "fmt" + "github.com/gofiber/fiber/v2/middleware/filesystem" jsoniter "github.com/json-iterator/go" + "net/http" roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" "github.com/gofiber/fiber/v2" @@ -39,12 +42,21 @@ func InitSideload() *fiber.App { }, })) + app.Use("/", filesystem.New(filesystem.Config{ + Root: http.FS(view.FS), + PathPrefix: "dist", + Index: "index.html", + NotFoundFile: "index.html", + })) + cgi := app.Group("/cgi").Name("CGI") { cgi.All("/connectivity", responseConnectivity) cgi.Get("/statistics", getStatistics) cgi.Get("/sites", getSites) cgi.Get("/sites/cfg/:id", getSiteConfig) + cgi.Get("/processes", getProcesses) + cgi.Get("/processes/logs/:id", getProcessLog) } webhooks := app.Group("/webhooks").Name("WebHooks") diff --git a/pkg/sideload/view/.dockerignore b/pkg/sideload/view/.dockerignore new file mode 100644 index 0000000..246d599 --- /dev/null +++ b/pkg/sideload/view/.dockerignore @@ -0,0 +1,2 @@ +/dist +/node_modules \ No newline at end of file diff --git a/pkg/sideload/view/src/components/data/sites-table-action.vue b/pkg/sideload/view/src/components/data/sites-table-action.vue index c0d59b3..2443c9c 100644 --- a/pkg/sideload/view/src/components/data/sites-table-action.vue +++ b/pkg/sideload/view/src/components/data/sites-table-action.vue @@ -92,7 +92,7 @@ const submitting = ref(false) const publishing = ref(false) const editing = ref(false) -const config = ref(null) +const config = ref(undefined) async function editConfig() { const resp = await fetch(`/cgi/sites/cfg/${props.id}`) @@ -101,6 +101,8 @@ async function editConfig() { } async function syncConfig() { + if (config.value == null) return + let content try { content = yaml.load(config.value) diff --git a/pkg/sideload/view/src/components/data/sites-table.vue b/pkg/sideload/view/src/components/data/sites-table.vue index 335524f..cffd6d2 100644 --- a/pkg/sideload/view/src/components/data/sites-table.vue +++ b/pkg/sideload/view/src/components/data/sites-table.vue @@ -21,7 +21,7 @@ import SitesTableExpand from "@/components/data/sites-table-expand.vue" import SitesTableAction from "@/components/data/sites-table-action.vue" import SitesTableAdd from "@/components/data/sites-table-add.vue" -const columns = [ +const columns: any[] = [ { type: "expand", renderExpand(row: any) { diff --git a/pkg/sign/pm.go b/pkg/sign/pm.go index cc60d20..7ca620d 100644 --- a/pkg/sign/pm.go +++ b/pkg/sign/pm.go @@ -32,7 +32,6 @@ type ProcessInstance struct { Logger strings.Builder `json:"-"` Status ProcessStatus `json:"status"` - Logs string `json:"logs"` } func (v *ProcessInstance) BootProcess() error { @@ -117,8 +116,7 @@ func (v *ProcessInstance) StopProcess() error { } func (v *ProcessInstance) GetLogs() string { - v.Logs = v.Logger.String() - return v.Logs + return v.Logger.String() } func (v *RoadApp) PreheatProcesses(callbacks ...func(total int, success int)) {