Skip to content

Commit f33cc85

Browse files
committed
bump
1 parent d5cadc3 commit f33cc85

7 files changed

Lines changed: 54 additions & 15 deletions

File tree

OpenFlowNodeRED/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@openiap/nodered",
3-
"version": "1.2.8",
3+
"version": "1.2.14",
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": {
@@ -28,7 +28,7 @@
2828
"@openiap/openflow-api": "^1.0.61",
2929
"@opentelemetry/api": "^0.17.0",
3030
"@opentelemetry/core": "^0.17.0",
31-
"@opentelemetry/exporter-collector": "^0.17.0",
31+
"@opentelemetry/exporter-collector-grpc": "^0.17.0",
3232
"@opentelemetry/metrics": "^0.17.0",
3333
"@opentelemetry/tracing": "^0.17.0",
3434
"async-retry": "^1.3.1",

OpenFlowNodeRED/src/Config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export class Config {
7272
Config.openflow_uniqueid = Config.getEnv("openflow_uniqueid", "");
7373
Config.otel_trace_url = Config.getEnv("otel_trace_url", "");
7474
Config.otel_metric_url = Config.getEnv("otel_metric_url", "");
75-
Config.otel_servicename = Config.getEnv("otel_servicename", "openflow");
75+
Config.otel_servicename = Config.getEnv("otel_servicename", "nodered");
7676
Config.otel_trace_interval = parseInt(Config.getEnv("otel_trace_interval", "5000"));
7777
Config.otel_metric_interval = parseInt(Config.getEnv("otel_metric_interval", "5000"));
7878
}

OpenFlowNodeRED/src/WebServer.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { noderedcontribauthsaml } from "./node-red-contrib-auth-saml";
2222
import { WebSocketClient, NoderedUtil, Message } from "@openiap/openflow-api";
2323
import { otel } from "./otel";
2424
import { ValueRecorder, Counter, BaseObserver } from "@opentelemetry/api-metrics"
25+
import { Span } from "@opentelemetry/api";
2526

