Skip to content

Commit dc562a2

Browse files
zerog2kJens Jensen
andauthored
Improve logparser compatibility (#1469)
Co-authored-by: Jens Jensen <jjensen@verizonmedia.com>
1 parent 05fe075 commit dc562a2

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

Logparser/logparser.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<link rel="stylesheet" href="logparser.css" />
66
</head>
77
<body>
8-
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
9-
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
8+
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js"></script>
9+
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.12.0/underscore-min.js"></script>
1010
<div id="parser">
1111
<h4>Paste log from gateway or node here:</h4>
1212
<textarea class="form-control" @change="parse" rows="10" v-model="source"></textarea>
@@ -25,8 +25,8 @@ <h4>Human readable output:</h4>
2525
<th>Payload</th>
2626
<th>Description</th>
2727
</tr>
28-
<tr v-for="r in parsed">
29-
<td v-for="c in r" v-html="c"></td>
28+
<tr style="font-family: monospace;" v-for="row in parsed">
29+
<td v-for="col in row" v-html="col"></td>
3030
</tr>
3131
</table>
3232
</div>

Logparser/logparser.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ var types = {
220220

221221
//mysgw: Client 0: 0;0;3;0;18;PING
222222
var rprefix = "(?:\\d+ )?(?:mysgw: )?(?:Client 0: )?";
223+
var prefilter = /(?=[!?]?(MCO|TSM|TSF|THA|SGN))(?<result>.*)/;
223224
var match = [
224225

225226
// MySensors core
@@ -460,8 +461,9 @@ var match = [
460461

461462
// Init regexes
462463
for (var i=0, len=match.length;i<len; i++) {
463-
match[i].re = new RegExp("^" + rprefix + match[i].re);
464+
match[i].re = new RegExp("^" + match[i].re);
464465
}
466+
465467
var stripPrefix = new RegExp("^" + rprefix + "(.*)");
466468

467469
function getQueryVariable(variable)
@@ -538,18 +540,25 @@ new Vue({
538540
var t = types[this.selector(cmd)]
539541
return t !== undefined ? t[type] || "Undefined" : "Undefined";
540542
},
541-
match: function(msg) {
543+
decodeLog: function(msg) {
542544
var self = this;
543545
var found = false;
546+
547+
filtered = msg.match(prefilter);
548+
if (filtered) {
549+
msg = filtered.groups.result;
550+
} else {
551+
return;
552+
}
544553
for (var i=0, len=match.length;!found && i<len; i++) {
545554
var r = match[i];
546555
if (r.re.test(msg)) {
547556
msg = msg.replace(r.re, r.d);
557+
// lookup and replace numerical constants with their symbols
548558
msg = msg.replace(/{command:(\d+)}/g, function(match, m1) { return types.command[m1] });
549559
msg = msg.replace(/{pt:(\d+)}/g, function(match, m1) { return types.payloadtype[m1] });
550-
return msg.replace(/{type:(\d+):(\d+)}/g, function(match, cmd, type) {
551-
return self.type(cmd, type);
552-
});
560+
msg = msg.replace(/{type:(\d+):(\d+)}/g, function(match, cmd, type) { return self.type(cmd, type) });
561+
return msg;
553562
}
554563
}
555564
},
@@ -558,17 +567,17 @@ new Vue({
558567
var self = this;
559568
var rows = this.source.split("\n");
560569
this.parsed = _.map(rows, function(r) {
561-
//var p = r.split(";");
570+
// attempt decode of serial protocol (e.g. `12;6;0;0;3;My Light\n`)
562571
var p = splitWithTail(r, ";", 6);
563572
if (p.length !== 6) {
564-
var desc = self.match(r);
565-
573+
// probably not serial protocol, maybe debug log?
574+
var desc = self.decodeLog(r);
566575
return ["","","","",desc?"":"Unknown", r, desc];
567576
}
568577
var sel = self.selector(p[2]);
569578
var desc = "";
570579
if (p[2] == "3" && p[4] == "9") {
571-
desc = self.match(p[5]);
580+
desc = self.decodeLog(p[5]);
572581

573582
}
574583
var node = stripPrefix.exec(p[0]);

0 commit comments

Comments
 (0)