diff --git a/api/api.go b/api/api.go index 86b426e0..6a190389 100755 --- a/api/api.go +++ b/api/api.go @@ -46,7 +46,7 @@ func SetupTickersAPI(engine *gin.Engine, tickers controllers.TickersController, engine.GET("v2/market/ticker/:id", middleware.CacheControl(d, endpoint.GetTickerHandlerV2(tickers))) - engine.GET("v2/market/tickers", + engine.GET("v2/market/tickers/:assets", middleware.CacheControl(d, endpoint.GetTickersHandlerV2(tickers))) engine.POST("v1/market/ticker", diff --git a/api/api_test.go b/api/api_test.go index 7ce6166a..8b444389 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -125,7 +125,7 @@ func TestSetupTickersAPI(t *testing.T) { assert.Equal(t, float64(2), givenV2Resp2.Tickers[0].Change24h) assert.Equal(t, "coinmarketcap", givenV2Resp2.Tickers[0].Provider) - resp4, err := http.Get(server.URL + "/v2/market/tickers?assets=c60_ta") + resp4, err := http.Get(server.URL + "/v2/market/tickers/c60_ta") assert.Nil(t, err) body2, err := ioutil.ReadAll(resp4.Body) diff --git a/api/endpoint/tickers.go b/api/endpoint/tickers.go index 6b26626b..0e97dc53 100644 --- a/api/endpoint/tickers.go +++ b/api/endpoint/tickers.go @@ -113,7 +113,7 @@ func PostTickersHandlerV2(controller controllers.TickersController) func(c *gin. // @Produce json // @Tags Tickers // @Param currency query string empty "currency symbol" -// @Param assets query string true "List of asset ids" +// @Param assets path string true "List of asset ids" // @Success 200 {object} controllers.TickerResponseV2 // @Router /v2/market/tickers [get] func GetTickersHandlerV2(controller controllers.TickersController) func(c *gin.Context) { @@ -123,7 +123,7 @@ func GetTickersHandlerV2(controller controllers.TickersController) func(c *gin.C defer tx.End() currency := c.DefaultQuery("currency", watchmarket.DefaultCurrency) - assets := c.Query("assets") + assets := c.Param("assets") if len(assets) == 0 { c.JSON(http.StatusBadRequest, errorResponse(errors.E("Invalid request payload"))) return diff --git a/cmd/api/main.go b/cmd/api/main.go index d7d170ea..f7b5c152 100755 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -69,6 +69,8 @@ func init() { memoryCache = memory.Init() c = cron.New(cron.WithChain(cron.Recover(cron.DefaultLogger))) w = worker.Init(m.RatesAPIs, m.TickersAPIs, database, memoryCache, configuration) + } else { + go postgres.FatalWorker(time.Second*10, *database) } r := internal.InitRedis(configuration.Storage.Redis) @@ -78,8 +80,6 @@ func init() { info = infocontroller.NewController(redisCache, chartsPriority, coinInfoPriority, ratesPriority, tickerPriority, m.ChartsAPIs, configuration) tickers = tickerscontroller.NewController(database, memoryCache, ratesPriority, tickerPriority, configuration) engine = internal.InitEngine(configuration.RestAPI.Mode) - - go postgres.FatalWorker(time.Second*10, *database) } func main() { @@ -93,6 +93,10 @@ func main() { c.Start() } + if memoryCache.GetLenOfSavedItems() <= 0 { + panic("no items in memory cache") + } + if err := internal.InitAPI(engine, tickers, charts, info, configuration); err != nil { panic(err) } diff --git a/docs/docs.go b/docs/docs.go index ee8dfb3a..9884d997 100755 --- a/docs/docs.go +++ b/docs/docs.go @@ -330,7 +330,7 @@ var doc = `{ "type": "string", "description": "List of asset ids", "name": "assets", - "in": "query", + "in": "path", "required": true } ], diff --git a/docs/swagger.json b/docs/swagger.json index 36008712..96fefb46 100755 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -310,7 +310,7 @@ "type": "string", "description": "List of asset ids", "name": "assets", - "in": "query", + "in": "path", "required": true } ], diff --git a/docs/swagger.yaml b/docs/swagger.yaml index c5d7a31e..5b356713 100755 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -366,7 +366,7 @@ paths: name: currency type: string - description: List of asset ids - in: query + in: path name: assets required: true type: string diff --git a/services/cache/cache.go b/services/cache/cache.go index a93cf35c..369e3b7c 100644 --- a/services/cache/cache.go +++ b/services/cache/cache.go @@ -11,5 +11,6 @@ type ( Set(key string, data []byte, ctx context.Context) error GetWithTime(key string, time int64, ctx context.Context) ([]byte, error) SetWithTime(key string, data []byte, time int64, ctx context.Context) error + GetLenOfSavedItems() int } ) diff --git a/services/cache/memory/base.go b/services/cache/memory/base.go index 2c5fd9af..5a1c0f0e 100644 --- a/services/cache/memory/base.go +++ b/services/cache/memory/base.go @@ -49,3 +49,8 @@ func (i Instance) SetWithTime(key string, data []byte, time int64, ctx context.C func (i Instance) GetWithTime(key string, time int64, ctx context.Context) ([]byte, error) { return nil, nil } + +func (i Instance) GetLenOfSavedItems() int { + items := i.Cache.Items() + return len(items) +} diff --git a/services/cache/redis/base.go b/services/cache/redis/base.go index 8d527c52..08aa3c57 100755 --- a/services/cache/redis/base.go +++ b/services/cache/redis/base.go @@ -48,3 +48,7 @@ func (i Instance) Set(key string, data []byte, ctx context.Context) error { } return nil } + +func (i Instance) GetLenOfSavedItems() int { + return 0 +} diff --git a/services/controllers/charts/base_test.go b/services/controllers/charts/base_test.go index c0611262..e33545d4 100644 --- a/services/controllers/charts/base_test.go +++ b/services/controllers/charts/base_test.go @@ -201,6 +201,10 @@ func (c cacheMock) SetWithTime(key string, data []byte, time int64, ctx context. return nil } +func (c cacheMock) GetLenOfSavedItems() int { + return 0 +} + func getChartsMock() chartsMock { cm := chartsMock{} return cm diff --git a/services/controllers/info/base_test.go b/services/controllers/info/base_test.go index 1060b227..1c422065 100644 --- a/services/controllers/info/base_test.go +++ b/services/controllers/info/base_test.go @@ -97,6 +97,10 @@ func (c cacheMock) SetWithTime(key string, data []byte, time int64, ctx context. return nil } +func (c cacheMock) GetLenOfSavedItems() int { + return 0 +} + func getChartsMock() chartsMock { cm := chartsMock{} return cm diff --git a/services/worker/memory.go b/services/worker/memory.go index daf8e030..f67155a3 100644 --- a/services/worker/memory.go +++ b/services/worker/memory.go @@ -20,7 +20,8 @@ func (w Worker) SaveTickersToMemory() { allTickers, err := w.db.GetAllTickers(ctx) if err != nil { - panic(err) + logger.Warn("Failed to get tickers: ", err.Error()) + return } logger.Info("Memory Cache: got tickers From DB", logger.Params{"len": len(allTickers)}) @@ -51,7 +52,8 @@ func (w Worker) SaveRatesToMemory() { allRates, err := w.db.GetAllRates(ctx) if err != nil { - panic(err) + logger.Warn("Failed to get rates: ", err.Error()) + return } logger.Info("Memory Cache: got rates From DB", logger.Params{"len": len(allRates)})