Skip to content

Commit 6764675

Browse files
BryanBryan
authored andcommitted
Use try/catch for each result received from OnDemand
1 parent 6e05c9c commit 6764675

File tree

1 file changed

+91
-73
lines changed

1 file changed

+91
-73
lines changed

lib/connection/snapshots/quotes/retrieveSnapshots.js

Lines changed: 91 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
1012
module.exports = (() => {
1113
'use strict';
1214

@@ -29,6 +31,8 @@ module.exports = (() => {
2931
regex.c3.currencies.uah = /^(UAH)\/(.*)$/i;
3032
regex.c3.currencies.usd = /^(USD|Usc|\$|)\/(.*)$/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

Comments
 (0)