Merge branch 'development' into main

This commit is contained in:
jwu-fisker
2021-06-24 10:20:50 -07:00
20 changed files with 329 additions and 213 deletions

239
package-lock.json generated
View File

@@ -1289,6 +1289,30 @@
} }
} }
}, },
"@datadog/browser-logs": {
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/@datadog/browser-logs/-/browser-logs-2.15.0.tgz",
"integrity": "sha512-kZb0nKx1XoZibs3nkBwcP2iff23kX11yUcQj0aXHLL4yulO5I0AqEhoZXwVFfG8KP82sflX+uyssdNIUwMr1cg==",
"requires": {
"@datadog/browser-core": "2.15.0",
"tslib": "^1.10.0"
},
"dependencies": {
"@datadog/browser-core": {
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/@datadog/browser-core/-/browser-core-2.15.0.tgz",
"integrity": "sha512-qWTAysGYQXVpM5FOdstaqIF6B99nyQ2N/rJsi1ruPgFmU9yMM9tRdvqiJ7NZcy+OOsZWiinvFRFUMv9SOsHeUA==",
"requires": {
"tslib": "^1.10.0"
}
},
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}
}
},
"@datadog/browser-rum": { "@datadog/browser-rum": {
"version": "2.8.1", "version": "2.8.1",
"resolved": "https://registry.npmjs.org/@datadog/browser-rum/-/browser-rum-2.8.1.tgz", "resolved": "https://registry.npmjs.org/@datadog/browser-rum/-/browser-rum-2.8.1.tgz",
@@ -5060,9 +5084,9 @@
"integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
}, },
"dns-packet": { "dns-packet": {
"version": "1.3.1", "version": "1.3.4",
"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
"integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
"requires": { "requires": {
"ip": "^1.1.0", "ip": "^1.1.0",
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
@@ -5155,11 +5179,18 @@
} }
}, },
"domhandler": { "domhandler": {
"version": "2.4.2", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
"integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
"requires": { "requires": {
"domelementtype": "1" "domelementtype": "^2.2.0"
},
"dependencies": {
"domelementtype": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
}
} }
}, },
"domutils": { "domutils": {
@@ -7323,22 +7354,40 @@
} }
}, },
"htmlparser2": { "htmlparser2": {
"version": "3.10.1", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
"integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
"requires": { "requires": {
"domelementtype": "^1.3.1", "domelementtype": "^2.0.1",
"domhandler": "^2.3.0", "domhandler": "^4.0.0",
"domutils": "^1.5.1", "domutils": "^2.5.2",
"entities": "^1.1.1", "entities": "^2.0.0"
"inherits": "^2.0.1",
"readable-stream": "^3.1.1"
}, },
"dependencies": { "dependencies": {
"entities": { "dom-serializer": {
"version": "1.1.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
}
},
"domelementtype": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
},
"domutils": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
"integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
"requires": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0"
}
} }
} }
}, },
@@ -10622,9 +10671,9 @@
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
}, },
"postcss": { "postcss": {
"version": "7.0.35", "version": "7.0.36",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
"integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"requires": { "requires": {
"chalk": "^2.4.2", "chalk": "^2.4.2",
"source-map": "^0.6.1", "source-map": "^0.6.1",
@@ -12472,15 +12521,15 @@
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
}, },
"renderkid": { "renderkid": {
"version": "2.0.5", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
"integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
"requires": { "requires": {
"css-select": "^2.0.2", "css-select": "^4.1.3",
"dom-converter": "^0.2", "dom-converter": "^0.2.0",
"htmlparser2": "^3.10.1", "htmlparser2": "^6.1.0",
"lodash": "^4.17.20", "lodash": "^4.17.21",
"strip-ansi": "^3.0.0" "strip-ansi": "^3.0.1"
}, },
"dependencies": { "dependencies": {
"ansi-regex": { "ansi-regex": {
@@ -12488,6 +12537,56 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
}, },
"css-select": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
"integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
"requires": {
"boolbase": "^1.0.0",
"css-what": "^5.0.0",
"domhandler": "^4.2.0",
"domutils": "^2.6.0",
"nth-check": "^2.0.0"
}
},
"css-what": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
"integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg=="
},
"dom-serializer": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
}
},
"domelementtype": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
},
"domutils": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
"integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
"requires": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0"
}
},
"nth-check": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
"integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
"requires": {
"boolbase": "^1.0.0"
}
},
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -12640,9 +12739,9 @@
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
}, },
"resolve-url-loader": { "resolve-url-loader": {
"version": "3.1.3", "version": "3.1.4",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz",
"integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==",
"requires": { "requires": {
"adjust-sourcemap-loader": "3.0.0", "adjust-sourcemap-loader": "3.0.0",
"camelcase": "5.3.1", "camelcase": "5.3.1",
@@ -12650,68 +12749,22 @@
"convert-source-map": "1.7.0", "convert-source-map": "1.7.0",
"es6-iterator": "2.0.3", "es6-iterator": "2.0.3",
"loader-utils": "1.2.3", "loader-utils": "1.2.3",
"postcss": "7.0.21", "postcss": "7.0.36",
"rework": "1.0.1", "rework": "1.0.1",
"rework-visit": "1.0.0", "rework-visit": "1.0.0",
"source-map": "0.6.1" "source-map": "0.6.1"
}, },
"dependencies": { "dependencies": {
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"requires": {
"color-convert": "^1.9.0"
}
},
"camelcase": { "camelcase": {
"version": "5.3.1", "version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
}, },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"dependencies": {
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"emojis-list": { "emojis-list": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
}, },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"json5": { "json5": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
@@ -12729,24 +12782,6 @@
"emojis-list": "^2.0.0", "emojis-list": "^2.0.0",
"json5": "^1.0.1" "json5": "^1.0.1"
} }
},
"postcss": {
"version": "7.0.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz",
"integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==",
"requires": {
"chalk": "^2.4.2",
"source-map": "^0.6.1",
"supports-color": "^6.1.0"
}
},
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"requires": {
"has-flag": "^3.0.0"
}
} }
} }
}, },
@@ -16347,9 +16382,9 @@
} }
}, },
"ws": { "ws": {
"version": "7.4.5", "version": "7.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz",
"integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw=="
}, },
"xml-name-validator": { "xml-name-validator": {
"version": "3.0.0", "version": "3.0.0",

View File

@@ -3,6 +3,7 @@
"version": "0.1.1", "version": "0.1.1",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@datadog/browser-logs": "^2.15.0",
"@datadog/browser-rum": "^2.8.1", "@datadog/browser-rum": "^2.8.1",
"@material-ui/core": "^4.11.4", "@material-ui/core": "^4.11.4",
"@material-ui/icons": "^4.11.2", "@material-ui/icons": "^4.11.2",

View File

@@ -12,6 +12,7 @@ import useStyles from "../../useStyles";
import { tsLocalDateTimeString } from "../../../utils/dates"; import { tsLocalDateTimeString } from "../../../utils/dates";
import SearchField from "../../Controls/SearchField"; import SearchField from "../../Controls/SearchField";
import CarSelectionTable from "../../Cars/CarSelectionTable"; import CarSelectionTable from "../../Cars/CarSelectionTable";
import { logger } from "../../../services/monitoring";
const MainForm = () => { const MainForm = () => {
const { packageid } = useParams(); const { packageid } = useParams();
@@ -41,6 +42,7 @@ const MainForm = () => {
}; };
const handleSelect = (event, key) => { const handleSelect = (event, key) => {
try {
let newSelected; let newSelected;
if (event.target.checked) { if (event.target.checked) {
newSelected = [...selected]; newSelected = [...selected];
@@ -49,6 +51,9 @@ const MainForm = () => {
newSelected = selected.filter((vin) => vin !== key); newSelected = selected.filter((vin) => vin !== key);
} }
setSelected(newSelected); setSelected(newSelected);
} catch (e) {
logger.warn(e.stack);
}
}; };
const onSubmit = async (event) => { const onSubmit = async (event) => {
@@ -65,13 +70,16 @@ const MainForm = () => {
setRedirect(`/carupdate-status/${packageid}`); setRedirect(`/carupdate-status/${packageid}`);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
}; };
const getData = async () => { const getData = async () => {
try { try {
getPackages({ id: parseInt(packageid) }, token); getPackages({ id: parseInt(packageid) }, token);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
}; };
@@ -82,7 +90,7 @@ const MainForm = () => {
useEffect(() => { useEffect(() => {
setTitle(`Deploy ${packageName} ${version}`); setTitle(`Deploy ${packageName} ${version}`);
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [packageName, version]); }, [packageName, version]);
useEffect(() => { useEffect(() => {

View File

@@ -20,6 +20,7 @@ import { useUserContext } from "../../Contexts/UserContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import { LocalDateTimeString } from "../../../utils/dates"; import { LocalDateTimeString } from "../../../utils/dates";
import { logger } from "../../../services/monitoring";
const MainForm = () => { const MainForm = () => {
const { packageid } = useParams(); const { packageid } = useParams();
@@ -43,25 +44,28 @@ const MainForm = () => {
} = useUserContext(); } = useUserContext();
useEffect(() => { useEffect(() => {
(async () => {
try { try {
getPackages({ id: packageid }, token); await getPackages({ id: packageid }, token);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
// eslint-disable-next-line })();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [token]); }, [token]);
useEffect(() => { useEffect(() => {
if (!packages || packages.length === 0) return; if (!packages || packages.length === 0) return;
setTitle(`Package ${packages[0].package_name} ${packages[0].version}`); setTitle(`Package ${packages[0].package_name} ${packages[0].version}`);
// eslint-disable-next-line react-hooks/exhaustive-deps
// eslint-disable-next-line
}, [packages]); }, [packages]);
useEffect(() => { useEffect(() => {
(async () => {
try { try {
stopMonitor(); stopMonitor();
getCarUpdates( await getCarUpdates(
{ {
packageid, packageid,
limit: pageSize, limit: pageSize,
@@ -71,8 +75,10 @@ const MainForm = () => {
); );
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
// eslint-disable-next-line })();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pageIndex, pageSize, token]); }, [pageIndex, pageSize, token]);
useEffect(() => { useEffect(() => {
@@ -81,11 +87,12 @@ const MainForm = () => {
startMonitor(token); startMonitor(token);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
return () => { return () => {
stopMonitor(); stopMonitor();
}; };
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [carUpdates]); }, [carUpdates]);
const handleChangePageIndex = (event, newIndex) => { const handleChangePageIndex = (event, newIndex) => {

View File

@@ -8,6 +8,7 @@ import {
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import { useUserContext } from "../../Contexts/UserContext"; import { useUserContext } from "../../Contexts/UserContext";
import { Button, TextField } from "@material-ui/core"; import { Button, TextField } from "@material-ui/core";
import { logger } from "../../../services/monitoring";
const MainForm = () => { const MainForm = () => {
const { addVehicle, busy } = useVehicleContext(); const { addVehicle, busy } = useVehicleContext();
@@ -25,7 +26,7 @@ const MainForm = () => {
useEffect(() => { useEffect(() => {
setTitle("Add Vehicle"); setTitle("Add Vehicle");
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
const onSubmit = async (event) => { const onSubmit = async (event) => {
try { try {
@@ -44,6 +45,7 @@ const MainForm = () => {
vinEl.current.value = ""; vinEl.current.value = "";
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
}; };

View File

@@ -40,7 +40,7 @@ const Control = (props) => {
await getYears(token); await getYears(token);
} catch (e) {} } catch (e) {}
})(); })();
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [token]); }, [token]);
useEffect(() => { useEffect(() => {
@@ -56,14 +56,14 @@ const Control = (props) => {
useEffect(() => { useEffect(() => {
if (model === null || year === -1) return; if (model === null || year === -1) return;
getVehicles({ model, year, trim }, token); getVehicles({ model, year, trim }, token);
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [model, year, trim]); }, [model, year, trim]);
useEffect(() => { useEffect(() => {
if (!props.onSelection) return; if (!props.onSelection) return;
const vins = vehicles.map((item) => item.vin); const vins = vehicles.map((item) => item.vin);
props.onSelection(vins); props.onSelection(vins);
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [vehicles]); }, [vehicles]);
return ( return (

View File

@@ -16,6 +16,7 @@ import { useVehicleContext } from "../../Contexts/VehicleContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import { LocalDateTimeString } from "../../../utils/dates"; import { LocalDateTimeString } from "../../../utils/dates";
import TableHeaderSortable from "../../Table/HeaderSortable"; import TableHeaderSortable from "../../Table/HeaderSortable";
import { logger } from "../../../services/monitoring";
const tableColumns = [ const tableColumns = [
{ {
@@ -100,12 +101,15 @@ const CarSelectionTable = (props) => {
offset: pageSize * pageIndex, offset: pageSize * pageIndex,
order: `${orderBy} ${order}`, order: `${orderBy} ${order}`,
}; };
(async () => {
try { try {
getVehicles(Object.assign(options, search), token); await getVehicles(Object.assign(options, search), token);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
// eslint-disable-next-line })();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pageIndex, pageSize, orderBy, order, search, token]); }, [pageIndex, pageSize, orderBy, order, search, token]);
return ( return (

View File

@@ -20,6 +20,7 @@ import useStyles from "../../useStyles";
import { LocalDateTimeString } from "../../../utils/dates"; import { LocalDateTimeString } from "../../../utils/dates";
import TableHeaderSortable from "../../Table/HeaderSortable"; import TableHeaderSortable from "../../Table/HeaderSortable";
import SearchField from "../../Controls/SearchField"; import SearchField from "../../Controls/SearchField";
import { logger } from "../../../services/monitoring";
const tableColumns = [ const tableColumns = [
{ {
@@ -78,12 +79,13 @@ const MainForm = () => {
useEffect(() => { useEffect(() => {
setTitle("Vehicles"); setTitle("Vehicles");
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
useEffect(() => { useEffect(() => {
(async () => {
try { try {
getVehicles( await getVehicles(
{ {
limit: pageSize, limit: pageSize,
offset: pageSize * pageIndex, offset: pageSize * pageIndex,
@@ -94,8 +96,10 @@ const MainForm = () => {
); );
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
// eslint-disable-next-line })();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pageIndex, pageSize, token, orderBy, order, search]); }, [pageIndex, pageSize, token, orderBy, order, search]);
const handleChangePageIndex = (event, newIndex) => { const handleChangePageIndex = (event, newIndex) => {

View File

@@ -8,6 +8,7 @@ import commands from "../../../services/commands";
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import { useUserContext } from "../../Contexts/UserContext"; import { useUserContext } from "../../Contexts/UserContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import { logger } from "../../../services/monitoring";
const SendCommand = ({ vins }) => { const SendCommand = ({ vins }) => {
const classes = useStyles(); const classes = useStyles();
@@ -50,6 +51,7 @@ const SendCommand = ({ vins }) => {
} }
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.error(e.stack);
} }
}; };
@@ -69,7 +71,7 @@ const SendCommand = ({ vins }) => {
useEffect(() => { useEffect(() => {
if (!commands || commands.length === 0) return; if (!commands || commands.length === 0) return;
selectCommand(commands[0].value); selectCommand(commands[0].value);
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
return ( return (

View File

@@ -8,6 +8,7 @@ import useStyles from "../../useStyles";
import SendCommand from "../SendCommand"; import SendCommand from "../SendCommand";
import SearchField from "../../Controls/SearchField"; import SearchField from "../../Controls/SearchField";
import CarSelectionTable from "../CarSelectionTable"; import CarSelectionTable from "../CarSelectionTable";
import { logger } from "../../../services/monitoring";
const MainForm = () => { const MainForm = () => {
const classes = useStyles(); const classes = useStyles();
@@ -30,6 +31,7 @@ const MainForm = () => {
}; };
const handleSelect = (event, key) => { const handleSelect = (event, key) => {
try {
let newSelected; let newSelected;
if (event.target.checked) { if (event.target.checked) {
newSelected = [...selected]; newSelected = [...selected];
@@ -38,11 +40,14 @@ const MainForm = () => {
newSelected = selected.filter((vin) => vin !== key); newSelected = selected.filter((vin) => vin !== key);
} }
setSelected(newSelected); setSelected(newSelected);
} catch (e) {
logger.warn(e.stack);
}
}; };
useEffect(() => { useEffect(() => {
setTitle("Send Command"); setTitle("Send Command");
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
return ( return (

View File

@@ -19,6 +19,7 @@ import { useStatusContext } from "../../Contexts/StatusContext";
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import { LocalDateTimeString } from "../../../utils/dates"; import { LocalDateTimeString } from "../../../utils/dates";
import TableHeaderSortable from "../../Table/HeaderSortable"; import TableHeaderSortable from "../../Table/HeaderSortable";
import { logger } from "../../../services/monitoring";
const tableColumns = [ const tableColumns = [
{ {
@@ -60,11 +61,13 @@ const MainForm = () => {
useEffect(() => { useEffect(() => {
setTitle(`Vehicle ${vin} Details`); setTitle(`Vehicle ${vin} Details`);
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [vin]); }, [vin]);
useEffect(() => { useEffect(() => {
(async () => {
try { try {
getCarUpdates( await getCarUpdates(
{ {
vin, vin,
limit: pageSize, limit: pageSize,
@@ -75,8 +78,10 @@ const MainForm = () => {
); );
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
// eslint-disable-next-line })();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pageIndex, pageSize, token, orderBy, order]); }, [pageIndex, pageSize, token, orderBy, order]);
const handleChangePageIndex = (event, newIndex) => { const handleChangePageIndex = (event, newIndex) => {
@@ -89,6 +94,7 @@ const MainForm = () => {
}; };
const handleSort = (event, property) => { const handleSort = (event, property) => {
try {
if (property === orderBy) { if (property === orderBy) {
if (order === "asc") { if (order === "asc") {
setOrder("desc"); setOrder("desc");
@@ -99,6 +105,9 @@ const MainForm = () => {
setOrderBy(property); setOrderBy(property);
setOrder("asc"); setOrder("asc");
} }
} catch (e) {
logger.warn(e.stack);
}
}; };
return ( return (

View File

@@ -41,7 +41,7 @@ export default function CarStatusModal(props) {
setMessage(e.message); setMessage(e.message);
} }
})(); })();
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.vin]); }, [props.vin]);
return ( return (
<div> <div>

View File

@@ -1,4 +1,5 @@
import React, { useContext, useState } from "react"; import React, { useContext, useState } from "react";
import { logger } from "../../services/monitoring";
import api from "../../services/vehicles"; import api from "../../services/vehicles";
const VehicleContext = React.createContext(); const VehicleContext = React.createContext();
@@ -97,6 +98,7 @@ export const VehicleProvider = ({ children }) => {
}; };
const addConnections = async (cars, token) => { const addConnections = async (cars, token) => {
try {
const vins = cars.map((car) => car.vin); const vins = cars.map((car) => car.vin);
const result = await api.getConnections(vins, token); const result = await api.getConnections(vins, token);
@@ -106,6 +108,9 @@ export const VehicleProvider = ({ children }) => {
cars.forEach((car) => { cars.forEach((car) => {
car.connected = result[car.vin] || false; car.connected = result[car.vin] || false;
}); });
} catch (e) {
logger.error(e.stack);
}
}; };
const getConnections = async (vins, token) => { const getConnections = async (vins, token) => {

View File

@@ -12,7 +12,7 @@ const Dashboard = () => {
useEffect(() => { useEffect(() => {
setTitle("Dashboard"); setTitle("Dashboard");
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
return ( return (

View File

@@ -27,7 +27,7 @@ const Home = () => {
useEffect(() => { useEffect(() => {
setTitle(""); setTitle("");
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
return ( return (

View File

@@ -1,6 +1,8 @@
import React, { useEffect, useRef, useState } from "react"; import React, { useEffect, useRef, useState } from "react";
import { Redirect } from "react-router";
import { Button, TextField } from "@material-ui/core"; import { Button, TextField } from "@material-ui/core";
import { DropzoneArea } from "material-ui-dropzone"; import { DropzoneArea } from "material-ui-dropzone";
import { useUserContext } from "../../Contexts/UserContext"; import { useUserContext } from "../../Contexts/UserContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import { import {
@@ -9,7 +11,7 @@ import {
} from "../../Contexts/FileUploadContext"; } from "../../Contexts/FileUploadContext";
import ModalProgressBar from "../../ModalProgressBar"; import ModalProgressBar from "../../ModalProgressBar";
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import { Redirect } from "react-router"; import { logger } from "../../../services/monitoring";
const FileUploadZone = ({ classes, token }) => { const FileUploadZone = ({ classes, token }) => {
const { setFiles } = useFileUploadContext(); const { setFiles } = useFileUploadContext();
@@ -52,7 +54,7 @@ const MainForm = () => {
useEffect(() => { useEffect(() => {
setTitle("Create Update Package"); setTitle("Create Update Package");
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
const onSubmit = async (event) => { const onSubmit = async (event) => {
@@ -76,6 +78,7 @@ const MainForm = () => {
setRedirect(`/carupdate-deploy/${result.id}`); setRedirect(`/carupdate-deploy/${result.id}`);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
}; };

View File

@@ -10,6 +10,7 @@ import { useUserContext } from "../../Contexts/UserContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import { tsLocalDateTimeString } from "../../../utils/dates"; import { tsLocalDateTimeString } from "../../../utils/dates";
import { logger } from "../../../services/monitoring";
const MainForm = () => { const MainForm = () => {
const { id } = useParams(); const { id } = useParams();
@@ -42,6 +43,7 @@ const MainForm = () => {
setMessage(`Updated ${packageName} ${version}`); setMessage(`Updated ${packageName} ${version}`);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
}; };
const getData = async () => { const getData = async () => {
@@ -49,6 +51,7 @@ const MainForm = () => {
getPackages({ id: parseInt(id) }, token); getPackages({ id: parseInt(id) }, token);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
}; };
const handleChange = (event) => { const handleChange = (event) => {
@@ -70,7 +73,7 @@ const MainForm = () => {
useEffect(() => { useEffect(() => {
setTitle(`Edit Update Package ${id}`); setTitle(`Edit Update Package ${id}`);
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
useEffect(() => { useEffect(() => {

View File

@@ -24,6 +24,7 @@ import { LocalDateTimeString } from "../../../utils/dates";
import { Roles, hasRole } from "../../../utils/roles"; import { Roles, hasRole } from "../../../utils/roles";
import TableHeaderSortable from "../../Table/HeaderSortable"; import TableHeaderSortable from "../../Table/HeaderSortable";
import SearchField from "../../Controls/SearchField"; import SearchField from "../../Controls/SearchField";
import { logger } from "../../../services/monitoring";
const tableColumns = [ const tableColumns = [
{ {
@@ -67,7 +68,7 @@ const UpdatePackagesList = () => {
useEffect(() => { useEffect(() => {
setTitle("Deploy Packages"); setTitle("Deploy Packages");
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
useEffect(() => { useEffect(() => {
@@ -80,7 +81,7 @@ const UpdatePackagesList = () => {
}, },
token token
); );
// eslint-disable-next-line // eslint-disable-next-line react-hooks/exhaustive-deps
}, [pageIndex, pageSize, token, orderBy, order, search]); }, [pageIndex, pageSize, token, orderBy, order, search]);
const handleChangePageIndex = (event, newIndex) => { const handleChangePageIndex = (event, newIndex) => {
@@ -114,6 +115,7 @@ const UpdatePackagesList = () => {
await deletePackage(parseInt(package_id), token); await deletePackage(parseInt(package_id), token);
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
logger.warn(e.stack);
} }
}; };

View File

@@ -1,12 +1,30 @@
import { datadogRum } from '@datadog/browser-rum'; import { datadogRum } from '@datadog/browser-rum';
import { datadogLogs } from "@datadog/browser-logs";
const applicationId = '8ecd160c-ad5c-4e06-8d88-3a6b89833246';
const clientToken = 'pubeb25449bb91773fc993855c7378e375a';
const site = 'datadoghq.com';
const service = 'ota-portal';
datadogRum.init({ datadogRum.init({
applicationId: '8ecd160c-ad5c-4e06-8d88-3a6b89833246', applicationId,
clientToken: 'pubeb25449bb91773fc993855c7378e375a', clientToken,
site: 'datadoghq.com', site,
service:'ota-portal', service,
// Specify a version number to identify the deployed version of your application in Datadog // Specify a version number to identify the deployed version of your application in Datadog
// version: '1.0.0', // version: '1.0.0',
sampleRate: 100, sampleRate: 100,
trackInteractions: true trackInteractions: true
}); });
datadogLogs.init({
clientToken,
site,
service,
forwardErrorsToLogs: true,
sampleRate: 100,
});
const logger = datadogLogs.logger;
export { logger };

View File

@@ -1,3 +1,5 @@
import { logger } from "../services/monitoring";
export const getAuthHeaderOptions = (token) => ({ export const getAuthHeaderOptions = (token) => ({
"Authorization": `Bearer ${token}`, "Authorization": `Bearer ${token}`,
}); });
@@ -6,11 +8,17 @@ export const fetchRespHandler = (response) => {
if (response.ok) return response.json(); if (response.ok) return response.json();
return response.text() return response.text()
.then((text) => JSON.parse(text)) .then((text) => {
.catch((e) => ({ if (response.status >= 500) logger.error(text);
return JSON.parse(text);
})
.catch((e) => {
logger.error(e.stack);
return {
error: response.statusText, error: response.statusText,
message: `${response.status} ${response.statusText}`, message: `${response.status} ${response.statusText}`,
})) };
})
} }
export const addQueryParams = (url, params) => { export const addQueryParams = (url, params) => {