From cd0524e77e24fabb5ce9e278b78cae7aa4b1ca78 Mon Sep 17 00:00:00 2001 From: Brad Rydzewski Date: Thu, 18 Jan 2018 09:26:28 -0800 Subject: [PATCH 1/2] endpoint to purge build logs --- router/router.go | 1 + server/build.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/router/router.go b/router/router.go index 64dd99684..ac515c042 100644 --- a/router/router.go +++ b/router/router.go @@ -103,6 +103,7 @@ func Load(mux *httptreemux.ContextMux, middleware ...gin.HandlerFunc) http.Handl repo.POST("/builds/:number/approve", session.MustPush, server.PostApproval) repo.POST("/builds/:number/decline", session.MustPush, server.PostDecline) repo.DELETE("/builds/:number/:job", session.MustPush, server.DeleteBuild) + repo.DELETE("/logs/:number", session.MustPush, server.DeleteBuildLogs) } badges := e.Group("/api/badges/:owner/:name") diff --git a/server/build.go b/server/build.go index 43d391d81..f88bdae6d 100644 --- a/server/build.go +++ b/server/build.go @@ -1,6 +1,7 @@ package server import ( + "bytes" "context" "encoding/json" "fmt" @@ -663,3 +664,52 @@ func PostBuild(c *gin.Context) { Config.Services.Queue.Push(context.Background(), task) } } + +// +/// +// + +func DeleteBuildLogs(c *gin.Context) { + repo := session.Repo(c) + num, _ := strconv.Atoi(c.Params.ByName("number")) + + build, err := store.GetBuildNumber(c, repo, num) + if err != nil { + c.AbortWithError(404, err) + return + } + + procs, err := store.FromContext(c).ProcList(build) + if err != nil { + c.AbortWithError(404, err) + return + } + + switch build.Status { + case model.StatusRunning, model.StatusPending: + c.String(400, "Cannot delete logs for a pending or running build") + return + } + + for _, proc := range procs { + buf := bytes.NewBufferString(fmt.Sprintf(deleteStr, proc.Name)) + lerr := store.FromContext(c).LogSave(proc, buf) + if lerr != nil { + err = lerr + } + } + if err != nil { + c.String(400, "There was a problem deleting your logs. %s", err) + return + } + + c.String(204, "") +} + +var deleteStr = `[ + { + "proc": %q, + "pos": 0, + "out": "LOGS PURGED\n" + } +]` From 8771fb53af982096b1021c31a28f337d643320f7 Mon Sep 17 00:00:00 2001 From: Brad Rydzewski Date: Thu, 18 Jan 2018 09:30:41 -0800 Subject: [PATCH 2/2] purged log placeholder to include username --- server/build.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/build.go b/server/build.go index f88bdae6d..9a0199729 100644 --- a/server/build.go +++ b/server/build.go @@ -671,6 +671,7 @@ func PostBuild(c *gin.Context) { func DeleteBuildLogs(c *gin.Context) { repo := session.Repo(c) + user := session.User(c) num, _ := strconv.Atoi(c.Params.ByName("number")) build, err := store.GetBuildNumber(c, repo, num) @@ -692,7 +693,7 @@ func DeleteBuildLogs(c *gin.Context) { } for _, proc := range procs { - buf := bytes.NewBufferString(fmt.Sprintf(deleteStr, proc.Name)) + buf := bytes.NewBufferString(fmt.Sprintf(deleteStr, proc.Name, user.Login)) lerr := store.FromContext(c).LogSave(proc, buf) if lerr != nil { err = lerr @@ -710,6 +711,6 @@ var deleteStr = `[ { "proc": %q, "pos": 0, - "out": "LOGS PURGED\n" + "out": "logs purged by %s\n" } ]`