Skip to content

Commit 021dcd8

Browse files
committed
add timing and rate limits to prometheus
1 parent 164ff88 commit 021dcd8

9 files changed

Lines changed: 31 additions & 11 deletions

File tree

OpenFlow/src/Messages/Message.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,16 @@ export class Message {
6969
// console.log("SOCKET_NO_RATE_LIMIT consumedPoints: " + res.consumedPoints + " remainingPoints: " + res.remainingPoints);
7070
} catch (error) {
7171
if (error.consumedPoints) {
72+
WebSocketServer.websocket_rate_limit.inc();
73+
WebSocketServer.websocket_rate_limit.labels(command).inc();
7274
if ((error.consumedPoints % 100) == 0) cli._logger.debug("[" + username + "/" + cli.clientagent + "/" + cli.id + "] SOCKET_RATE_LIMIT consumedPoints: " + error.consumedPoints + " remainingPoints: " + error.remainingPoints + " msBeforeNext: " + error.msBeforeNext);
7375
setTimeout(() => { this.Process(cli); }, 250);
7476
}
7577
return;
7678
}
7779

7880
if (!NoderedUtil.IsNullEmpty(this.replyto)) {
81+
const end = WebSocketServer.websocket_messages.startTimer();
7982
const qmsg: QueuedMessage = cli.messageQueue[this.replyto];
8083
if (!NoderedUtil.IsNullUndefinded(qmsg)) {
8184
try {
@@ -86,8 +89,10 @@ export class Message {
8689
if (!NoderedUtil.IsNullUndefinded(qmsg.cb)) { qmsg.cb(this); }
8790
delete cli.messageQueue[this.id];
8891
}
92+
end({ command: command });
8993
return;
9094
}
95+
const end = WebSocketServer.websocket_messages.startTimer();
9196
switch (command) {
9297
case "listcollections":
9398
this.ListCollections(cli);
@@ -218,6 +223,7 @@ export class Message {
218223
this.UnknownCommand(cli);
219224
break;
220225
}
226+
end({ command: command });
221227
} catch (error) {
222228
cli._logger.error(error.message ? error.message : error);
223229
}

OpenFlow/src/WebSocketServer.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,17 @@ export class WebSocketServer {
3737
help: 'Total number of queues messages',
3838
labelNames: ["queuename"]
3939
})
40+
public static websocket_rate_limit = new client.Counter({
41+
name: 'openflow_websocket_rate_limit_count',
42+
help: 'Total number of rate limited messages',
43+
labelNames: ["command"]
44+
})
45+
public static websocket_messages = new client.Histogram({
46+
name: 'openflow_websocket_messages_duration_seconds',
47+
help: 'Duration for handling websocket requests in microseconds',
48+
labelNames: ['command'],
49+
buckets: [0.1, 0.3, 0.5, 0.7, 1, 3, 5, 7, 10]
50+
})
4051

4152
static configure(logger: winston.Logger, server: http.Server, register: client.Registry): void {
4253
this._clients = [];
@@ -53,6 +64,9 @@ export class WebSocketServer {
5364
if (!NoderedUtil.IsNullUndefinded(register)) register.registerMetric(WebSocketServer.websocket_incomming_stats);
5465
if (!NoderedUtil.IsNullUndefinded(register)) register.registerMetric(WebSocketServer.websocket_queue_count);
5566
if (!NoderedUtil.IsNullUndefinded(register)) register.registerMetric(WebSocketServer.websocket_queue_message_count);
67+
if (!NoderedUtil.IsNullUndefinded(register)) register.registerMetric(WebSocketServer.websocket_rate_limit);
68+
if (!NoderedUtil.IsNullUndefinded(register)) register.registerMetric(WebSocketServer.websocket_messages);
69+
5670
setInterval(this.pingClients, 10000);
5771
}
5872
private static async pingClients(): Promise<void> {

OpenFlowNodeRED/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openflow-nodered",
3-
"version": "1.1.91",
3+
"version": "1.1.92",
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": {

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.91
1+
1.1.92

docker-compose-toolbox.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ services:
4545
- "traefik.http.routers.web.rule=Host(`toolbox.openrpa.dk`)"
4646
- "traefik.http.routers.web.entrypoints=web"
4747
- "traefik.frontend.passHostHeader=true"
48-
image: "cloudhack/openflow:1.1.91"
48+
image: "cloudhack/openflow:1.1.92"
4949
container_name: "web"
5050
environment:
5151
- update_acl_based_on_groups=true
@@ -82,7 +82,7 @@ services:
8282
- "traefik.http.routers.nodered.rule=Host(`nodered1.toolbox.openrpa.dk`)"
8383
- "traefik.http.routers.nodered.entrypoints=web"
8484
- "traefik.http.services.nodered.loadbalancer.server.port=1880"
85-
image: "cloudhack/openflownodered:1.1.91"
85+
image: "cloudhack/openflownodered:1.1.92"
8686
container_name: "nodered"
8787
environment:
8888
# - nodered_id=1

docker-compose-traefik-letsencrypt.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ services:
6969
- "traefik.http.routers.web.entrypoints=web,websecure"
7070
- "traefik.frontend.passHostHeader=true"
7171
- "traefik.http.routers.web.tls.certresolver=myresolver"
72-
image: "cloudhack/openflow:1.1.91"
72+
image: "cloudhack/openflow:1.1.92"
7373
container_name: "web"
7474
environment:
7575
- update_acl_based_on_groups=true
@@ -107,7 +107,7 @@ services:
107107
- "traefik.http.routers.nodered.entrypoints=web,websecure"
108108
- "traefik.http.services.nodered.loadbalancer.server.port=1880"
109109
- "traefik.http.routers.nodered.tls.certresolver=myresolver"
110-
image: "cloudhack/openflownodered:1.1.91"
110+
image: "cloudhack/openflownodered:1.1.92"
111111
container_name: "nodered"
112112
environment:
113113
# - nodered_id=1

docker-compose-traefik.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ services:
4545
- "traefik.http.routers.web.rule=Host(`localhost.openrpa.dk`)"
4646
- "traefik.http.routers.web.entrypoints=web"
4747
- "traefik.frontend.passHostHeader=true"
48-
image: "cloudhack/openflow:1.1.91"
48+
image: "cloudhack/openflow:1.1.92"
4949
container_name: "web"
5050
environment:
5151
- update_acl_based_on_groups=true
@@ -82,7 +82,7 @@ services:
8282
- "traefik.http.routers.nodered.rule=Host(`nodered1.localhost.openrpa.dk`)"
8383
- "traefik.http.routers.nodered.entrypoints=web"
8484
- "traefik.http.services.nodered.loadbalancer.server.port=1880"
85-
image: "cloudhack/openflownodered:1.1.91"
85+
image: "cloudhack/openflownodered:1.1.92"
8686
container_name: "nodered"
8787
environment:
8888
# - nodered_id=1

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ services:
1818
- "5672:5672"
1919
- "15672:15672"
2020
web:
21-
image: "cloudhack/openflow:1.1.91"
21+
image: "cloudhack/openflow:1.1.92"
2222
environment:
2323
- update_acl_based_on_groups=true
2424
- multi_tenant=false
@@ -52,7 +52,7 @@ services:
5252
- "80:80"
5353
- "5858:5858"
5454
nodered:
55-
image: "cloudhack/openflownodered:1.1.91"
55+
image: "cloudhack/openflownodered:1.1.92"
5656
environment:
5757
# - nodered_id=1
5858
- nodered_sa=nodered1

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openiap",
3-
"version": "1.1.91",
3+
"version": "1.1.92",
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)