Add warnings to debugInfo

This commit is contained in:
Selim Mustafaev 2021-01-30 21:56:46 +03:00
parent 3ea920d169
commit 0194f3472b
6 changed files with 66 additions and 45 deletions

View File

@ -2,7 +2,7 @@ const crypto = require('crypto');
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const Vehicle = require('../models/vehicle'); const Vehicle = require('../models/vehicle');
const PubNub = require('pubnub'); const PubNub = require('pubnub');
const { SSL_OP_SSLEAY_080_CLIENT_DH_BUG } = require('constants'); const DebugInfo = require('../models/DebugInfo');
const baseUrl = 'https://avtocod.ru/api/v3'; const baseUrl = 'https://avtocod.ru/api/v3';
let deviceToken = crypto.createHash('sha256').update(Date.now().toString()).digest().toString('hex'); let deviceToken = crypto.createHash('sha256').update(Date.now().toString()).digest().toString('hex');
@ -99,12 +99,7 @@ class AvtocodProvider {
console.log('Avtocod found vehicle: ', vehicle?.brand?.name?.original); console.log('Avtocod found vehicle: ', vehicle?.brand?.name?.original);
return vehicle; return vehicle;
} catch(ex) { } catch(ex) {
ex.debugInfo = { ex.debugInfo = { autocod: DebugInfo.fromError(ex.message) };
autocod: {
fields: 0,
error: ex.message
}
}
throw ex; throw ex;
} }
} }

View File

@ -2,6 +2,7 @@ const crypto = require('crypto');
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const Utils = require('../utils'); const Utils = require('../utils');
const utf8 = require('utf8'); const utf8 = require('utf8');
const DebugInfo = require('../models/DebugInfo');
const baseUrl = 'https://www.nomerogram.ru/api/v1.1'; const baseUrl = 'https://www.nomerogram.ru/api/v1.1';
@ -51,7 +52,7 @@ class NomerogramProvider {
}); });
} catch(ex) { } catch(ex) {
console.log('Nomerogram error: ', ex.message); console.log('Nomerogram error: ', ex.message);
ex.debugInfo = { nomerogram: { fields: 0, error: ex.message } }; ex.debugInfo = { nomerogram: DebugInfo.fromError(ex.message) };
throw ex; throw ex;
} }
} }

View File

@ -1,4 +1,5 @@
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const DebugInfo = require('../models/DebugInfo');
const Vehicle = require('../models/vehicle'); const Vehicle = require('../models/vehicle');
const Utils = require('../utils'); const Utils = require('../utils');
@ -67,9 +68,9 @@ class Vin01Provider {
let vehicle = new Vehicle(); let vehicle = new Vehicle();
vehicle.vin1 = Utils.cyrillicToLatin(vin); vehicle.vin1 = Utils.cyrillicToLatin(vin);
vehicle.debugInfo = { vehicle.debugInfo = {
vin01vin: { fields: 0, error: null }, vin01vin: new DebugInfo(),
vin01history: { fields: 0, error: history.reason.message }, vin01history: DebugInfo.fromError(history.reason.message),
vin01base: { fields: 0, error: base.reason.message } vin01base: DebugInfo.fromError(base.reason.message)
}; };
return vehicle; return vehicle;
} else if(base.status == 'rejected') { } else if(base.status == 'rejected') {
@ -77,8 +78,8 @@ class Vin01Provider {
let vehicle = Vehicle.fromVin01History(history.value); let vehicle = Vehicle.fromVin01History(history.value);
vehicle.number = number; vehicle.number = number;
Object.assign(vehicle.debugInfo, { Object.assign(vehicle.debugInfo, {
vin01vin: { fields: 0, error: null }, vin01vin: new DebugInfo(),
vin01base: { fields: 0, error: base.reason.message } vin01base: DebugInfo.fromError(base.reason.message)
}); });
return vehicle; return vehicle;
} else if(history.status == 'rejected') { } else if(history.status == 'rejected') {
@ -86,8 +87,8 @@ class Vin01Provider {
let vehicle = Vehicle.fromVin01Base(base.value); let vehicle = Vehicle.fromVin01Base(base.value);
vehicle.number = number; vehicle.number = number;
Object.assign(vehicle.debugInfo, { Object.assign(vehicle.debugInfo, {
vin01vin: { fields: 0, error: null }, vin01vin: new DebugInfo(),
vin01history: { fields: 0, error: history.reason.message } vin01history: DebugInfo.fromError(history.reason.message)
}); });
return vehicle; return vehicle;
} else { } else {
@ -123,7 +124,7 @@ class Vin01Provider {
} }
} }
Object.assign(historyVehicle.debugInfo, { vin01vin: { fields: 0, error: null } }); Object.assign(historyVehicle.debugInfo, { vin01vin: new DebugInfo() });
Object.assign(historyVehicle.debugInfo, baseVehicle.debugInfo); Object.assign(historyVehicle.debugInfo, baseVehicle.debugInfo);
historyVehicle.number = number; historyVehicle.number = number;
@ -131,9 +132,9 @@ class Vin01Provider {
} }
} catch(ex) { } catch(ex) {
ex.debugInfo = { ex.debugInfo = {
vin01vin: { fields: 0, error: ex.message }, vin01vin: DebugInfo.fromError(ex.message),
vin01history: { fields: 0, error: 'Not applicable (VIN was not found)' }, vin01history: DebugInfo.fromError('Not applicable (VIN was not found)'),
vin01base: { fields: 0, error: 'Not applicable (VIN was not found)' } vin01base: DebugInfo.fromError('Not applicable (VIN was not found)')
}; };
throw ex; throw ex;
} }

