CEC-279 Add logger (#62)

* CEC-279 Add logger

* Error log 500 status requests
This commit is contained in:
John Wu
2021-06-24 10:17:34 -07:00
committed by GitHub
parent f4e4261d01
commit 8bb245a417
17 changed files with 159 additions and 100 deletions

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

@@ -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

@@ -4,12 +4,13 @@ import { datadogLogs } from "@datadog/browser-logs";
const applicationId = '8ecd160c-ad5c-4e06-8d88-3a6b89833246'; const applicationId = '8ecd160c-ad5c-4e06-8d88-3a6b89833246';
const clientToken = 'pubeb25449bb91773fc993855c7378e375a'; const clientToken = 'pubeb25449bb91773fc993855c7378e375a';
const site = 'datadoghq.com'; const site = 'datadoghq.com';
const service = 'ota-portal';
datadogRum.init({ datadogRum.init({
applicationId, applicationId,
clientToken, clientToken,
site, 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,
@@ -19,6 +20,7 @@ datadogRum.init({
datadogLogs.init({ datadogLogs.init({
clientToken, clientToken,
site, site,
service,
forwardErrorsToLogs: true, forwardErrorsToLogs: true,
sampleRate: 100, sampleRate: 100,
}); });

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) => {