@@ -7,6 +7,8 @@ const convertDateToDayCode = require('../../../utilities/convert/dateToDayCode')
77 convertDayCodeToNumber = require ( '../../../utilities/convert/dayCodeToNumber' ) ,
88 convertBaseCodeToUnitCode = require ( '../../../utilities/convert/baseCodeToUnitCode' ) ;
99
10+ const LoggerFactory = require ( './../../../logging/LoggerFactory' ) ;
11+
1012module . exports = ( ( ) => {
1113 'use strict' ;
1214
@@ -29,6 +31,8 @@ module.exports = (() => {
2931 regex . c3 . currencies . uah = / ^ ( U A H ) \/ ( .* ) $ / i;
3032 regex . c3 . currencies . usd = / ^ ( U S D | U s c | \$ | ) \/ ( .* ) $ / i;
3133
34+ let logger = null ;
35+
3236 /**
3337 * Executes an HTTP request for a quote snapshot(s) and returns a
3438 * promise of quote refresh message(s) (suitable for processing by
@@ -45,6 +49,10 @@ module.exports = (() => {
4549 function retrieveSnapshots ( symbols , username , password ) {
4650 return Promise . resolve ( )
4751 . then ( ( ) => {
52+ if ( logger === null ) {
53+ logger = LoggerFactory . getLogger ( '@barchart/marketdata-api-js' ) ;
54+ }
55+
4856 let symbolsToUse ;
4957
5058 if ( is . string ( symbols ) ) {
@@ -142,75 +150,81 @@ module.exports = (() => {
142150 . then ( ( response ) => {
143151 const results = response . data . results || [ ] ;
144152
145- const messages = results . map ( ( result ) => {
146- const message = { } ;
153+ const messages = results . reduce ( ( accumulator , result ) => {
154+ try {
155+ const message = { } ;
147156
148- message . type = 'REFRESH_QUOTE' ;
157+ message . type = 'REFRESH_QUOTE' ;
149158
150- message . symbol = result . symbol . toUpperCase ( ) ;
151- message . name = result . name ;
152- message . exchange = result . exchange ;
159+ message . symbol = result . symbol . toUpperCase ( ) ;
160+ message . name = result . name ;
161+ message . exchange = result . exchange ;
153162
154- if ( result . unitCode !== null ) {
155- message . unitcode = convertBaseCodeToUnitCode ( parseInt ( result . unitCode ) ) ;
156- } else {
157- message . unitcode = '2' ;
158- }
163+ if ( result . unitCode !== null ) {
164+ message . unitcode = convertBaseCodeToUnitCode ( parseInt ( result . unitCode ) ) ;
165+ } else {
166+ message . unitcode = '2' ;
167+ }
159168
160- message . tradeTime = new Date ( result . tradeTimestamp ) ;
169+ message . tradeTime = new Date ( result . tradeTimestamp ) ;
161170
162- let dayCode ;
171+ let dayCode ;
163172
164- if ( is . string ( result . dayCode ) && result . dayCode . length === 1 ) {
165- dayCode = result . dayCode ;
166- } else {
167- dayCode = convertDateToDayCode ( message . tradeTime ) ;
168- }
173+ if ( is . string ( result . dayCode ) && result . dayCode . length === 1 ) {
174+ dayCode = result . dayCode ;
175+ } else {
176+ dayCode = convertDateToDayCode ( message . tradeTime ) ;
177+ }
169178
170- message . day = dayCode ;
171- message . dayNum = convertDayCodeToNumber ( dayCode ) ;
172- message . flag = result . flag ;
173- message . mode = result . mode ;
179+ message . day = dayCode ;
180+ message . dayNum = convertDayCodeToNumber ( dayCode ) ;
181+ message . flag = result . flag ;
182+ message . mode = result . mode ;
174183
175- message . lastPrice = result . lastPrice ;
176- message . tradeSize = result . tradeSize ;
177- message . numberOfTrades = result . numTrades ;
184+ message . lastPrice = result . lastPrice ;
185+ message . tradeSize = result . tradeSize ;
186+ message . numberOfTrades = result . numTrades ;
178187
179- message . bidPrice = result . bid ;
180- message . bidSize = result . bidSize ;
181- message . askPrice = result . ask ;
182- message . askSize = result . askSize ;
188+ message . bidPrice = result . bid ;
189+ message . bidSize = result . bidSize ;
190+ message . askPrice = result . ask ;
191+ message . askSize = result . askSize ;
183192
184- message . settlementPrice = result . settlement ;
185- message . previousPrice = result . previousLastPrice ;
193+ message . settlementPrice = result . settlement ;
194+ message . previousPrice = result . previousLastPrice ;
186195
187- message . openPrice = result . open ;
188- message . highPrice = result . high ;
189- message . lowPrice = result . low ;
196+ message . openPrice = result . open ;
197+ message . highPrice = result . high ;
198+ message . lowPrice = result . low ;
190199
191- message . volume = result . volume ;
200+ message . volume = result . volume ;
192201
193- message . lastUpdate = message . tradeTime ;
202+ message . lastUpdate = message . tradeTime ;
194203
195- if ( regex . c3 . symbol . test ( message . symbol ) ) {
196- const c3 = { } ;
204+ if ( regex . c3 . symbol . test ( message . symbol ) ) {
205+ const c3 = { } ;
197206
198- c3 . currency = null ;
199- c3 . delivery = null ;
207+ c3 . currency = null ;
208+ c3 . delivery = null ;
200209
201- if ( result . commodityDataCurrency ) {
202- c3 . currency = getC3Currency ( result . commodityDataCurrency ) ;
203- }
210+ if ( result . commodityDataCurrency ) {
211+ c3 . currency = getC3Currency ( result . commodityDataCurrency ) ;
212+ }
213+
214+ if ( result . commodityDataDelivery ) {
215+ c3 . delivery = result . commodityDataDelivery ;
216+ }
204217
205- if ( result . commodityDataDelivery ) {
206- c3 . delivery = result . commodityDataDelivery ;
218+ message . additional = { c3 : c3 } ;
207219 }
208220
209- message . additional = { c3 : c3 } ;
221+ accumulator . push ( message ) ;
222+ } catch ( e ) {
223+ logger . warn ( `Snapshot: Failed to process for symbol` ) ;
210224 }
211225
212- return message ;
213- } ) ;
226+ return accumulator ;
227+ } , [ ] ) ;
214228
215229 return messages ;
216230 } ) ;
@@ -230,42 +244,46 @@ module.exports = (() => {
230244 const results = response . data . results || [ ] ;
231245
232246 const messages = symbols . reduce ( ( accumulator , symbol ) => {
233- const result = results . find ( result => result . symbol === symbol || result . shortSymbol === symbol ) ;
247+ try {
248+ const result = results . find ( result => result . symbol === symbol || result . shortSymbol === symbol ) ;
234249
235- if ( ! result ) {
236- return accumulator ;
237- }
250+ if ( ! result ) {
251+ return accumulator ;
252+ }
238253
239- const match = result . tradeTimestamp . match ( regex . day ) ;
240- const date = new Date ( parseInt ( match [ 1 ] ) , parseInt ( match [ 2 ] ) - 1 , parseInt ( match [ 3 ] ) ) ;
241- const dayCode = convertDateToDayCode ( date ) ;
254+ const match = result . tradeTimestamp . match ( regex . day ) ;
255+ const date = new Date ( parseInt ( match [ 1 ] ) , parseInt ( match [ 2 ] ) - 1 , parseInt ( match [ 3 ] ) ) ;
256+ const dayCode = convertDateToDayCode ( date ) ;
242257
243- const message = { } ;
258+ const message = { } ;
244259
245- message . type = 'REFRESH_QUOTE' ;
260+ message . type = 'REFRESH_QUOTE' ;
246261
247- if ( regex . cmdty . long . test ( symbol ) ) {
248- message . symbol = result . symbol . toUpperCase ( ) ;
249- } else {
250- message . symbol = result . shortSymbol . toUpperCase ( ) ;
251- }
262+ if ( regex . cmdty . long . test ( symbol ) ) {
263+ message . symbol = result . symbol . toUpperCase ( ) ;
264+ } else {
265+ message . symbol = result . shortSymbol . toUpperCase ( ) ;
266+ }
252267
253- message . name = result . shortName ;
254- message . exchange = 'CSTATS' ;
255- message . unitcode = '2' ;
268+ message . name = result . shortName ;
269+ message . exchange = 'CSTATS' ;
270+ message . unitcode = '2' ;
256271
257- message . day = dayCode ;
258- message . dayNum = convertDayCodeToNumber ( dayCode ) ;
272+ message . day = dayCode ;
273+ message . dayNum = convertDayCodeToNumber ( dayCode ) ;
259274
260- message . lastPrice = result . lastPrice ;
275+ message . lastPrice = result . lastPrice ;
261276
262- if ( result . previousClose ) {
263- message . previousPrice = result . previousClose ;
264- }
277+ if ( result . previousClose ) {
278+ message . previousPrice = result . previousClose ;
279+ }
265280
266- message . lastUpdate = date ;
281+ message . lastUpdate = date ;
267282
268- accumulator . push ( message ) ;
283+ accumulator . push ( message ) ;
284+ } catch ( e ) {
285+ logger . warn ( `Snapshot: Failed to process response for cmdtyStats symbol [ ${ symbol } ]` ) ;
286+ }
269287
270288 return accumulator ;
271289 } , [ ] ) ;
0 commit comments