32
models/DebugInfo.js Normal file
View File

@ -0,0 +1,32 @@
class DebugInfo {
status
fields
error
constructor() {
this.status = 0;
this.fields = 0;
this.error = null;
}
static fromError(error) {
let di = new DebugInfo();
di.status = 1;
di.error = error;
return di;
}
static fromWarning(warning) {
let di = new DebugInfo();
di.status = 2;
di.error = warning;
return di;
}
setWarning(warning) {
this.status = 2;
this.error = warning;
}
}
module.exports = DebugInfo;

View File

@ -1,5 +1,6 @@
const Constants = require('../data_providers/constants'); const Constants = require('../data_providers/constants');
const Utils = require('../utils'); const Utils = require('../utils');
const DebugInfo = require('./DebugInfo');
class Vehicle { class Vehicle {
brand brand
@ -61,13 +62,7 @@ class Vehicle {
v.addedDate = Date.now(); v.addedDate = Date.now();
v.updatedDate = v.addedDate; v.updatedDate = v.addedDate;
v.events = []; v.events = [];
v.debugInfo = { autocod: new DebugInfo() };
v.debugInfo = {
autocod: {
fields: 0,
error: null
}
};
return v; return v;
} }
@ -105,13 +100,7 @@ class Vehicle {
v.addedDate = Date.now(); v.addedDate = Date.now();
v.updatedDate = v.addedDate; v.updatedDate = v.addedDate;
v.events = []; v.events = [];
v.debugInfo = { vin01history: new DebugInfo() };
v.debugInfo = {
vin01history: {
fields: 0,
error: null
}
};
return v; return v;
} }
@ -167,13 +156,7 @@ class Vehicle {
v.addedDate = Date.now(); v.addedDate = Date.now();
v.updatedDate = v.addedDate; v.updatedDate = v.addedDate;
v.events = []; v.events = [];
v.debugInfo = { vin01base: new DebugInfo() };
v.debugInfo = {
vin01base: {
fields: 0,
error: null
}
};
return v; return v;
} }

View File

@ -9,6 +9,7 @@ const RsaProvider = require('../data_providers/rsa');
const NomerogramProvider = require('../data_providers/nomerogram'); const NomerogramProvider = require('../data_providers/nomerogram');
const Utils = require('../utils'); const Utils = require('../utils');
const ObjectId = require('mongodb').ObjectID; const ObjectId = require('mongodb').ObjectID;
const DebugInfo = require('../models/DebugInfo');
const makeError = error => ({ success: false, error }); const makeError = error => ({ success: false, error });
@ -39,9 +40,9 @@ router.post('/check', async (req, res) => {
} else { } else {
all.push(Promise.reject({ all.push(Promise.reject({
debugInfo: { debugInfo: {
vin01vin: { fields: 0, error: 'No auth token' }, vin01vin: DebugInfo.fromError('No auth token'),
vin01history: { fields: 0, error: 'No auth token' }, vin01history: DebugInfo.fromError('No auth token'),
vin01base: { fields: 0, error: 'No auth token' } vin01base: DebugInfo.fromError('No auth token')
} }
})); }));
} }
@ -64,18 +65,26 @@ router.post('/check', async (req, res) => {
} }
} else { } else {
vehicle = autocod.value; vehicle = autocod.value;
if(vehicle.vin1 && vin01.value.vin1.match(RegExp(vehicle.vin1.replace(/\*/g, '.')))) { let vinMatch = vin01.value.vin1.match(RegExp(vehicle.vin1.replace(/\*/g, '.')));
if(vehicle.vin1 && vinMatch) {
vehicle.vin1 = vin01.value.vin1; vehicle.vin1 = vin01.value.vin1;
vehicle.vin2 = vin01.value.vin2; vehicle.vin2 = vin01.value.vin2;
vehicle.color = vin01.value.color; vehicle.color = vin01.value.color;
vehicle.ownershipPeriods = vin01.value.ownershipPeriods; vehicle.ownershipPeriods = vin01.value.ownershipPeriods;
} else if(!vinMatch) {
let vin01data = `${vin01.value.vin1} - ${vin01.value.brand.name.original}`;
let autocodData = `${autocod.value.vin1} - ${autocod.value.brand.name.original}`;
let warning = `Vin01 VIN (${vin01data}) doesn't match with avtocod's one (${autocodData})`;
vin01.value.debugInfo.vin01vin.setWarning(warning);
vin01.value.debugInfo.vin01history.setWarning(warning);
vin01.value.debugInfo.vin01base.setWarning(warning);
} }
Object.assign(vehicle.debugInfo, vin01.value.debugInfo); Object.assign(vehicle.debugInfo, vin01.value.debugInfo);
} }
if(nomerogram.status == 'fulfilled') { if(nomerogram.status == 'fulfilled') {
vehicle.ads = nomerogram.value; vehicle.ads = nomerogram.value;
Object.assign(vehicle.debugInfo, { nomerogram: { fields: 0, error: null } }); Object.assign(vehicle.debugInfo, { nomerogram: new DebugInfo() });
} else { } else {
Object.assign(vehicle.debugInfo, nomerogram.reason.debugInfo); Object.assign(vehicle.debugInfo, nomerogram.reason.debugInfo);
} }