Skip to content

Commit f298f71

Browse files
committed
pretty display structured logs
1 parent 7c237a7 commit f298f71

5 files changed

Lines changed: 99 additions & 7 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
"react-dom": "^18.2.0",
6565
"react-edit-text": "^5.1.1",
6666
"react-icons": "^5.0.1",
67+
"react-json-view-lite": "^1.4.0",
6768
"react-perfect-scrollbar": "^1.5.8",
6869
"react-router": "^6.15.0",
6970
"react-router-dom": "^6.22.2",

pnpm-lock.yaml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/molecules/flow/graph/Graph.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ class Graph {
159159
const sNode = new setVarNode(node.data, prevNodeOutputData, this.envVariables);
160160
const newVariable = sNode.evaluate();
161161
if (newVariable != undefined) {
162-
this.logger.add(LogLevel.INFO, 'Set Variable', {
162+
this.logger.add(LogLevel.INFO, '', {
163163
type: 'setVarNode',
164164
data: {
165165
name: Object.keys(newVariable)[0],
@@ -177,7 +177,6 @@ class Graph {
177177
}
178178

179179
if (this.#checkTimeout()) {
180-
this.logger.add(LogLevel.ERROR, `Timeout of ${this.timeout} ms exceeded, stopping graph run`, node);
181180
throw `Timeout of ${this.timeout} ms exceeded, stopping graph run`;
182181
}
183182
} catch (err) {

src/components/molecules/flow/graph/compute/assertnode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class assertNode extends Node {
5252
default:
5353
throw 'Unsupported operator';
5454
}
55-
this.logger.add(LogLevel.INFO, '', { type: 'assertNode', data: { var1, var2, result } });
55+
this.logger.add(LogLevel.INFO, '', { type: 'assertNode', data: { var1, var2, operator, result } });
5656

5757
return result;
5858
}

src/components/molecules/headers/TabPanelHeader.js

Lines changed: 83 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import 'react-sliding-pane/dist/react-sliding-pane.css';
1313
import TimeoutSelector from 'components/atoms/common/TimeoutSelector';
1414
import { timeoutForGraphRun } from 'components/molecules/flow/utils';
1515
import HorizontalDivider from 'components/atoms/common/HorizontalDivider';
16+
import { JsonView, allExpanded, collapseAllNested, darkStyles, defaultStyles } from 'react-json-view-lite';
17+
import 'react-json-view-lite/dist/index.css';
18+
import { LogLevel } from '../flow/graph/GraphLogger';
1619

1720
const TabPanelHeader = () => {
1821
const focusTabId = useTabStore((state) => state.focusTabId);
@@ -31,6 +34,84 @@ const TabPanelHeader = () => {
3134

3235
const [generateFlowTestModalOpen, setGenerateFlowTestModalOpen] = useState(false);
3336

37+
const renderLog = (log) => {
38+
if (log.logLevel === LogLevel.INFO) {
39+
let message = '';
40+
let json = undefined;
41+
if (log.message.trim() != '') {
42+
message = log.message;
43+
}
44+
45+
if (log.node != undefined) {
46+
const type = log.node.type;
47+
if (type === 'outputNode') {
48+
json = {
49+
output: log.node.data,
50+
};
51+
}
52+
53+
if (type === 'assertNode') {
54+
const data = log.node.data;
55+
message = `Assert : ${data.var1} ${data.operator} ${data.var2} = ${data.result}`;
56+
}
57+
58+
if (type === 'delayNode') {
59+
message = `Waiting for ${log.node.data} ms`;
60+
}
61+
62+
if (type === 'setVarNode') {
63+
const data = log.node.data;
64+
message = `Setting Variable: ${data.name} = ${data.value}`;
65+
}
66+
67+
if (type === 'requestNode') {
68+
const data = log.node.data;
69+
message = `${data.request.type.toUpperCase()} ${data.request.url}`;
70+
json = data;
71+
}
72+
}
73+
74+
return (
75+
<div className='flex flex-col items-start'>
76+
<div className='flex flex-row items-start'>
77+
<div>
78+
<p style={{ color: 'red' }}>{log.timestamp}</p>
79+
</div>
80+
<div>
81+
<p> : {message}</p>
82+
</div>
83+
</div>
84+
<div>
85+
{json != undefined ? (
86+
<React.Fragment>
87+
<JsonView data={json} shouldExpandNode={collapseAllNested} style={defaultStyles} />
88+
</React.Fragment>
89+
) : (
90+
<></>
91+
)}
92+
</div>
93+
</div>
94+
);
95+
} else {
96+
return (
97+
<div className='flex flex-col items-start'>
98+
<p style={{ color: 'red' }}>
99+
{log.timestamp} : {log.message}
100+
</p>
101+
<div>
102+
{log.node != undefined ? (
103+
<React.Fragment>
104+
<JsonView data={log.node.data} shouldExpandNode={collapseAllNested} style={defaultStyles} />
105+
</React.Fragment>
106+
) : (
107+
<></>
108+
)}
109+
</div>
110+
</div>
111+
);
112+
}
113+
};
114+
34115
return (
35116
<>
36117
{focusTab ? (
@@ -97,11 +178,9 @@ const TabPanelHeader = () => {
97178
aria-label='close sidebar'
98179
className='drawer-overlay'
99180
></label>
100-
<ul className='min-h-full p-4 menu w-80 bg-base-200 text-base-content'>
181+
<ul className='min-h-full p-4 menu bg-base-200 text-base-content'>
101182
{graphRunLogs.map((item, index) => (
102-
<li key={index}>
103-
<a>{JSON.stringify(item)}</a>
104-
</li>
183+
<li key={index}>{renderLog(item)}</li>
105184
))}
106185
</ul>
107186
</SlidingPane>

0 commit comments

Comments
 (0)