diff --git a/.travis.yml b/.travis.yml index 22b48d6c..518a708d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,7 @@ before_script: - export GO_ENV=test_postgres - export MINIO_ACCESS_KEY=minio - export MINIO_SECRET_KEY=minio123 + - export ATHENS_MONGO_STORAGE_URL=mongodb://127.0.0.1:27017 - wget https://dl.minio.io/server/minio/release/linux-amd64/minio && chmod +x minio && nohup ./minio server . & - go get -u -v github.com/gobuffalo/buffalo/buffalo - go get -u -v golang.org/x/vgo diff --git a/cmd/olympus/actions/app.go b/cmd/olympus/actions/app.go index 31ded56e..31021abe 100644 --- a/cmd/olympus/actions/app.go +++ b/cmd/olympus/actions/app.go @@ -67,9 +67,15 @@ func App() *buffalo.App { log.Fatalf("error creating storage (%s)", err) return nil } + eventlogReader, err := newEventlog() + if err != nil { + log.Fatalf("error creating eventlog (%s)", err) + return nil + } app.GET("/", homeHandler) app.GET("/feed/{syncpoint:.*}", feedHandler(storage)) + app.GET("/eventlog/{sequence_id}", eventlogHandler(eventlogReader)) app.ServeFiles("/", assetsBox) // serve files from the public directory } diff --git a/cmd/olympus/actions/eventlog.go b/cmd/olympus/actions/eventlog.go new file mode 100644 index 00000000..479af7f0 --- /dev/null +++ b/cmd/olympus/actions/eventlog.go @@ -0,0 +1,18 @@ +package actions + +import ( + "fmt" + + "github.com/gobuffalo/envy" + "github.com/gomods/athens/pkg/eventlog" + "github.com/gomods/athens/pkg/eventlog/mongo" +) + +func newEventlog() (eventlog.Reader, error) { + mongoURI, err := envy.MustGet("ATHENS_MONGO_STORAGE_URL") + if err != nil { + return nil, fmt.Errorf("missing mongo URL (%s)", err) + } + l, err := mongo.NewLog(mongoURI) + return l, err +} diff --git a/cmd/olympus/actions/events.go b/cmd/olympus/actions/events.go new file mode 100644 index 00000000..83b17874 --- /dev/null +++ b/cmd/olympus/actions/events.go @@ -0,0 +1,26 @@ +package actions + +import ( + "net/http" + + "github.com/gobuffalo/buffalo" + "github.com/gomods/athens/pkg/eventlog" +) + +func eventlogHandler(r eventlog.Reader) func(c buffalo.Context) error { + return func(c buffalo.Context) error { + seqID := c.Param("sequence_id") + + var events []eventlog.Event + var err error + if seqID == "" { + events, err = r.Read() + } else { + events, err = r.ReadFrom(seqID) + } + if err != nil { + return err + } + return c.Render(http.StatusOK, renderEng.JSON(events)) + } +} diff --git a/cmd/olympus/actions/feed.go b/cmd/olympus/actions/feed.go index b2b955fa..a8479c46 100644 --- a/cmd/olympus/actions/feed.go +++ b/cmd/olympus/actions/feed.go @@ -15,6 +15,6 @@ func feedHandler(s storage.Backend) func(c buffalo.Context) error { feed := make(map[string][]string) - return c.Render(http.StatusOK, olympus.JSON(feed)) + return c.Render(http.StatusOK, renderEng.JSON(feed)) } } diff --git a/cmd/olympus/actions/home.go b/cmd/olympus/actions/home.go index daaa91b6..8050e8bc 100644 --- a/cmd/olympus/actions/home.go +++ b/cmd/olympus/actions/home.go @@ -5,5 +5,5 @@ import ( ) func homeHandler(c buffalo.Context) error { - return c.Render(200, olympus.HTML("index.html")) + return c.Render(200, renderEng.HTML("index.html")) } diff --git a/cmd/olympus/actions/render.go b/cmd/olympus/actions/render.go index a25b661e..01fce79d 100644 --- a/cmd/olympus/actions/render.go +++ b/cmd/olympus/actions/render.go @@ -5,11 +5,11 @@ import ( "github.com/gobuffalo/packr" ) -var olympus *render.Engine +var renderEng *render.Engine var assetsBox = packr.NewBox("../public") func init() { - olympus = render.New(render.Options{ + renderEng = render.New(render.Options{ // HTML layout to be used for all HTML requests: HTMLLayout: "application.html", JavaScriptLayout: "application.js", diff --git a/pkg/storage/minio/lister.go b/pkg/storage/minio/lister.go index 113b511d..1f98fa16 100644 --- a/pkg/storage/minio/lister.go +++ b/pkg/storage/minio/lister.go @@ -1,6 +1,7 @@ package minio import ( + "sort" "strings" ) @@ -25,5 +26,6 @@ func (l *storageImpl) List(module string) ([]string, error) { for ver := range dict { ret = append(ret, ver) } + sort.Strings(ret) return ret, nil }