Skip to content

Commit 7a57245

Browse files
authored
fix crash in ui for empty log entries (#2457)
1 parent 9f433bc commit 7a57245

File tree

3 files changed

+55
-26
lines changed

3 files changed

+55
-26
lines changed

portal-ui/src/screens/Console/Logs/ErrorLogs/ErrorLogs.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,28 @@ const ErrorLogs = () => {
150150
// FORMAT: 00:35:17 UTC 01/01/2021
151151

152152
let m: LogMessage = JSON.parse(message.data.toString());
153-
m.time = moment(m.time, "HH:mm:s UTC MM/DD/YYYY").toDate();
153+
let isValidEntry = true;
154+
if (
155+
m.level === "" &&
156+
m.errKind === "" &&
157+
//@ts-ignore
158+
m.time === "00:00:00 UTC 01/01/0001" &&
159+
m.ConsoleMsg === "" &&
160+
m.node === ""
161+
) {
162+
isValidEntry = false;
163+
}
164+
const logTime = moment(m.time, "HH:mm:s UTC MM/DD/YYYY").toDate();
165+
166+
m.time = logTime;
154167
m.key = Math.random();
155168
if (userAgents.indexOf(m.userAgent) < 0 && m.userAgent !== undefined) {
156169
userAgents.push(m.userAgent);
157170
setUserAgents(userAgents);
158171
}
159-
dispatch(logMessageReceived(m));
172+
if (isValidEntry) {
173+
dispatch(logMessageReceived(m));
174+
}
160175
};
161176
c.onclose = () => {
162177
clearInterval(interval);

portal-ui/src/screens/Console/Logs/ErrorLogs/LogLine.tsx

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import BoxArrowUp from "../../../../icons/BoxArrowUp";
2525
import BoxArrowDown from "../../../../icons/BoxArrowDown";
2626
import WarnFilledIcon from "../../../../icons/WarnFilledIcon";
2727

28+
import getByKey from "lodash/get";
29+
2830
const messageForConsoleMsg = (log: LogMessage) => {
2931
// regex for terminal colors like e.g. `[31;4m `
3032
const tColorRegex = /((\[[0-9;]+m))/g;
@@ -72,49 +74,53 @@ const messageForError = (log: LogMessage) => {
7274
fontFamily: "monospace",
7375
fontSize: "12px",
7476
};
77+
78+
const getLogEntryKey = (keyPath: string) => {
79+
return getByKey(log, keyPath, "");
80+
};
81+
7582
return (
7683
<Fragment>
7784
<div>
7885
<b style={labelStyle}>API:&nbsp;</b>
79-
<span style={dataStyle}>{log.api.name}</span>
86+
<span style={dataStyle}>{getLogEntryKey("api.name")}</span>
8087
</div>
8188
<div>
8289
<b style={labelStyle}>Time:&nbsp;</b>
83-
<span style={dataStyle}>{log.time.toString()}</span>
90+
<span style={dataStyle}>{getLogEntryKey("time").toString()}</span>
8491
</div>
8592
<div>
8693
<b style={labelStyle}>DeploymentID:&nbsp;</b>
87-
<span style={dataStyle}>{log.deploymentid}</span>
94+
<span style={dataStyle}>{getLogEntryKey("deploymentid")}</span>
8895
</div>
8996
<div>
9097
<b style={labelStyle}>RequestID:&nbsp;</b>
91-
<span style={dataStyle}>{log.requestID}</span>
98+
<span style={dataStyle}>{getLogEntryKey("requestID")}</span>
9299
</div>
93100
<div>
94101
<b style={labelStyle}>RemoteHost:&nbsp;</b>
95-
<span style={dataStyle}>{log.remotehost}</span>
102+
<span style={dataStyle}>{getLogEntryKey("remotehost")}</span>
96103
</div>
97104
<div>
98105
<b style={labelStyle}>UserAgent:&nbsp;</b>
99-
<span style={dataStyle}>{log.userAgent}</span>
106+
<span style={dataStyle}>{getLogEntryKey("userAgent")}</span>
100107
</div>
101108
<div>
102109
<b style={labelStyle}>Error:&nbsp;</b>
103-
<span style={dataStyle}>{log.error && log.error.message}</span>
110+
<span style={dataStyle}>{getLogEntryKey("error.message")}</span>
104111
</div>
105112
<br />
106113
<div>
107114
<b style={labelStyle}>Backtrace:&nbsp;</b>
108115
</div>
109-
{log.error &&
110-
log.error.source.map((e, i) => {
111-
return (
112-
<div>
113-
<b style={labelStyle}>{i}:&nbsp;</b>
114-
<span style={dataStyle}>{e}</span>
115-
</div>
116-
);
117-
})}
116+
{(getLogEntryKey("error.source") || []).map((e: any, i: number) => {
117+
return (
118+
<div>
119+
<b style={labelStyle}>{i}:&nbsp;</b>
120+
<span style={dataStyle}>{e}</span>
121+
</div>
122+
);
123+
})}
118124
</Fragment>
119125
);
120126
};
@@ -123,28 +129,34 @@ const LogLine = (props: { log: LogMessage }) => {
123129
const { log } = props;
124130
const [open, setOpen] = useState<boolean>(false);
125131

132+
const getLogLineKey = (keyPath: string) => {
133+
return getByKey(log, keyPath, "");
134+
};
135+
126136
let logMessage = "";
127-
if (log.ConsoleMsg !== "") {
128-
logMessage = log.ConsoleMsg;
129-
} else if (log.error !== null && log.error.message !== "") {
130-
logMessage = log.error.message;
137+
let consoleMsg = getLogLineKey("ConsoleMsg");
138+
let errMsg = getLogLineKey("error.message");
139+
if (consoleMsg !== "") {
140+
logMessage = consoleMsg;
141+
} else if (errMsg !== "") {
142+
logMessage = errMsg;
131143
}
132144
// remove any non ascii characters, exclude any control codes
133-
let titleLogMessage = logMessage.replace(/|||||/g, "");
145+
let titleLogMessage = (logMessage || "").replace(/|||||/g, "");
134146
// remove any non ascii characters, exclude any control codes
135147
titleLogMessage = titleLogMessage.replace(/([^\x20-\x7F])/g, "");
136148

137149
// regex for terminal colors like e.g. `[31;4m `
138150
const tColorRegex = /((\[[0-9;]+m))/g;
139151

140152
let fullMessage = <Fragment />;
141-
if (log.ConsoleMsg !== "") {
153+
if (consoleMsg !== "") {
142154
fullMessage = messageForConsoleMsg(log);
143-
} else if (log.error !== null && log.error.message !== "") {
155+
} else if (errMsg !== "") {
144156
fullMessage = messageForError(log);
145157
}
146158

147-
titleLogMessage = titleLogMessage.replace(tColorRegex, "");
159+
titleLogMessage = (titleLogMessage || "").replace(tColorRegex, "");
148160

149161
let dateStr = <Moment format="YYYY/MM/DD UTC HH:mm:ss">{log.time}</Moment>;
150162
if (log.time.getFullYear() === 1) {

portal-ui/src/screens/Console/Logs/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,6 @@ export interface LogMessage {
4242
ConsoleMsg: string;
4343
key: number;
4444
errKind: string;
45+
level?: string | number;
46+
node?: string | number;
4547
}

0 commit comments

Comments
 (0)