Skip to content

Commit 2fbac41

Browse files
authored
feat: live log args (#18)
1 parent 42143be commit 2fbac41

File tree

5 files changed

+69
-13
lines changed

5 files changed

+69
-13
lines changed

src/control/ContextReceiver.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {Debugger} from "inspector";
88
import VariableUtil from "../util/VariableUtil";
99
import ProbeMemory from "../ProbeMemory";
1010
import SourcePlusPlus from "../SourcePlusPlus";
11+
import LiveLog from "../model/instruments/LiveLog";
1112

1213
const debugLog = (...args: any[]) => SourcePlusPlus.debugLog(args);
1314

@@ -25,7 +26,7 @@ namespace ContextReceiver {
2526
for (let scope in variables) {
2627
for (let variable of variables[scope]) {
2728
if (variable.name === varName) {
28-
return variable;
29+
return variable.value?.value;
2930
}
3031
}
3132
}
@@ -113,18 +114,25 @@ namespace ContextReceiver {
113114
}
114115
}
115116

116-
export function applyLog(liveLogId: string, logFormat: string, logArguments: any) {
117-
debugLog(`applyLog: ${liveLogId} ${logFormat} ${logArguments}`);
117+
export function applyLog(liveLog: LiveLog, variables) {
118+
debugLog(`applyLog: ${liveLog.id} ${liveLog.logFormat}`);
119+
120+
if (liveLog.throttle.isRateLimited()) {
121+
return;
122+
} else {
123+
//todo: eval condition
124+
}
125+
118126
let logTags = new LogTags();
119-
logTags.addData(new KeyStringValuePair().setKey('log_id').setValue(liveLogId));
127+
logTags.addData(new KeyStringValuePair().setKey('log_id').setValue(liveLog.id));
120128
logTags.addData(new KeyStringValuePair().setKey('level').setValue('Live'));
121129
logTags.addData(new KeyStringValuePair().setKey('thread').setValue('n/a'));
122130

123-
if (logArguments) {
124-
for (const varName in logArguments) {
131+
if (liveLog.logArguments) {
132+
for (const varIndex in liveLog.logArguments) {
125133
logTags.addData(new KeyStringValuePair()
126-
.setKey(`argument.${varName}`)
127-
.setValue(logArguments[varName]));
134+
.setKey(`argument.${varIndex}`)
135+
.setValue(tryFindVariable(liveLog.logArguments[varIndex], variables).toString() || 'undefined'));
128136
}
129137
}
130138

@@ -135,7 +143,7 @@ namespace ContextReceiver {
135143
.setServiceinstance("TODO") // TODO: Config
136144
.setBody(new LogDataBody()
137145
.setType("text")
138-
.setText(new TextLog().setText(logFormat))
146+
.setText(new TextLog().setText(liveLog.logFormat))
139147
)
140148
.setTracecontext(new TraceContext()
141149
.setTraceid(swContext.segment.relatedTraces[0].toString())

src/control/LiveInstrumentRemote.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,8 @@ export default class LiveInstrumentRemote {
161161
} else if (instrument.type == LiveInstrumentType.LOG) {
162162
let logInstrument = <LiveLog>instrument;
163163
ContextReceiver.applyLog(
164-
instrument.id,
165-
logInstrument.logFormat,
166-
data[i].logArguments
164+
logInstrument,
165+
variables
167166
);
168167
} else if (instrument.type == LiveInstrumentType.METER) {
169168
let meterInstrument = <LiveMeter>instrument;

src/model/instruments/LiveLog.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default class LiveLog extends LiveInstrument {
2121
if (${this.condition}) {
2222
let data = {success: true};
2323
(data => {${logArgumentsExpression}})(data);
24-
returndata;
24+
return data;
2525
} else {
2626
return {success: false};
2727
}

test/LiveLogArgsTest.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
const assert = require('assert');
2+
const TestUtils = require("./TestUtils.js");
3+
4+
module.exports = function () {
5+
function simplePrimitives() {
6+
let i = 1
7+
TestUtils.addLineLabel("done", () => TestUtils.getLineNumber())
8+
}
9+
10+
it('add live log with args', async function () {
11+
simplePrimitives() //setup labels
12+
13+
await TestUtils.addLiveLog({
14+
"source": TestUtils.getFilename()(),
15+
"line": TestUtils.getLineLabelNumber("done")
16+
}, null, 1, "arg i = {}", ["i"]).then(function (res) {
17+
assert.equal(res.status, 200);
18+
simplePrimitives(); //trigger breakpoint
19+
}).catch(function (err) {
20+
assert.fail(err)
21+
});
22+
});
23+
24+
it('verify log data', async function () {
25+
this.timeout(2000)
26+
27+
setTimeout(() => simplePrimitives(), 1000);
28+
29+
let event = await TestUtils.awaitMarkerEvent("LOG_HIT");
30+
let logResult = event.logResult
31+
assert.notEqual(logResult, undefined);
32+
33+
let logs = logResult.logs
34+
assert.notEqual(logs, undefined);
35+
assert.equal(logs.length, 1);
36+
37+
let log = logs[0]
38+
assert.notEqual(log, undefined);
39+
assert.equal(log.content, "arg i = {}");
40+
41+
let args = log.arguments
42+
assert.notEqual(args, undefined);
43+
assert.equal(args.length, 1);
44+
45+
let arg = args[0]
46+
assert.equal(arg, "1");
47+
});
48+
};

test/test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ describe("test breakpoint after breakpoint", require("./BreakpointAfterBreakpoin
77
describe("test simple primitives", require("./SimplePrimitivesLiveInstrumentTest"));
88
describe("test simple collections", require("./SimpleCollectionsLiveInstrumentTest"));
99
describe("test live log", require("./LiveLogTest"));
10+
describe("test live log with args", require("./LiveLogArgsTest"));
1011
describe("test hit limit", require("./HitLimitTest"));

0 commit comments

Comments
 (0)