From 49e7d30dd3f17a8b7ad07793680e6bee8ebef927 Mon Sep 17 00:00:00 2001 From: Vincent Boutour Date: Sat, 16 Jul 2022 17:52:30 +0200 Subject: [PATCH] refactor: Reducing cyclomatic complexity for new chunk part Signed-off-by: Vincent Boutour --- Dockerfile | 4 ++-- pkg/crud/{browser.go => browse.go} | 3 +-- pkg/crud/get.go | 6 +++--- pkg/crud/list.go | 3 +-- pkg/crud/post.go | 8 ++++---- pkg/crud/regenerate.go | 3 +-- pkg/crud/stats.go | 3 +-- pkg/crud/upload.go | 7 ++++--- pkg/crud/{chunk.go => upload_chunk.go} | 28 ++++++++++++++++---------- pkg/provider/interfaces.go | 5 ----- 10 files changed, 34 insertions(+), 36 deletions(-) rename pkg/crud/{browser.go => browse.go} (91%) rename pkg/crud/{chunk.go => upload_chunk.go} (86%) diff --git a/Dockerfile b/Dockerfile index 205ee266..299f65d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,14 +8,14 @@ ENTRYPOINT [ "/fibr" ] ARG VERSION ENV VERSION ${VERSION} -VOLUME /tmp - ARG TARGETOS ARG TARGETARCH COPY passwd /etc/passwd USER 995 +VOLUME /tmp + COPY mime.types /etc/mime.types COPY ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY release/fibr_${TARGETOS}_${TARGETARCH} /fibr diff --git a/pkg/crud/browser.go b/pkg/crud/browse.go similarity index 91% rename from pkg/crud/browser.go rename to pkg/crud/browse.go index b441592f..d1af98a3 100644 --- a/pkg/crud/browser.go +++ b/pkg/crud/browse.go @@ -14,8 +14,7 @@ import ( "github.com/ViBiOh/httputils/v4/pkg/renderer" ) -// Browser render file web view -func (a App) Browser(ctx context.Context, w http.ResponseWriter, request provider.Request, item absto.Item, message renderer.Message) (renderer.Page, error) { +func (a App) browse(ctx context.Context, w http.ResponseWriter, request provider.Request, item absto.Item, message renderer.Message) (renderer.Page, error) { var ( previous provider.RenderItem next provider.RenderItem diff --git a/pkg/crud/get.go b/pkg/crud/get.go index 1ec6a357..81dbdc6d 100644 --- a/pkg/crud/get.go +++ b/pkg/crud/get.go @@ -73,7 +73,7 @@ func (a App) handleFile(w http.ResponseWriter, r *http.Request, request provider go a.notify(provider.NewAccessEvent(item, r)) - return a.Browser(r.Context(), w, request, item, message) + return a.browse(r.Context(), w, request, item, message) } return renderer.Page{}, a.serveFile(w, r, item) @@ -100,7 +100,7 @@ func (a App) serveFile(w http.ResponseWriter, r *http.Request, item absto.Item) func (a App) handleDir(w http.ResponseWriter, r *http.Request, request provider.Request, item absto.Item, message renderer.Message) (renderer.Page, error) { if query.GetBool(r, "stats") { - return a.Stats(w, r, request, message) + return a.stats(w, r, request, message) } items, err := a.listFiles(r, request, item) @@ -135,7 +135,7 @@ func (a App) handleDir(w http.ResponseWriter, r *http.Request, request provider. return a.story(r, request, item, items) } - return a.List(r.Context(), request, message, item, items) + return a.list(r.Context(), request, message, item, items) } func (a App) listFiles(r *http.Request, request provider.Request, item absto.Item) (items []absto.Item, err error) { diff --git a/pkg/crud/list.go b/pkg/crud/list.go index c48056b5..5d3f73b0 100644 --- a/pkg/crud/list.go +++ b/pkg/crud/list.go @@ -36,8 +36,7 @@ func (a App) getCover(ctx context.Context, request provider.Request, files []abs return nil } -// List render directory web view of given dirPath -func (a App) List(ctx context.Context, request provider.Request, message renderer.Message, item absto.Item, files []absto.Item) (renderer.Page, error) { +func (a App) list(ctx context.Context, request provider.Request, message renderer.Message, item absto.Item, files []absto.Item) (renderer.Page, error) { ctx, end := tracer.StartSpan(ctx, a.tracer, "list") defer end() diff --git a/pkg/crud/post.go b/pkg/crud/post.go index 6db73022..b271d7a1 100644 --- a/pkg/crud/post.go +++ b/pkg/crud/post.go @@ -99,12 +99,12 @@ func (a App) handleMultipart(w http.ResponseWriter, r *http.Request, request pro if len(r.Header.Get("X-Chunk-Upload")) != 0 { if chunkNumber := r.Header.Get("X-Chunk-Number"); len(chunkNumber) != 0 { - a.UploadChunk(w, r, request, values["filename"], chunkNumber, file) + a.uploadChunk(w, r, request, values["filename"], chunkNumber, file) } else { - a.MergeChunk(w, r, request, values) + a.mergeChunk(w, r, request, values) } } else { - a.Upload(w, r, request, values, file) + a.upload(w, r, request, values, file) } } @@ -172,7 +172,7 @@ func (a App) handlePost(w http.ResponseWriter, r *http.Request, request provider case http.MethodDelete: a.Delete(w, r, request) case http.MethodTrace: - a.Regenerate(w, r, request) + a.regenerate(w, r, request) default: a.error(w, r, request, model.WrapMethodNotAllowed(fmt.Errorf("unknown method `%s` for %s", method, r.URL.Path))) } diff --git a/pkg/crud/regenerate.go b/pkg/crud/regenerate.go index 2d3ab1db..2405127b 100644 --- a/pkg/crud/regenerate.go +++ b/pkg/crud/regenerate.go @@ -11,8 +11,7 @@ import ( "github.com/ViBiOh/httputils/v4/pkg/renderer" ) -// Regenerate regenerate start of the folder -func (a App) Regenerate(w http.ResponseWriter, r *http.Request, request provider.Request) { +func (a App) regenerate(w http.ResponseWriter, r *http.Request, request provider.Request) { if !request.CanEdit { a.error(w, r, request, model.WrapForbidden(ErrNotAuthorized)) return diff --git a/pkg/crud/stats.go b/pkg/crud/stats.go index d6680096..bc63d6c0 100644 --- a/pkg/crud/stats.go +++ b/pkg/crud/stats.go @@ -15,8 +15,7 @@ type entry struct { Key string } -// Stats render stats of the current -func (a App) Stats(w http.ResponseWriter, r *http.Request, request provider.Request, message renderer.Message) (renderer.Page, error) { +func (a App) stats(w http.ResponseWriter, r *http.Request, request provider.Request, message renderer.Message) (renderer.Page, error) { pathname := request.Filepath() stats, err := a.computeStats(r.Context(), pathname) diff --git a/pkg/crud/upload.go b/pkg/crud/upload.go index a17fa9dd..e269483b 100644 --- a/pkg/crud/upload.go +++ b/pkg/crud/upload.go @@ -13,6 +13,7 @@ import ( "github.com/ViBiOh/httputils/v4/pkg/logger" "github.com/ViBiOh/httputils/v4/pkg/model" "github.com/ViBiOh/httputils/v4/pkg/renderer" + "github.com/ViBiOh/httputils/v4/pkg/tracer" ) func (a App) saveUploadedFile(ctx context.Context, request provider.Request, inputName, rawSize string, file *multipart.Part) (fileName string, err error) { @@ -76,14 +77,14 @@ func getUploadSize(rawSize string) (int64, error) { return size, nil } -// Upload saves form files to filesystem -func (a App) Upload(w http.ResponseWriter, r *http.Request, request provider.Request, values map[string]string, file *multipart.Part) { +func (a App) upload(w http.ResponseWriter, r *http.Request, request provider.Request, values map[string]string, file *multipart.Part) { if file == nil { a.error(w, r, request, model.WrapInvalid(errors.New("no file provided for save"))) return } - ctx := r.Context() + ctx, end := tracer.StartSpan(r.Context(), a.tracer, "upload") + defer end() filename, err := a.saveUploadedFile(ctx, request, values["filename"], values["size"], file) if err != nil { diff --git a/pkg/crud/chunk.go b/pkg/crud/upload_chunk.go similarity index 86% rename from pkg/crud/chunk.go rename to pkg/crud/upload_chunk.go index 39a339fb..6e54b62c 100644 --- a/pkg/crud/chunk.go +++ b/pkg/crud/upload_chunk.go @@ -14,10 +14,10 @@ import ( "github.com/ViBiOh/httputils/v4/pkg/logger" "github.com/ViBiOh/httputils/v4/pkg/model" "github.com/ViBiOh/httputils/v4/pkg/sha" + "github.com/ViBiOh/httputils/v4/pkg/tracer" ) -// UploadChunk save chunk file to a temp file -func (a App) UploadChunk(w http.ResponseWriter, r *http.Request, request provider.Request, fileName, chunkNumber string, file io.Reader) { +func (a App) uploadChunk(w http.ResponseWriter, r *http.Request, request provider.Request, fileName, chunkNumber string, file io.Reader) { if file == nil { a.error(w, r, request, model.WrapInvalid(errors.New("no file provided for save"))) return @@ -61,8 +61,10 @@ func (a App) UploadChunk(w http.ResponseWriter, r *http.Request, request provide w.WriteHeader(http.StatusAccepted) } -// MergeChunk merges previously uploaded chunks into one file and move it to final destination -func (a App) MergeChunk(w http.ResponseWriter, r *http.Request, request provider.Request, values map[string]string) { +func (a App) mergeChunk(w http.ResponseWriter, r *http.Request, request provider.Request, values map[string]string) { + ctx, end := tracer.StartSpan(r.Context(), a.tracer, "mergeChunk") + defer end() + var err error fileName := values["filename"] @@ -104,7 +106,7 @@ func (a App) MergeChunk(w http.ResponseWriter, r *http.Request, request provider logger.Error("unable to delete chunk folder `%s`: %s", tempFolder, err) } - a.postUpload(r.Context(), w, r, request, fileName, values) + a.postUpload(ctx, w, r, request, fileName, values) } func (a App) mergeChunkFiles(directory, destination string) error { @@ -127,7 +129,15 @@ func (a App) mergeChunkFiles(directory, destination string) error { } }() - if err = filepath.WalkDir(directory, func(path string, info fs.DirEntry, err error) error { + if err = browseChunkFiles(directory, destination, writer); err != nil { + return fmt.Errorf("unable to walk chunks in `%s`: %s", directory, err) + } + + return nil +} + +func browseChunkFiles(directory, destination string, writer io.Writer) error { + return filepath.WalkDir(directory, func(path string, info fs.DirEntry, err error) error { if err != nil { return err } @@ -152,9 +162,5 @@ func (a App) mergeChunkFiles(directory, destination string) error { } return nil - }); err != nil { - return fmt.Errorf("unable to walk chunks in `%s`: %s", directory, err) - } - - return nil + }) } diff --git a/pkg/provider/interfaces.go b/pkg/provider/interfaces.go index a3659c64..a3cf0548 100644 --- a/pkg/provider/interfaces.go +++ b/pkg/provider/interfaces.go @@ -2,7 +2,6 @@ package provider import ( "context" - "mime/multipart" "net/http" "time" @@ -18,13 +17,9 @@ import ( // Crud for user to interfact with filesystem //go:generate mockgen -destination ../mocks/crud.go -mock_names Crud=Crud -package mocks github.com/ViBiOh/fibr/pkg/provider Crud type Crud interface { - Start(done <-chan struct{}) - Browser(context.Context, http.ResponseWriter, Request, absto.Item, renderer.Message) (renderer.Page, error) - List(context.Context, Request, renderer.Message, absto.Item, []absto.Item) (renderer.Page, error) Get(http.ResponseWriter, *http.Request, Request) (renderer.Page, error) Post(http.ResponseWriter, *http.Request, Request) Create(http.ResponseWriter, *http.Request, Request) - Upload(http.ResponseWriter, *http.Request, Request, map[string]string, *multipart.Part) Rename(http.ResponseWriter, *http.Request, Request) Delete(http.ResponseWriter, *http.Request, Request) }