11package kucoin
22
33import (
4+ "encoding/json"
45 "fmt"
56 "strings"
67 "sync"
@@ -156,7 +157,7 @@ func (ws *ws) serveFor(store *store.Store) {
156157 }
157158}
158159
159- func (kucoin * kucoin ) getKlines (pair string , timeframe string , startAt int64 , endAt int64 , retryCount int ) (sdk.KLinesModel , error ) {
160+ func (kucoin * kucoin ) getKlines (pair string , timeframe string , startAt int64 , endAt int64 , retryCount int ) (sdk.KLinesModel , * sdk. ApiResponse , error ) {
160161 var (
161162 resp * sdk.ApiResponse
162163 err error
@@ -169,19 +170,19 @@ func (kucoin *kucoin) getKlines(pair string, timeframe string, startAt int64, en
169170 break
170171 }
171172
172- if i == retryCount {
173- return sdk.KLinesModel {}, err
173+ if i == retryCount || resp . Code != "429000" { //This type of Candlestick is currently not provided
174+ return sdk.KLinesModel {}, resp , err
174175 }
175176
176- time .Sleep (time .Millisecond * 150 )
177+ time .Sleep (time .Millisecond * 100 )
177178 }
178179
179180 candlesModel := sdk.KLinesModel {}
180181 if err := resp .ReadData (& candlesModel ); err != nil {
181- return candlesModel , err
182+ return candlesModel , resp , err
182183 }
183184
184- return candlesModel , nil
185+ return candlesModel , resp , nil
185186}
186187
187188func (kucoin * kucoin ) timeframeToDuration (timeframe string ) time.Duration {
@@ -219,6 +220,17 @@ func (kucoin *kucoin) truncateTs(timeframe string, ts time.Time) time.Time {
219220 return ts .Truncate (kucoin .timeframeToDuration (timeframe ))
220221}
221222
223+ type apiResp struct {
224+ Code string `json:"code"`
225+ RawData json.RawMessage `json:"data,omitempty"`
226+ Message string `json:"msg"`
227+ }
228+
229+ func (resp * apiResp ) json () []byte {
230+ data , _ := json .Marshal (resp )
231+ return data
232+ }
233+
222234func (kucoin * kucoin ) Start (port int ) {
223235 router := routing .New ()
224236
@@ -239,9 +251,14 @@ func (kucoin *kucoin) Start(port int) {
239251 candles := kucoin .store .Get ("kucoin" , pair , timeframe , startTruncated , endTruncated , kucoin .timeframeToDuration (timeframe ))
240252
241253 if len (candles ) == 0 {
242- candlesModel , err := kucoin .getKlines (pair , timeframe , startTruncated .Unix (), endAt , 3 )
254+ candlesModel , resp , err := kucoin .getKlines (pair , timeframe , startTruncated .Unix (), endAt , 3 )
243255 if err != nil {
244- return err
256+ logrus .Warn (err )
257+
258+ c .Response .SetStatusCode (200 )
259+ c .Response .SetBody ((& apiResp {Code : resp .Code , RawData : resp .RawData , Message : resp .Message }).json ())
260+
261+ return nil
245262 }
246263
247264 for _ , c := range candlesModel {
0 commit comments