Skip to content

Commit 7a86127

Browse files
committed
improve otel some more
1 parent c3f0178 commit 7a86127

4 files changed

Lines changed: 18 additions & 7 deletions

File tree

OpenFlowNodeRED/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@openiap/nodered",
3-
"version": "1.2.27",
3+
"version": "1.2.28",
44
"description": "Simple wrapper around NodeRed, RabbitMQ and MongoDB to support a more scaleable NodeRed implementation.\r Also the \"backend\" for [OpenRPA](https://github.com/skadefro/OpenRPA)",
55
"main": "index.js",
66
"scripts": {

OpenFlowNodeRED/src/WebServer.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { WebSocketClient, NoderedUtil, Message } from "@openiap/openflow-api";
2323
import { otel } from "./otel";
2424
import { ValueRecorder, Counter, BaseObserver } from "@opentelemetry/api-metrics"
2525
import { HrTime, Span } from "@opentelemetry/api";
26+
import { hrTime } from "@opentelemetry/core";
2627

2728
export class log_message_node {
2829
public span: Span;
@@ -31,11 +32,13 @@ export class log_message_node {
3132
}
3233
export class log_message {
3334
public timestamp: Date;
35+
public hrtimestamp: HrTime;
3436
public span: Span;
3537
public nodes: { [key: string]: log_message_node; } = {};
3638
// public nodes: object = {}
3739
constructor(msgid, name) {
3840
this.timestamp = new Date();
41+
this.hrtimestamp = hrTime();
3942
this.nodes = {};
4043
this.span = otel.startSpan2(name, msgid);
4144
}
@@ -179,11 +182,11 @@ export class WebServer {
179182
const keys = Object.keys(msg.nodes);
180183
for (let i = 0; i < keys.length; i++) {
181184
const nodemessage = msg.nodes[keys[i]];
182-
if (nodemessage.span) otel.endSpan(nodemessage.span, msg.timestamp);
185+
if (nodemessage.span) otel.endSpan(nodemessage.span, msg.hrtimestamp);
183186
if (nodemessage.end) otel.endTimer(nodemessage.end, WebServer.openflow_nodered_node_duration, { nodetype: nodemessage.event });
184187
}
185188
if (msg.span) {
186-
otel.endSpan(msg.span, msg.timestamp);
189+
otel.endSpan(msg.span, msg.hrtimestamp);
187190
delete msg.span;
188191
}
189192
delete WebServer.log_messages[key];
@@ -208,6 +211,7 @@ export class WebServer {
208211
const logmessage = WebServer.log_messages[msg.msgid];
209212
if (!logmessage.nodes[msg.nodeid]) logmessage.nodes[msg.nodeid] = new log_message_node();
210213
logmessage.timestamp = new Date();
214+
logmessage.hrtimestamp = hrTime();
211215

212216
const nodemessage = logmessage.nodes[msg.nodeid];
213217

@@ -216,6 +220,8 @@ export class WebServer {
216220

217221
nodemessage.span = otel.startSubSpan(msg.event, logmessage.span);
218222
nodemessage.span.setAttributes(otel.defaultlabels);
223+
nodemessage.span.setAttribute("msgid", msg.msgid);
224+
nodemessage.span.setAttribute("nodeid", msg.nodeid);
219225
// nodemessage.span = otel.startSpan2(msg.event, msg.msgid);
220226
nodemessage.end = otel.startTimer();
221227
nodemessage.event = msg.event;
@@ -226,6 +232,7 @@ export class WebServer {
226232
const logmessage = WebServer.log_messages[msg.msgid];
227233
if (!logmessage.nodes[msg.nodeid]) logmessage.nodes[msg.nodeid] = new log_message_node();
228234
logmessage.timestamp = new Date();
235+
logmessage.hrtimestamp = hrTime();
229236

230237
const nodemessage = logmessage.nodes[msg.nodeid];
231238

@@ -234,6 +241,11 @@ export class WebServer {
234241
} else {
235242
nodemessage.span = otel.startSubSpan(msg.event, logmessage.span);
236243
nodemessage.span.setAttributes(otel.defaultlabels);
244+
nodemessage.span.setAttribute("msgid", msg.msgid);
245+
nodemessage.span.setAttribute("nodeid", msg.nodeid);
246+
// Need to end it, since not all nodes trigger a "done" message :-/
247+
otel.endSpan(nodemessage.span);
248+
delete nodemessage.span;
237249
// nodemessage.span = otel.startSpan2(msg.event, msg.msgid);
238250
}
239251
if (nodemessage.end) {
@@ -245,16 +257,15 @@ export class WebServer {
245257
nodemessage.event = msg.event;
246258
}
247259
if (msg.event.endsWith(".done")) {
248-
msg.event = msg.event.substring(0, msg.event.length - 5);
249260
if (WebServer.log_messages[msg.msgid] == undefined) return;
250261
const logmessage = WebServer.log_messages[msg.msgid];
251262
if (!logmessage.nodes[msg.nodeid]) return;
252263
logmessage.timestamp = new Date();
264+
logmessage.hrtimestamp = hrTime();
253265

254266
const nodemessage = logmessage.nodes[msg.nodeid];
255267
if (nodemessage.span) { otel.endSpan(nodemessage.span); delete nodemessage.span; }
256268
if (nodemessage.end) { otel.endTimer(nodemessage.end, WebServer.openflow_nodered_node_duration, { nodetype: nodemessage.event }); delete nodemessage.end; }
257-
nodemessage.event = msg.event;
258269
}
259270
}
260271
} catch (error) {

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.27
1+
1.2.28

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@openiap/openflow",
3-
"version": "1.2.27",
3+
"version": "1.2.28",
44
"description": "Simple wrapper around NodeRed, RabbitMQ and MongoDB to support a more scaleable NodeRed implementation.\r Also the \"backend\" for [OpenRPA](https://github.com/skadefro/OpenRPA)",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)