2627
export class WebServer {
2728
private static _logger: winston.Logger;
@@ -38,6 +39,7 @@ export class WebServer {
3839
// })
3940

4041
public static log_messages: any = {};
42+
public static spans: any = {};
4143
private static settings: nodered_settings = null;
4244
static async configure(logger: winston.Logger, socket: WebSocketClient, _otel: otel): Promise<http.Server> {
4345
this._logger = logger;
@@ -156,6 +158,7 @@ export class WebServer {
156158
return function (msg) {
157159
if (!NoderedUtil.IsNullEmpty(msg.msgid) && msg.event.startsWith("node.")) {
158160
msg.event = msg.event.substring(5);
161+
msg.timestamp = new Date();
159162
if (msg.event.endsWith(".receive")) {
160163
msg.event = msg.event.substring(0, msg.event.length - 8);
161164
msg.end = otel.startTimer();
@@ -164,19 +167,31 @@ export class WebServer {
164167
// }
165168
if (!NoderedUtil.IsNullUndefinded(WebServer.openflow_nodered_node_activations))
166169
WebServer.openflow_nodered_node_activations.bind({ ...otel.defaultlabels, nodetype: msg.event }).add(1);
170+
171+
const startmessage = WebServer.log_messages[msg.msgid];
172+
if (startmessage && startmessage.span) {
173+
otel.endSpan(startmessage.span);
174+
}
175+
176+
const span: Span = WebServer.spans[msg.msgid] || otel.startSpan(msg.event);
177+
WebServer.spans[msg.msgid] = span;
178+
179+
msg.span = otel.startSubSpan(msg.event, span);
167180
WebServer.log_messages[msg.msgid] = msg;
168181
}
169182
if (msg.event.endsWith(".send")) {
170183
msg.event = msg.event.substring(0, msg.event.length - 5);
171184
const startmessage = WebServer.log_messages[msg.msgid];
172-
if (!NoderedUtil.IsNullUndefinded(startmessage)) {
185+
if (!NoderedUtil.IsNullUndefinded(startmessage) && !NoderedUtil.IsNullUndefinded(startmessage.end)) {
173186
otel.endTimer(startmessage.end, WebServer.openflow_nodered_node_duration, { nodetype: startmessage.event });
174-
// startmessage.end({ nodetype: startmessage.event });
175-
// if (Config.prometheus_measure_nodeid && startmessage.end2) {
176-
// startmessage.end2({ nodetype: startmessage.event, nodeid: msg.nodeid });
177-
// }
178-
delete WebServer.log_messages[msg.msgid];
179187
}
188+
if (startmessage && startmessage.span) {
189+
otel.endSpan(startmessage.span);
190+
}
191+
const span: Span = WebServer.spans[msg.msgid] || otel.startSpan(msg.event);
192+
WebServer.spans[msg.msgid] = span;
193+
msg.span = otel.startSubSpan(msg.event, span);
194+
WebServer.log_messages[msg.msgid] = msg;
180195
}
181196
const keys = Object.keys(WebServer.log_messages);
182197
keys.forEach(key => {
@@ -188,6 +203,17 @@ export class WebServer {
188203
delete WebServer.log_messages[key];
189204
}
190205
});
206+
const keys2 = Object.keys(WebServer.spans);
207+
keys2.forEach(key => {
208+
const meg = WebServer.spans[key];
209+
var from = new Date(msg.timestamp);
210+
const now = new Date();
211+
const seconds = (now.getTime() - from.getTime()) / 1000;
212+
if (seconds > Config.prometheus_max_node_time_seconds) {
213+
otel.endSpan(WebServer.spans[key]);
214+
delete WebServer.spans[key];
215+
}
216+
});
191217
}
192218
}
193219
}

OpenFlowNodeRED/src/index.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,21 @@ try {
2323
}
2424
if (_otel_require != null) {
2525
_otel = _otel_require.otel.configure(logger);
26+
} else {
27+
const fakespan = {
28+
addEvent: () => undefined,
29+
setAttribute: () => undefined,
30+
recordException: () => undefined,
31+
};
32+
(_otel as any) =
33+
{
34+
startSpan: () => fakespan,
35+
startSubSpan: () => fakespan,
36+
endSpan: () => undefined,
37+
startTimer: () => undefined,
38+
endTimer: () => undefined,
39+
}
2640
}
27-
2841
const unhandledRejection = require("unhandled-rejection");
2942
let rejectionEmitter = unhandledRejection({
3043
timeout: 20

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.8
1+
1.2.14

gulpfile.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ gulp.task("browserify", function () {
134134

135135
bfi.on('update', bundle);
136136
bfi.on('error', function (error) {
137-
console.error(error.message);
137+
console.error(error.message ? error.message : error);
138138
this.emit('end');
139139
});
140140
bfi.on('time', function (time) {
@@ -148,7 +148,7 @@ gulp.task("browserify", function () {
148148
console.log('browserify bundle::begin()');
149149
const result = bfi.bundle()
150150
.on('error', function (error) {
151-
console.log(error.message);
151+
console.log(error.message ? error.message : error);
152152
this.emit('end');
153153
})
154154
.pipe(exorcist(mapfile))
@@ -229,7 +229,7 @@ gulp.task("bumpconfigmap", function () {
229229

230230
gulp.task("bumpaiotfrontend", function () {
231231
let version = "0.0.1";
232-
if(!fs.existsSync('../aiot-frontend')) return gulp.src('.');
232+
if (!fs.existsSync('../aiot-frontend')) return gulp.src('.');
233233
version = fs.readFileSync("../aiot-frontend/VERSION", "utf8");
234234
console.log('openiap/aiot-frontend:' + version);
235235
return gulp.src(["config/**/controllers.yml"])

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.8",
3+
"version": "1.2.14",
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)