roku-debug 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/LaunchConfiguration.d.ts +6 -0
- package/dist/RendezvousTracker.d.ts +54 -1
- package/dist/RendezvousTracker.js +225 -50
- package/dist/RendezvousTracker.js.map +1 -1
- package/dist/adapters/DebugProtocolAdapter.d.ts +3 -4
- package/dist/adapters/DebugProtocolAdapter.js +2 -7
- package/dist/adapters/DebugProtocolAdapter.js.map +1 -1
- package/dist/adapters/TelnetAdapter.d.ts +3 -4
- package/dist/adapters/TelnetAdapter.js +2 -7
- package/dist/adapters/TelnetAdapter.js.map +1 -1
- package/dist/debugSession/BrightScriptDebugSession.d.ts +7 -1
- package/dist/debugSession/BrightScriptDebugSession.js +44 -12
- package/dist/debugSession/BrightScriptDebugSession.js.map +1 -1
- package/dist/util.d.ts +2 -1
- package/dist/util.js +2 -2
- package/dist/util.js.map +1 -1
- package/package.json +4 -4
- package/roku-debug-0.20.0.tgz +0 -0
- package/roku-debug-0.19.0.tgz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## [0.20.0](https://github.com/rokucommunity/roku-debug/compare/v0.19.1...v0.20.0) - 2023-07-05
|
|
10
|
+
### Added
|
|
11
|
+
- Support sgrendezvous through ECP ([#150](https://github.com/rokucommunity/roku-debug/pull/150))
|
|
12
|
+
### Changed
|
|
13
|
+
- upgrade to [brighterscript@0.65.1](https://github.com/rokucommunity/brighterscript/blob/master/CHANGELOG.md#0651---2023-06-09)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [0.19.1](https://github.com/rokucommunity/roku-debug/compare/v0.19.0...v0.19.1) - 2023-06-08
|
|
18
|
+
### Changed
|
|
19
|
+
- Move @types/request to deps to fix d.bs files ([691a7be](https://github.com/rokucommunity/roku-debug/commit/691a7be))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
9
23
|
## [0.19.0](https://github.com/rokucommunity/roku-debug/compare/v0.18.12...v0.19.0) - 2023-06-01
|
|
10
24
|
### Added
|
|
11
25
|
- File logging ([#155](https://github.com/rokucommunity/roku-debug/pull/155))
|
|
@@ -217,6 +217,12 @@ export interface LaunchConfiguration extends DebugProtocol.LaunchRequestArgument
|
|
|
217
217
|
* Show variables that are prefixed with a special prefix designated to be hidden
|
|
218
218
|
*/
|
|
219
219
|
showHiddenVariables: boolean;
|
|
220
|
+
/**
|
|
221
|
+
* If true: turn on ECP rendezvous tracking, or turn on 8080 rendezvous tracking if ECP unsupported
|
|
222
|
+
* If false, turn off both.
|
|
223
|
+
* @default true
|
|
224
|
+
*/
|
|
225
|
+
rendezvousTracking: boolean;
|
|
220
226
|
}
|
|
221
227
|
export interface ComponentLibraryConfiguration {
|
|
222
228
|
/**
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import type { SourceLocation } from './managers/LocationManager';
|
|
2
2
|
export declare class RendezvousTracker {
|
|
3
|
-
|
|
3
|
+
private deviceInfo;
|
|
4
|
+
constructor(deviceInfo: any);
|
|
4
5
|
private clientPathsMap;
|
|
5
6
|
private emitter;
|
|
6
7
|
private filterOutLogs;
|
|
7
8
|
private rendezvousBlocks;
|
|
8
9
|
private rendezvousHistory;
|
|
10
|
+
/**
|
|
11
|
+
* Where should the rendezvous data be tracked from? If ecp, then the ecp ping data will be reported. If telnet, then any
|
|
12
|
+
* rendezvous data from telnet will reported. If 'off', then no data will be reported
|
|
13
|
+
*/
|
|
14
|
+
private trackingSource;
|
|
15
|
+
/**
|
|
16
|
+
* Determine if the current Roku device supports the ECP rendezvous tracking feature
|
|
17
|
+
*/
|
|
18
|
+
get doesHostSupportEcpRendezvousTracking(): boolean;
|
|
19
|
+
logger: import("@rokucommunity/logger/dist/Logger").Logger;
|
|
9
20
|
on(eventname: 'rendezvous', handler: (output: RendezvousHistory) => void): any;
|
|
10
21
|
private emit;
|
|
11
22
|
get getRendezvousHistory(): RendezvousHistory;
|
|
@@ -26,6 +37,32 @@ export declare class RendezvousTracker {
|
|
|
26
37
|
* Clears the current rendezvous history
|
|
27
38
|
*/
|
|
28
39
|
clearHistory(): void;
|
|
40
|
+
private ecpPingTimer;
|
|
41
|
+
startEcpPingTimer(): void;
|
|
42
|
+
stopEcpPingTimer(): void;
|
|
43
|
+
pingEcpRendezvous(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Determine if rendezvous tracking is enabled via the 8080 telnet command
|
|
46
|
+
*/
|
|
47
|
+
getIsTelnetRendezvousTrackingEnabled(): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Run a SceneGraph logendezvous 8080 command and get the text output
|
|
50
|
+
*/
|
|
51
|
+
private runSGLogrendezvousCommand;
|
|
52
|
+
/**
|
|
53
|
+
* Determine if rendezvous tracking is enabled via the ECP command
|
|
54
|
+
*/
|
|
55
|
+
getIsEcpRendezvousTrackingEnabled(): Promise<boolean>;
|
|
56
|
+
activate(): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Get the response from an ECP sgrendezvous request from the Roku
|
|
59
|
+
*/
|
|
60
|
+
getEcpRendezvous(): Promise<EcpRendezvousData>;
|
|
61
|
+
/**
|
|
62
|
+
* Enable/Disable ECP Rendezvous tracking on the Roku device
|
|
63
|
+
* @returns true if successful, false if there was an issue setting the value
|
|
64
|
+
*/
|
|
65
|
+
toggleEcpRendezvousTracking(toggle: 'track' | 'untrack'): Promise<boolean>;
|
|
29
66
|
/**
|
|
30
67
|
* Takes the debug output from the device and parses it for any rendezvous information.
|
|
31
68
|
* Also if consoleOutput was not set to 'full' then any rendezvous output will be filtered from the output.
|
|
@@ -33,6 +70,7 @@ export declare class RendezvousTracker {
|
|
|
33
70
|
* @returns The debug output after parsing
|
|
34
71
|
*/
|
|
35
72
|
processLog(log: string): Promise<string>;
|
|
73
|
+
private parseRendezvousLog;
|
|
36
74
|
/**
|
|
37
75
|
* Checks the client path map for existing path data and adds new data to the map if not found
|
|
38
76
|
* @param fileName The filename or path parsed from the rendezvous output
|
|
@@ -56,6 +94,10 @@ export declare class RendezvousTracker {
|
|
|
56
94
|
* @param duration how long the rendezvous took to complete, if not supplied it is assumed to be zero
|
|
57
95
|
*/
|
|
58
96
|
private getTime;
|
|
97
|
+
/**
|
|
98
|
+
* Destroy/tear down this class
|
|
99
|
+
*/
|
|
100
|
+
destroy(): Promise<void>;
|
|
59
101
|
}
|
|
60
102
|
export interface RendezvousHistory {
|
|
61
103
|
hitCount: number;
|
|
@@ -78,5 +120,16 @@ interface RendezvousLineInfo {
|
|
|
78
120
|
totalTime: number;
|
|
79
121
|
type: ElementType;
|
|
80
122
|
}
|
|
123
|
+
interface EcpRendezvousData {
|
|
124
|
+
trackingEnabled: boolean;
|
|
125
|
+
items: EcpRendezvousItem[];
|
|
126
|
+
}
|
|
127
|
+
interface EcpRendezvousItem {
|
|
128
|
+
id: string;
|
|
129
|
+
startTime: string;
|
|
130
|
+
endTime: string;
|
|
131
|
+
lineNumber: string;
|
|
132
|
+
file: string;
|
|
133
|
+
}
|
|
81
134
|
declare type ElementType = 'fileInfo' | 'historyInfo' | 'lineInfo';
|
|
82
135
|
export {};
|
|
@@ -4,14 +4,33 @@ exports.RendezvousTracker = void 0;
|
|
|
4
4
|
const events_1 = require("events");
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const replaceLast = require("replace-last");
|
|
7
|
+
const logging_1 = require("./logging");
|
|
8
|
+
const SceneGraphDebugCommandController_1 = require("./SceneGraphDebugCommandController");
|
|
9
|
+
const xml2js = require("xml2js");
|
|
10
|
+
const util_1 = require("./util");
|
|
11
|
+
const semver = require("semver");
|
|
12
|
+
const telnetRendezvousString = 'on\n';
|
|
7
13
|
class RendezvousTracker {
|
|
8
|
-
constructor() {
|
|
14
|
+
constructor(deviceInfo) {
|
|
15
|
+
this.deviceInfo = deviceInfo;
|
|
16
|
+
/**
|
|
17
|
+
* Where should the rendezvous data be tracked from? If ecp, then the ecp ping data will be reported. If telnet, then any
|
|
18
|
+
* rendezvous data from telnet will reported. If 'off', then no data will be reported
|
|
19
|
+
*/
|
|
20
|
+
this.trackingSource = 'off';
|
|
21
|
+
this.logger = logging_1.logger.createLogger(`[${RendezvousTracker.name}]`);
|
|
9
22
|
this.clientPathsMap = {};
|
|
10
23
|
this.emitter = new events_1.EventEmitter();
|
|
11
24
|
this.filterOutLogs = true;
|
|
12
25
|
this.rendezvousBlocks = {};
|
|
13
26
|
this.rendezvousHistory = this.createNewRendezvousHistory();
|
|
14
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Determine if the current Roku device supports the ECP rendezvous tracking feature
|
|
30
|
+
*/
|
|
31
|
+
get doesHostSupportEcpRendezvousTracking() {
|
|
32
|
+
return semver.gte(this.deviceInfo['software-version'], '11.5.0');
|
|
33
|
+
}
|
|
15
34
|
on(eventName, handler) {
|
|
16
35
|
this.emitter.on(eventName, handler);
|
|
17
36
|
return () => {
|
|
@@ -46,6 +65,137 @@ class RendezvousTracker {
|
|
|
46
65
|
this.rendezvousHistory = this.createNewRendezvousHistory();
|
|
47
66
|
this.emit('rendezvous', this.rendezvousHistory);
|
|
48
67
|
}
|
|
68
|
+
startEcpPingTimer() {
|
|
69
|
+
if (!this.ecpPingTimer) {
|
|
70
|
+
this.ecpPingTimer = setInterval(() => {
|
|
71
|
+
void this.pingEcpRendezvous();
|
|
72
|
+
}, 1000);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
stopEcpPingTimer() {
|
|
76
|
+
if (this.ecpPingTimer) {
|
|
77
|
+
clearInterval(this.ecpPingTimer);
|
|
78
|
+
this.ecpPingTimer = undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async pingEcpRendezvous() {
|
|
82
|
+
// Get ECP rendezvous data, parse it, and send it to event emitter
|
|
83
|
+
let ecpData = await this.getEcpRendezvous();
|
|
84
|
+
for (let blockInfo of ecpData.items) {
|
|
85
|
+
let duration = ((parseInt(blockInfo.endTime) - parseInt(blockInfo.startTime)) / 1000).toString();
|
|
86
|
+
this.rendezvousBlocks[blockInfo.id] = {
|
|
87
|
+
fileName: await this.updateClientPathMap(blockInfo.file, parseInt(blockInfo.lineNumber)),
|
|
88
|
+
lineNumber: blockInfo.lineNumber
|
|
89
|
+
};
|
|
90
|
+
this.parseRendezvousLog(this.rendezvousBlocks[blockInfo.id], duration);
|
|
91
|
+
}
|
|
92
|
+
this.emit('rendezvous', this.rendezvousHistory);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Determine if rendezvous tracking is enabled via the 8080 telnet command
|
|
96
|
+
*/
|
|
97
|
+
async getIsTelnetRendezvousTrackingEnabled() {
|
|
98
|
+
var _a, _b;
|
|
99
|
+
return ((_b = (_a = (await this.runSGLogrendezvousCommand('status'))) === null || _a === void 0 ? void 0 : _a.trim()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'on';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Run a SceneGraph logendezvous 8080 command and get the text output
|
|
103
|
+
*/
|
|
104
|
+
async runSGLogrendezvousCommand(command) {
|
|
105
|
+
let sgDebugCommandController = new SceneGraphDebugCommandController_1.SceneGraphDebugCommandController(this.deviceInfo.host);
|
|
106
|
+
try {
|
|
107
|
+
return (await sgDebugCommandController.logrendezvous(command)).result.rawResponse;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.logger.warn(`An error occurred running SG command "${command}"`, error);
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
await sgDebugCommandController.end();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Determine if rendezvous tracking is enabled via the ECP command
|
|
118
|
+
*/
|
|
119
|
+
async getIsEcpRendezvousTrackingEnabled() {
|
|
120
|
+
let ecpData = await this.getEcpRendezvous();
|
|
121
|
+
return ecpData.trackingEnabled;
|
|
122
|
+
}
|
|
123
|
+
async activate() {
|
|
124
|
+
//if ECP tracking is supported, turn that on
|
|
125
|
+
if (this.doesHostSupportEcpRendezvousTracking) {
|
|
126
|
+
// Toggle ECP tracking off and on to clear the log and then continue tracking
|
|
127
|
+
let untrack = await this.toggleEcpRendezvousTracking('untrack');
|
|
128
|
+
let track = await this.toggleEcpRendezvousTracking('track');
|
|
129
|
+
const isEcpTrackingEnabled = untrack && track && await this.getIsEcpRendezvousTrackingEnabled();
|
|
130
|
+
if (isEcpTrackingEnabled) {
|
|
131
|
+
this.trackingSource = 'ecp';
|
|
132
|
+
this.startEcpPingTimer();
|
|
133
|
+
//disable telnet rendezvous tracking since ECP is working
|
|
134
|
+
try {
|
|
135
|
+
await this.runSGLogrendezvousCommand('off');
|
|
136
|
+
}
|
|
137
|
+
catch (_a) { }
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//ECP tracking is not supported (or had an issue). Try enabling telnet rendezvous tracking (that only works with run_as_process=0, but worth a try...)
|
|
142
|
+
await this.runSGLogrendezvousCommand('on');
|
|
143
|
+
if (await this.getIsTelnetRendezvousTrackingEnabled()) {
|
|
144
|
+
this.trackingSource = 'telnet';
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get the response from an ECP sgrendezvous request from the Roku
|
|
151
|
+
*/
|
|
152
|
+
async getEcpRendezvous() {
|
|
153
|
+
// Send rendezvous query to ECP
|
|
154
|
+
const rendezvousQuery = await util_1.util.httpGet(`http://${this.deviceInfo.host}:${this.deviceInfo.remotePort}/query/sgrendezvous`);
|
|
155
|
+
let rendezvousQueryData = rendezvousQuery.body;
|
|
156
|
+
let ecpData = {
|
|
157
|
+
trackingEnabled: false,
|
|
158
|
+
items: []
|
|
159
|
+
};
|
|
160
|
+
// Parse rendezvous query data
|
|
161
|
+
await new Promise((resolve, reject) => {
|
|
162
|
+
xml2js.parseString(rendezvousQueryData, (err, result) => {
|
|
163
|
+
if (err) {
|
|
164
|
+
reject(err);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const itemArray = result.sgrendezvous.data[0].item;
|
|
168
|
+
ecpData.trackingEnabled = result.sgrendezvous.data[0]['tracking-enabled'][0];
|
|
169
|
+
if (Array.isArray(itemArray)) {
|
|
170
|
+
ecpData.items = itemArray.map((obj) => ({
|
|
171
|
+
id: obj.id[0],
|
|
172
|
+
startTime: obj['start-tm'][0],
|
|
173
|
+
endTime: obj['end-tm'][0],
|
|
174
|
+
lineNumber: obj['line-number'][0],
|
|
175
|
+
file: obj.file[0]
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
resolve(ecpData);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
return ecpData;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Enable/Disable ECP Rendezvous tracking on the Roku device
|
|
186
|
+
* @returns true if successful, false if there was an issue setting the value
|
|
187
|
+
*/
|
|
188
|
+
async toggleEcpRendezvousTracking(toggle) {
|
|
189
|
+
try {
|
|
190
|
+
const response = await util_1.util.httpPost(`http://${this.deviceInfo.host}:${this.deviceInfo.remotePort}/sgrendezvous/${toggle}`,
|
|
191
|
+
//not sure if we need this, but it works...so probably better to just leave it here
|
|
192
|
+
{ body: '' });
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
49
199
|
/**
|
|
50
200
|
* Takes the debug output from the device and parses it for any rendezvous information.
|
|
51
201
|
* Also if consoleOutput was not set to 'full' then any rendezvous output will be filtered from the output.
|
|
@@ -53,7 +203,6 @@ class RendezvousTracker {
|
|
|
53
203
|
* @returns The debug output after parsing
|
|
54
204
|
*/
|
|
55
205
|
async processLog(log) {
|
|
56
|
-
var _a, _b;
|
|
57
206
|
let dataChanged = false;
|
|
58
207
|
let lines = log.split('\n');
|
|
59
208
|
for (let i = 0; i < lines.length; i++) {
|
|
@@ -61,58 +210,25 @@ class RendezvousTracker {
|
|
|
61
210
|
let match = /\[sg\.node\.(BLOCK|UNBLOCK)\s{0,}\] Rendezvous\[(\d+)\](?:\s\w+\n|\s\w{2}\s(.*)\((\d+)\)|[\s\w]+(\d+\.\d+)+|\s\w+)/g.exec(line);
|
|
62
211
|
// see the following for an explanation for this regex: https://regex101.com/r/In0t7d/6
|
|
63
212
|
if (match) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
else if (type === 'UNBLOCK' && this.rendezvousBlocks[id]) {
|
|
73
|
-
// detected the completion of a rendezvous event
|
|
74
|
-
dataChanged = true;
|
|
75
|
-
let blockInfo = this.rendezvousBlocks[id];
|
|
76
|
-
let clientLineNumber = (_b = (_a = this.clientPathsMap[blockInfo.fileName]) === null || _a === void 0 ? void 0 : _a.clientLines[blockInfo.lineNumber].toString()) !== null && _b !== void 0 ? _b : blockInfo.lineNumber;
|
|
77
|
-
if (this.rendezvousHistory.occurrences[blockInfo.fileName]) {
|
|
78
|
-
// file is in history
|
|
79
|
-
if (this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber]) {
|
|
80
|
-
// line is in history, just update it
|
|
81
|
-
this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].totalTime += this.getTime(duration);
|
|
82
|
-
this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].hitCount++;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
// new line to be added to a file in history
|
|
86
|
-
this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber] = this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
// new file to be added to the history
|
|
91
|
-
this.rendezvousHistory.occurrences[blockInfo.fileName] = {
|
|
92
|
-
occurrences: {
|
|
93
|
-
[clientLineNumber]: this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration)
|
|
94
|
-
},
|
|
95
|
-
hitCount: 0,
|
|
96
|
-
totalTime: 0,
|
|
97
|
-
type: 'fileInfo',
|
|
98
|
-
zeroCostHitCount: 0
|
|
213
|
+
if (this.trackingSource === 'telnet') {
|
|
214
|
+
let [, type, id, fileName, lineNumber, duration] = match;
|
|
215
|
+
if (type === 'BLOCK') {
|
|
216
|
+
// detected the start of a rendezvous event
|
|
217
|
+
this.rendezvousBlocks[id] = {
|
|
218
|
+
fileName: await this.updateClientPathMap(fileName, parseInt(lineNumber)),
|
|
219
|
+
lineNumber: lineNumber
|
|
99
220
|
};
|
|
100
221
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
this.rendezvousHistory.totalTime += timeToAdd;
|
|
109
|
-
if (timeToAdd === 0) {
|
|
110
|
-
this.rendezvousHistory.occurrences[blockInfo.fileName].zeroCostHitCount++;
|
|
111
|
-
this.rendezvousHistory.zeroCostHitCount++;
|
|
222
|
+
else if (type === 'UNBLOCK' && this.rendezvousBlocks[id]) {
|
|
223
|
+
// detected the completion of a rendezvous event
|
|
224
|
+
dataChanged = true;
|
|
225
|
+
let blockInfo = this.rendezvousBlocks[id];
|
|
226
|
+
this.parseRendezvousLog(blockInfo, duration);
|
|
227
|
+
// remove this event from pre history tracking
|
|
228
|
+
delete this.rendezvousBlocks[id];
|
|
112
229
|
}
|
|
113
|
-
// remove this event from pre history tracking
|
|
114
|
-
delete this.rendezvousBlocks[id];
|
|
115
230
|
}
|
|
231
|
+
// still need to empty logs even if rendezvous tracking through ECP is enabled
|
|
116
232
|
if (this.filterOutLogs) {
|
|
117
233
|
lines.splice(i--, 1);
|
|
118
234
|
}
|
|
@@ -123,6 +239,46 @@ class RendezvousTracker {
|
|
|
123
239
|
}
|
|
124
240
|
return lines.join('\n');
|
|
125
241
|
}
|
|
242
|
+
parseRendezvousLog(blockInfo, duration) {
|
|
243
|
+
var _a, _b;
|
|
244
|
+
let clientLineNumber = (_b = (_a = this.clientPathsMap[blockInfo.fileName]) === null || _a === void 0 ? void 0 : _a.clientLines[blockInfo.lineNumber].toString()) !== null && _b !== void 0 ? _b : blockInfo.lineNumber;
|
|
245
|
+
if (this.rendezvousHistory.occurrences[blockInfo.fileName]) {
|
|
246
|
+
// file is in history
|
|
247
|
+
if (this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber]) {
|
|
248
|
+
// line is in history, just update it
|
|
249
|
+
this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].totalTime += this.getTime(duration);
|
|
250
|
+
this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].hitCount++;
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
// new line to be added to a file in history
|
|
254
|
+
this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber] = this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
// new file to be added to the history
|
|
259
|
+
this.rendezvousHistory.occurrences[blockInfo.fileName] = {
|
|
260
|
+
occurrences: {
|
|
261
|
+
[clientLineNumber]: this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration)
|
|
262
|
+
},
|
|
263
|
+
hitCount: 0,
|
|
264
|
+
totalTime: 0,
|
|
265
|
+
type: 'fileInfo',
|
|
266
|
+
zeroCostHitCount: 0
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
// how much time to add to the files total time
|
|
270
|
+
let timeToAdd = this.getTime(duration);
|
|
271
|
+
// increment hit count and add to the total time for this file
|
|
272
|
+
this.rendezvousHistory.occurrences[blockInfo.fileName].hitCount++;
|
|
273
|
+
this.rendezvousHistory.hitCount++;
|
|
274
|
+
// increment hit count and add to the total time for the history as a whole
|
|
275
|
+
this.rendezvousHistory.occurrences[blockInfo.fileName].totalTime += timeToAdd;
|
|
276
|
+
this.rendezvousHistory.totalTime += timeToAdd;
|
|
277
|
+
if (timeToAdd === 0) {
|
|
278
|
+
this.rendezvousHistory.occurrences[blockInfo.fileName].zeroCostHitCount++;
|
|
279
|
+
this.rendezvousHistory.zeroCostHitCount++;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
126
282
|
/**
|
|
127
283
|
* Checks the client path map for existing path data and adds new data to the map if not found
|
|
128
284
|
* @param fileName The filename or path parsed from the rendezvous output
|
|
@@ -214,6 +370,25 @@ class RendezvousTracker {
|
|
|
214
370
|
getTime(duration) {
|
|
215
371
|
return duration ? parseFloat(duration) : 0.000;
|
|
216
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* Destroy/tear down this class
|
|
375
|
+
*/
|
|
376
|
+
async destroy() {
|
|
377
|
+
var _a;
|
|
378
|
+
(_a = this.emitter) === null || _a === void 0 ? void 0 : _a.removeAllListeners();
|
|
379
|
+
this.stopEcpPingTimer();
|
|
380
|
+
//turn off ECP rendezvous tracking
|
|
381
|
+
if (this.doesHostSupportEcpRendezvousTracking) {
|
|
382
|
+
await this.toggleEcpRendezvousTracking('untrack');
|
|
383
|
+
}
|
|
384
|
+
//turn off telnet rendezvous tracking
|
|
385
|
+
try {
|
|
386
|
+
await this.runSGLogrendezvousCommand('off');
|
|
387
|
+
}
|
|
388
|
+
catch (e) {
|
|
389
|
+
this.logger.error('Failed to disable logrendezvous over 8080', e);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
217
392
|
}
|
|
218
393
|
exports.RendezvousTracker = RendezvousTracker;
|
|
219
394
|
//# sourceMappingURL=RendezvousTracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RendezvousTracker.js","sourceRoot":"","sources":["../src/RendezvousTracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RendezvousTracker.js","sourceRoot":"","sources":["../src/RendezvousTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ConstructorOptions, ProtocolVersionDetails } from '../debugProtocol/Debugger';
|
|
2
2
|
import type { BSDebugDiagnostic } from '../CompileErrorProcessor';
|
|
3
|
-
import type {
|
|
3
|
+
import type { RendezvousTracker } from '../RendezvousTracker';
|
|
4
4
|
import type { ChanperfData } from '../ChanperfTracker';
|
|
5
5
|
import type { SourceLocation } from '../managers/LocationManager';
|
|
6
6
|
import type { AdapterOptions, HighLevelType, RokuAdapterEvaluateResponse } from '../interfaces';
|
|
@@ -14,7 +14,8 @@ export declare class DebugProtocolAdapter {
|
|
|
14
14
|
private options;
|
|
15
15
|
private projectManager;
|
|
16
16
|
private breakpointManager;
|
|
17
|
-
|
|
17
|
+
private rendezvousTracker;
|
|
18
|
+
constructor(options: AdapterOptions & ConstructorOptions, projectManager: ProjectManager, breakpointManager: BreakpointManager, rendezvousTracker: RendezvousTracker);
|
|
18
19
|
private logger;
|
|
19
20
|
/**
|
|
20
21
|
* Indicates whether the adapter has successfully established a connection with the device
|
|
@@ -30,7 +31,6 @@ export declare class DebugProtocolAdapter {
|
|
|
30
31
|
private compileErrorProcessor;
|
|
31
32
|
private emitter;
|
|
32
33
|
private chanperfTracker;
|
|
33
|
-
private rendezvousTracker;
|
|
34
34
|
private socketDebugger;
|
|
35
35
|
private nextFrameId;
|
|
36
36
|
private stackFramesCache;
|
|
@@ -54,7 +54,6 @@ export declare class DebugProtocolAdapter {
|
|
|
54
54
|
on(eventName: 'connected', handler: (params: boolean) => void): any;
|
|
55
55
|
on(eventname: 'console-output', handler: (output: string) => void): any;
|
|
56
56
|
on(eventname: 'protocol-version', handler: (output: ProtocolVersionDetails) => void): any;
|
|
57
|
-
on(eventname: 'rendezvous', handler: (output: RendezvousHistory) => void): any;
|
|
58
57
|
on(eventName: 'runtime-error', handler: (error: BrightScriptRuntimeError) => void): any;
|
|
59
58
|
on(eventName: 'suspend', handler: () => void): any;
|
|
60
59
|
on(eventName: 'start', handler: () => void): any;
|
|
@@ -5,7 +5,6 @@ const Debugger_1 = require("../debugProtocol/Debugger");
|
|
|
5
5
|
const EventEmitter = require("events");
|
|
6
6
|
const net_1 = require("net");
|
|
7
7
|
const CompileErrorProcessor_1 = require("../CompileErrorProcessor");
|
|
8
|
-
const RendezvousTracker_1 = require("../RendezvousTracker");
|
|
9
8
|
const ChanperfTracker_1 = require("../ChanperfTracker");
|
|
10
9
|
const Constants_1 = require("../debugProtocol/Constants");
|
|
11
10
|
const util_1 = require("../util");
|
|
@@ -16,10 +15,11 @@ const ActionQueue_1 = require("../managers/ActionQueue");
|
|
|
16
15
|
* A class that connects to a Roku device over telnet debugger port and provides a standardized way of interacting with it.
|
|
17
16
|
*/
|
|
18
17
|
class DebugProtocolAdapter {
|
|
19
|
-
constructor(options, projectManager, breakpointManager) {
|
|
18
|
+
constructor(options, projectManager, breakpointManager, rendezvousTracker) {
|
|
20
19
|
this.options = options;
|
|
21
20
|
this.projectManager = projectManager;
|
|
22
21
|
this.breakpointManager = breakpointManager;
|
|
22
|
+
this.rendezvousTracker = rendezvousTracker;
|
|
23
23
|
this.logger = logging_1.logger.createLogger(`[${DebugProtocolAdapter.name}]`);
|
|
24
24
|
/**
|
|
25
25
|
* Due to casing issues with the variables request on some versions of the debug protocol, we first need to try the request in the supplied case.
|
|
@@ -43,17 +43,12 @@ class DebugProtocolAdapter {
|
|
|
43
43
|
util_1.util.normalizeAdapterOptions(this.options);
|
|
44
44
|
this.emitter = new EventEmitter();
|
|
45
45
|
this.chanperfTracker = new ChanperfTracker_1.ChanperfTracker();
|
|
46
|
-
this.rendezvousTracker = new RendezvousTracker_1.RendezvousTracker();
|
|
47
46
|
this.compileErrorProcessor = new CompileErrorProcessor_1.CompileErrorProcessor();
|
|
48
47
|
this.connected = false;
|
|
49
48
|
// watch for chanperf events
|
|
50
49
|
this.chanperfTracker.on('chanperf', (output) => {
|
|
51
50
|
this.emit('chanperf', output);
|
|
52
51
|
});
|
|
53
|
-
// watch for rendezvous events
|
|
54
|
-
this.rendezvousTracker.on('rendezvous', (output) => {
|
|
55
|
-
this.emit('rendezvous', output);
|
|
56
|
-
});
|
|
57
52
|
}
|
|
58
53
|
/**
|
|
59
54
|
* Get the version of the protocol for the Roku device we're currently connected to.
|