Skip to content

Commit 5016885

Browse files
committed
contrib: Let log visualizer open all nodes in tabs
New feature when visualizing logs with multiple nodes to view them all in multiple tables Changelog-None
1 parent cc08959 commit 5016885

File tree

1 file changed

+74
-14
lines changed

1 file changed

+74
-14
lines changed

contrib/log_visualizer.html

Lines changed: 74 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -154,21 +154,65 @@
154154
document.getElementById('filter_error').innerText = error.message;
155155
}
156156
}
157+
function tab_option(type_str, regex_prefix, regex_postfix, nodes, logs)
158+
{
159+
str = type_str + " log with multiple nodes detected.\n\n";
160+
str += "Would you like to open them all with new tabs?\n\n";
161+
str += "Nodes detected:\n" + nodes.join("\n");
162+
163+
function make_regex(key) {
164+
return new RegExp(regex_prefix + key + regex_postfix, "g");
165+
}
166+
167+
if(!confirm(str))
168+
return null;
169+
170+
function load_next_tab() {
171+
if (!nodes.length)
172+
return;
173+
window.addEventListener('message', on_recv_msg);
174+
w = window.open(window.location.href, '_blank');
175+
w.blur();
176+
window.focus();
177+
}
178+
function on_recv_msg(msg) {
179+
if(msg.data == "v0.1-ready") {
180+
msg.source.postMessage({"version": "v0.1-data", "logs": logs, "prefix": make_regex(nodes.shift())}, "*");
181+
window.removeEventListener('message', on_recv_msg);
182+
load_next_tab();
183+
}
184+
}
185+
var result = make_regex(nodes.shift());
186+
load_next_tab();
187+
return result;
188+
}
189+
function single_option(type_str, regex_prefix, regex_postfix, nodes)
190+
{
191+
str = type_str + " log with multiple nodes detected.\n\n";
192+
str += "Which would you like rendered?\n\n";
193+
str += "Nodes detected:\n" + nodes.join("\n");
194+
195+
function make_regex(key) {
196+
return new RegExp(regex_prefix + key + regex_postfix, "g");
197+
}
198+
199+
var result = prompt(str, nodes[0]);
200+
201+
return result ? make_regex(result.trim()) : null;
202+
}
157203
function detect_ci_logs(logs)
158204
{
159205
nodes = new Set()
160206
Array.from(logs.matchAll(/[0-9\-T:.Z]+ (lightningd-[0-9]+) /g)).forEach(match => {
161207
nodes.add(match[1]);
162208
});
163209
var keys = [...nodes];
164-
var node = keys.at(0);
165210

166-
if (nodes.size > 1) {
167-
str = "Continous Integration log with multiple nodes detected.\n\nWhich would you like rendered?\n\nNodes detected:\n" + keys.join("\n");
168-
node = prompt(str, keys[0]).trim();
169-
}
211+
if (keys.length > 1)
212+
return tab_option("Continous Integration", "[0-9\-T:.Z]+ ", " ", keys, logs)
213+
|| single_option("Continous Integration", "[0-9\-T:.Z]+ ", " ", keys);
170214

171-
return node ? new RegExp(`[0-9\-T:.Z]+ ${node} `, "g") : null;
215+
return keys.at(0);
172216
}
173217
function detect_pytest_logs(logs)
174218
{
@@ -177,14 +221,29 @@
177221
nodes.add(match[1]);
178222
});
179223
var keys = [...nodes];
180-
var node = keys.at(0);
181224

182-
if (nodes.size > 1) {
183-
str = "Python Test log with multiple nodes detected.\n\nWhich would you like rendered?\n\nNodes detected:\n" + keys.join("\n");
184-
node = prompt(str, keys[0]).trim();
185-
}
225+
if (keys.length > 1)
226+
return tab_option("Python Test", "", " ", keys, logs)
227+
|| single_option("Python Test", "", " ", keys);
186228

187-
return node ? new RegExp(`^${node} `, "g") : null;
229+
return keys.at(0);
230+
}
231+
window.onload = function() {
232+
if (window.opener) {
233+
function receive_data_message(msg) {
234+
if (!msg.data || msg.data.version != "v0.1-data") {
235+
console.log("Unrecognized data message");
236+
console.log(msg);
237+
}
238+
else {
239+
do_render(msg.data.logs, document.getElementById('area'), msg.data.prefix);
240+
window.removeEventListener('message', receive_data_message);
241+
}
242+
}
243+
window.addEventListener('message', receive_data_message);
244+
console.log(window.opener);
245+
window.opener.postMessage("v0.1-ready", "*");
246+
}
188247
}
189248
function detect_log_prefix(logs)
190249
{
@@ -196,7 +255,7 @@
196255
return pytest;
197256
return null;
198257
}
199-
function do_render(logs, area)
258+
function do_render(logs, area, prefix)
200259
{
201260
var d = document;
202261
var sheet = d.getElementById('logStyleSheet').sheet;
@@ -210,7 +269,8 @@
210269
while(sheet.cssRules.length)
211270
sheet.deleteRule(0);
212271

213-
prefix = detect_log_prefix(logs);
272+
if(!prefix)
273+
prefix = detect_log_prefix(logs);
214274

215275
for(line of logs.split("\n")) {
216276
line = line.trim()

0 commit comments

Comments
 (0)