diff --git a/cmd/proxy/actions/app.go b/cmd/proxy/actions/app.go index 01b9f08b..18a6aac8 100644 --- a/cmd/proxy/actions/app.go +++ b/cmd/proxy/actions/app.go @@ -2,7 +2,6 @@ package actions import ( "fmt" - "github.com/spf13/afero" "github.com/gobuffalo/buffalo" "github.com/gobuffalo/buffalo/middleware" @@ -81,8 +80,6 @@ func App() (*buffalo.App, error) { return nil, err } - fetcher := module.NewGoGetFetcher(env.GoBinPath(), afero.NewOsFs()) - worker, err := getWorker(store, mf) if err != nil { return nil, err @@ -129,7 +126,7 @@ func App() (*buffalo.App, error) { } app.Use(T.Middleware()) - if err := addProxyRoutes(app, store, fetcher, mf, lggr); err != nil { + if err := addProxyRoutes(app, store, mf, lggr); err != nil { err = fmt.Errorf("error adding proxy routes (%s)", err) return nil, err } diff --git a/cmd/proxy/actions/app_proxy.go b/cmd/proxy/actions/app_proxy.go index 93af6972..0b805900 100644 --- a/cmd/proxy/actions/app_proxy.go +++ b/cmd/proxy/actions/app_proxy.go @@ -12,7 +12,6 @@ import ( func addProxyRoutes( app *buffalo.App, storage storage.Backend, - fetcher module.Fetcher, mf *module.Filter, lggr *log.Logger, ) error { diff --git a/pkg/download/doc.go b/pkg/download/doc.go index 8c701ce9..7d19c615 100644 --- a/pkg/download/doc.go +++ b/pkg/download/doc.go @@ -4,25 +4,3 @@ // can share the same download protocol // implementation. package download - -import ( - "github.com/gobuffalo/buffalo" - "github.com/gomods/athens/pkg/log" - "github.com/gomods/athens/pkg/paths" - "github.com/gomods/athens/pkg/storage" - "github.com/pkg/errors" -) - -func getModuleVersion(c buffalo.Context, lggr *log.Logger, dp Protocol) (string, string, *storage.Version, error) { - params, err := paths.GetAllParams(c) - if err != nil { - lggr.SystemErr(err) - panic(err) - } - - versionInfo, err := dp.Version(c, params.Module, params.Version) - if err != nil { - return "", "", nil, errors.WithStack(err) - } - return params.Module, params.Version, versionInfo, nil -} diff --git a/pkg/download/download.go b/pkg/download/download.go index 4f1d6e38..45f8572d 100644 --- a/pkg/download/download.go +++ b/pkg/download/download.go @@ -74,7 +74,13 @@ func (p *protocol) fillCache(ctx context.Context, mod, ver string) (*storage.Ver } func (p *protocol) Latest(ctx context.Context, mod string) (*storage.RevInfo, error) { - return p.dp.Latest(ctx, mod) + const op errors.Op = "protocol.Latest" + info, err := p.dp.Latest(ctx, mod) + if err != nil { + return nil, errors.E(op, err) + } + + return info, nil } func (p *protocol) GoMod(ctx context.Context, mod, ver string) ([]byte, error) { @@ -104,5 +110,11 @@ func (p *protocol) Zip(ctx context.Context, mod, ver string) (io.ReadCloser, err } func (p *protocol) Version(ctx context.Context, mod, ver string) (*storage.Version, error) { - return p.dp.Version(ctx, mod, ver) + const op errors.Op = "protocol.Version" + v, err := p.dp.Version(ctx, mod, ver) + if err != nil { + return nil, errors.E(op, err) + } + + return v, nil } diff --git a/pkg/download/get_module_versions.go b/pkg/download/get_module_versions.go new file mode 100644 index 00000000..d8b22241 --- /dev/null +++ b/pkg/download/get_module_versions.go @@ -0,0 +1,25 @@ +package download + +import ( + "github.com/gobuffalo/buffalo" + "github.com/gomods/athens/pkg/errors" + "github.com/gomods/athens/pkg/log" + "github.com/gomods/athens/pkg/paths" + "github.com/gomods/athens/pkg/storage" +) + +func getModuleVersion(c buffalo.Context, lggr *log.Logger, dp Protocol) (string, string, *storage.Version, error) { + const op errors.Op = "download.getModuleVersion" + params, err := paths.GetAllParams(c) + if err != nil { + // if there is an error, then the Buffalo handler paths + // are not set up well. + panic(err) + } + + versionInfo, err := dp.Version(c, params.Module, params.Version) + if err != nil { + return "", "", nil, errors.E(op, err) + } + return params.Module, params.Version, versionInfo, nil +} diff --git a/pkg/download/latest.go b/pkg/download/latest.go index 91d59204..a15ed0a3 100644 --- a/pkg/download/latest.go +++ b/pkg/download/latest.go @@ -16,18 +16,20 @@ const PathLatest = "/{module:.+}/@latest" // LatestHandler implements GET baseURL/module/@latest func LatestHandler(dp Protocol, lggr *log.Logger, eng *render.Engine) func(c buffalo.Context) error { + const op errors.Op = "download.LatestHandler" return func(c buffalo.Context) error { sp := buffet.SpanFromContext(c) sp.SetOperationName("latestHandler") + defer sp.Finish() mod, err := paths.GetModule(c) if err != nil { - lggr.SystemErr(err) + lggr.SystemErr(errors.E(op, err)) return c.Render(500, nil) } info, err := dp.Latest(c, mod) if err != nil { - lggr.SystemErr(err) + lggr.SystemErr(errors.E(op, err)) return c.Render(errors.Kind(err), eng.JSON(errors.KindText(err))) } diff --git a/pkg/download/list.go b/pkg/download/list.go index 328fc9bb..ef3154b1 100644 --- a/pkg/download/list.go +++ b/pkg/download/list.go @@ -17,18 +17,20 @@ const PathList = "/{module:.+}/@v/list" // ListHandler implements GET baseURL/module/@v/list func ListHandler(dp Protocol, lggr *log.Logger, eng *render.Engine) func(c buffalo.Context) error { + const op errors.Op = "download.ListHandler" return func(c buffalo.Context) error { sp := buffet.SpanFromContext(c) sp.SetOperationName("listHandler") + defer sp.Finish() mod, err := paths.GetModule(c) if err != nil { - lggr.SystemErr(err) + lggr.SystemErr(errors.E(op, err)) return c.Render(500, nil) } versions, err := dp.List(c, mod) if err != nil { - lggr.SystemErr(err) + lggr.SystemErr(errors.E(op, err)) return c.Render(errors.Kind(err), eng.JSON(errors.KindText(err))) } diff --git a/pkg/download/version_info.go b/pkg/download/version_info.go index 128e8f08..9e157574 100644 --- a/pkg/download/version_info.go +++ b/pkg/download/version_info.go @@ -19,17 +19,16 @@ const PathVersionInfo = "/{module:.+}/@v/{version}.info" func VersionInfoHandler(dp Protocol, lggr *log.Logger, eng *render.Engine) buffalo.Handler { return func(c buffalo.Context) error { const op errors.Op = "download.versionInfoHandler" - sp := buffet.SpanFromContext(c) sp.SetOperationName("versionInfoHandler") - + defer sp.Finish() mod, ver, verInfo, err := getModuleVersion(c, lggr, dp) if err != nil { err := errors.E(op, errors.M(mod), errors.V(ver), err) lggr.SystemErr(err) c.Render(http.StatusInternalServerError, nil) } - + verInfo.Zip.Close() var revInfo storage.RevInfo if err := json.Unmarshal(verInfo.Info, &revInfo); err != nil { return err diff --git a/pkg/download/version_module.go b/pkg/download/version_module.go index 5f457b77..1da25067 100644 --- a/pkg/download/version_module.go +++ b/pkg/download/version_module.go @@ -17,19 +17,25 @@ const PathVersionModule = "/{module:.+}/@v/{version}.mod" func VersionModuleHandler(dp Protocol, lggr *log.Logger, eng *render.Engine) buffalo.Handler { return func(c buffalo.Context) error { const op errors.Op = "download.VersionModuleHandler" - sp := buffet.SpanFromContext(c) sp.SetOperationName("versionModuleHandler") - + defer sp.Finish() mod, ver, verInfo, err := getModuleVersion(c, lggr, dp) if err != nil { - err := errors.E(op, errors.M(mod), errors.V(ver), err) + err = errors.E(op, errors.M(mod), errors.V(ver), err) + lggr.SystemErr(err) + c.Render(errors.Kind(err), nil) + } + verInfo.Zip.Close() + status := http.StatusOK + _, err = c.Response().Write(verInfo.Mod) + if err != nil { + err = errors.E(op, errors.M(mod), errors.V(ver), err) + status = http.StatusInternalServerError lggr.SystemErr(err) - c.Render(http.StatusInternalServerError, nil) } - c.Response().WriteHeader(http.StatusOK) - _, err = c.Response().Write(verInfo.Mod) - return err + c.Response().WriteHeader(status) + return nil } } diff --git a/pkg/download/version_zip.go b/pkg/download/version_zip.go index 10ccf3a2..81c633f9 100644 --- a/pkg/download/version_zip.go +++ b/pkg/download/version_zip.go @@ -21,28 +21,21 @@ func VersionZipHandler(dp Protocol, lggr *log.Logger, eng *render.Engine) buffal return func(c buffalo.Context) error { sp := buffet.SpanFromContext(c) sp.SetOperationName("versionZipHandler") - - lggr.Println("===getModuleVersion") + defer sp.Finish() mod, ver, verInfo, err := getModuleVersion(c, lggr, dp) if err != nil { - lggr.Println("===carolyn found an error", err) - err := errors.E(op, errors.M(mod), errors.V(ver), err) lggr.SystemErr(err) return c.Render(http.StatusInternalServerError, nil) } - lggr.Println("===Copy") status := http.StatusOK _, err = io.Copy(c.Response(), verInfo.Zip) if err != nil { - lggr.Println("===Copy errored out", err) status = http.StatusInternalServerError lggr.SystemErr(errors.E(op, errors.M(mod), errors.V(ver), err)) } - lggr.Println("===writeheader") - c.Response().WriteHeader(status) return nil } diff --git a/pkg/module/go_get_fetcher.go b/pkg/module/go_get_fetcher.go index b97e6db8..08bf0a13 100644 --- a/pkg/module/go_get_fetcher.go +++ b/pkg/module/go_get_fetcher.go @@ -109,8 +109,8 @@ func getSources(goBinaryName string, fs afero.Fs, gopath, repoRoot, module, vers o, err := cmd.CombinedOutput() if err != nil { - // github quota exceeded errMsg := fmt.Sprintf("%v : %s", err, o) + // github quota exceeded if isLimitHit(o) { return packagePath, errors.E("module.getSources", errMsg, errors.KindRateLimit) } diff --git a/pkg/storage/getter_saver.go b/pkg/storage/getter_saver.go deleted file mode 100644 index e21b492b..00000000 --- a/pkg/storage/getter_saver.go +++ /dev/null @@ -1,7 +0,0 @@ -package storage - -// GetterSaver is a getter and a saver composed into one type -type GetterSaver interface { - Getter - Saver -}