From c07474bdfafe5c35baa01d3dc446ae1ad32d8c7b Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Mon, 13 Mar 2023 17:02:11 +0100 Subject: [PATCH] feat(chalice): health-check feat(assist): health-check feat(peers): health-check feat(sourcemaps-reader): health-check --- api/chalicelib/core/health.py | 10 ++- assist/package.json | 2 +- assist/server.js | 16 ++--- assist/servers/websocket.js | 18 +++++- assist/utils/health.js | 54 ++++++++++++++++ ee/api/chalicelib/core/health.py | 12 ++-- ee/assist/package-lock.json | 10 +-- ee/assist/package.json | 2 +- ee/assist/server.js | 21 ++----- ee/assist/servers/websocket-cluster.js | 17 ++++++ ee/assist/servers/websocket.js | 18 ++++++ ee/assist/utils/health.js | 61 +++++++++++++++++++ peers/clean-dev.sh | 3 + peers/package-lock.json | 28 ++++----- peers/package.json | 2 +- peers/prepare-dev.sh | 3 + peers/run-dev.sh | 6 ++ peers/server.js | 9 +-- .../db/init_dbs/postgresql/1.11.0/1.11.0.sql | 5 ++ sourcemap-reader/.gitignore | 5 +- sourcemap-reader/clean-dev.sh | 5 +- sourcemap-reader/package-lock.json | 10 +-- sourcemap-reader/package.json | 2 +- sourcemap-reader/server.js | 14 ++--- sourcemap-reader/utils/health.js | 52 ++++++++++++++++ 25 files changed, 296 insertions(+), 89 deletions(-) create mode 100644 assist/utils/health.js create mode 100644 ee/assist/utils/health.js create mode 100755 peers/clean-dev.sh create mode 100755 peers/prepare-dev.sh create mode 100755 peers/run-dev.sh create mode 100644 sourcemap-reader/utils/health.js diff --git a/api/chalicelib/core/health.py b/api/chalicelib/core/health.py index 071cf7f9c..0a73661b7 100644 --- a/api/chalicelib/core/health.py +++ b/api/chalicelib/core/health.py @@ -31,7 +31,7 @@ else: HEALTH_ENDPOINTS = { "alerts": "http://alerts-openreplay.app.svc.cluster.local:8888/metrics", "assets": "http://assets-openreplay.app.svc.cluster.local:8888/metrics", - "assist": "http://assist-openreplay.app.svc.cluster.local:8888/metrics", + "assist": "http://assist-openreplay.app.svc.cluster.local:8888/health", "chalice": "http://chalice-openreplay.app.svc.cluster.local:8888/metrics", "db": "http://db-openreplay.app.svc.cluster.local:8888/metrics", "ender": "http://ender-openreplay.app.svc.cluster.local:8888/metrics", @@ -40,12 +40,11 @@ else: "http": "http://http-openreplay.app.svc.cluster.local:8888/metrics", "ingress-nginx": "http://ingress-nginx-openreplay.app.svc.cluster.local:8888/metrics", "integrations": "http://integrations-openreplay.app.svc.cluster.local:8888/metrics", - "peers": "http://peers-openreplay.app.svc.cluster.local:8888/metrics", + "peers": "http://peers-openreplay.app.svc.cluster.local:8888/health", "quickwit": "http://quickwit-openreplay.app.svc.cluster.local:8888/metrics", "sink": "http://sink-openreplay.app.svc.cluster.local:8888/metrics", - "sourcemapreader": "http://sourcemapreader-openreplay.app.svc.cluster.local:8888/metrics", + "sourcemapreader": "http://sourcemapreader-openreplay.app.svc.cluster.local:8888/health", "storage": "http://storage-openreplay.app.svc.cluster.local:8888/metrics", - "utilities": "http://utilities-openreplay.app.svc.cluster.local:8888/metrics", } @@ -172,8 +171,7 @@ def get_health(): "quickwit": __check_be_service("quickwit"), "sink": __check_be_service("sink"), "sourcemapreader": __check_be_service("sourcemapreader"), - "storage": __check_be_service("storage"), - "utilities": __check_be_service("utilities") + "storage": __check_be_service("storage") }, # "overall": { # "health": "na", diff --git a/assist/package.json b/assist/package.json index b06c8cae5..ad9794fea 100644 --- a/assist/package.json +++ b/assist/package.json @@ -1,6 +1,6 @@ { "name": "assist-server", - "version": "1.0.0", + "version": "v1.11.0", "description": "assist server to get live sessions & sourcemaps reader to get stack trace", "main": "peerjs-server.js", "scripts": { diff --git a/assist/server.js b/assist/server.js index d71aca65d..5eb6c2e16 100644 --- a/assist/server.js +++ b/assist/server.js @@ -2,6 +2,7 @@ const dumps = require('./utils/HeapSnapshot'); const express = require('express'); const socket = require("./servers/websocket"); const {request_logger} = require("./utils/helper"); +const health = require("./utils/health"); const assert = require('assert').strict; const debug = process.env.debug === "1"; @@ -10,7 +11,7 @@ const HOST = process.env.LISTEN_HOST || '0.0.0.0'; const PORT = process.env.LISTEN_PORT || 9001; assert.ok(process.env.ASSIST_KEY, 'The "ASSIST_KEY" environment variable is required'); const P_KEY = process.env.ASSIST_KEY; -const PREFIX = process.env.PREFIX || process.env.prefix || `/assist` +const PREFIX = process.env.PREFIX || process.env.prefix || `/assist`; const wsapp = express(); wsapp.use(express.json()); @@ -27,16 +28,9 @@ heapdump && wsapp.use(`${PREFIX}/${P_KEY}/heapdump`, dumps.router); const wsserver = wsapp.listen(PORT, HOST, () => { console.log(`WS App listening on http://${HOST}:${PORT}`); - console.log('Press Ctrl+C to quit.'); + health.healthApp.listen(health.PORT, HOST, health.listen_cb); }); + wsapp.enable('trust proxy'); socket.start(wsserver); -module.exports = {wsserver}; - -wsapp.get('/private/shutdown', (req, res) => { - console.log("Requested shutdown"); - res.statusCode = 200; - res.end("ok!"); - process.kill(1, "SIGTERM"); - } -); \ No newline at end of file +module.exports = {wsserver}; \ No newline at end of file diff --git a/assist/servers/websocket.js b/assist/servers/websocket.js index 4c4a657bb..0fdda85f2 100644 --- a/assist/servers/websocket.js +++ b/assist/servers/websocket.js @@ -45,7 +45,22 @@ const respond = function (res, data) { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({"data": data})); } - +const countSessions = async function () { + let count = 0; + try { + const arr = Array.from(io.sockets.adapter.rooms); + const filtered = arr.filter(room => !room[1].has(room[0])); + for (let i of filtered) { + let {projectKey, sessionId} = extractPeerId(i[0]); + if (projectKey !== null && sessionId !== null) { + count++; + } + } + } catch (e) { + console.error(e); + } + return count; +} const socketsList = async function (req, res) { debug && console.log("[WS]looking for all available sessions"); let filters = extractPayloadFromRequest(req); @@ -360,6 +375,7 @@ module.exports = { socketConnexionTimeout(io); }, + countSessions, handlers: { socketsList, socketsListByProject, diff --git a/assist/utils/health.js b/assist/utils/health.js new file mode 100644 index 000000000..d71864e71 --- /dev/null +++ b/assist/utils/health.js @@ -0,0 +1,54 @@ +const express = require('express'); +const socket = require("../servers/websocket"); +const HOST = process.env.LISTEN_HOST || '0.0.0.0'; +const PORT = process.env.HEALTH_PORT || 8888; + + +const {request_logger} = require("./helper"); +const debug = process.env.debug === "1"; +const respond = function (res, data) { + res.statusCode = 200; + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify({"data": data})); +} + +const check_health = async function (req, res) { + debug && console.log("[WS]looking for all available sessions"); + respond(res, { + "health": true, + "details": { + "version": process.env.npm_package_version, + "connectedSessions": await socket.countSessions() + } + }); +} + + +const healthApp = express(); +healthApp.use(express.json()); +healthApp.use(express.urlencoded({extended: true})); +healthApp.use(request_logger("[healthApp]")); +healthApp.get(['/'], (req, res) => { + res.statusCode = 200; + res.end("healthApp ok!"); + } +); +healthApp.get('/health', check_health); +healthApp.get('/shutdown', (req, res) => { + console.log("Requested shutdown"); + res.statusCode = 200; + res.end("ok!"); + process.kill(1, "SIGTERM"); + } +); + +const listen_cb = async function () { + console.log(`Health App listening on http://${HOST}:${PORT}`); + console.log('Press Ctrl+C to quit.'); +} + +module.exports = { + healthApp, + PORT, + listen_cb +}; diff --git a/ee/api/chalicelib/core/health.py b/ee/api/chalicelib/core/health.py index 784dfceab..514425ddf 100644 --- a/ee/api/chalicelib/core/health.py +++ b/ee/api/chalicelib/core/health.py @@ -32,7 +32,7 @@ else: HEALTH_ENDPOINTS = { "alerts": "http://alerts-openreplay.app.svc.cluster.local:8888/metrics", "assets": "http://assets-openreplay.app.svc.cluster.local:8888/metrics", - "assist": "http://assist-openreplay.app.svc.cluster.local:8888/metrics", + "assist": "http://assist-openreplay.app.svc.cluster.local:8888/health", "chalice": "http://chalice-openreplay.app.svc.cluster.local:8888/metrics", "db": "http://db-openreplay.app.svc.cluster.local:8888/metrics", "ender": "http://ender-openreplay.app.svc.cluster.local:8888/metrics", @@ -41,12 +41,11 @@ else: "http": "http://http-openreplay.app.svc.cluster.local:8888/metrics", "ingress-nginx": "http://ingress-nginx-openreplay.app.svc.cluster.local:8888/metrics", "integrations": "http://integrations-openreplay.app.svc.cluster.local:8888/metrics", - "peers": "http://peers-openreplay.app.svc.cluster.local:8888/metrics", + "peers": "http://peers-openreplay.app.svc.cluster.local:8888/health", "quickwit": "http://quickwit-openreplay.app.svc.cluster.local:8888/metrics", "sink": "http://sink-openreplay.app.svc.cluster.local:8888/metrics", - "sourcemapreader": "http://sourcemapreader-openreplay.app.svc.cluster.local:8888/metrics", - "storage": "http://storage-openreplay.app.svc.cluster.local:8888/metrics", - "utilities": "http://utilities-openreplay.app.svc.cluster.local:8888/metrics", + "sourcemapreader": "http://sourcemapreader-openreplay.app.svc.cluster.local:8888/health", + "storage": "http://storage-openreplay.app.svc.cluster.local:8888/metrics" } @@ -175,8 +174,7 @@ def get_health(): "quickwit": __check_be_service("quickwit"), "sink": __check_be_service("sink"), "sourcemapreader": __check_be_service("sourcemapreader"), - "storage": __check_be_service("storage"), - "utilities": __check_be_service("utilities") + "storage": __check_be_service("storage") }, # "overall": { # "health": "na", diff --git a/ee/assist/package-lock.json b/ee/assist/package-lock.json index 967198a0e..a94f1d5bb 100644 --- a/ee/assist/package-lock.json +++ b/ee/assist/package-lock.json @@ -1,12 +1,12 @@ { "name": "assist-server", - "version": "1.0.0", + "version": "v1.11.0-ee", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "assist-server", - "version": "1.0.0", + "version": "v1.11.0-ee", "license": "Elastic License 2.0 (ELv2)", "dependencies": { "@maxmind/geoip2-node": "^3.5.0", @@ -117,9 +117,9 @@ } }, "node_modules/@types/node": { - "version": "18.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", - "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==" + "version": "18.15.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.1.tgz", + "integrity": "sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw==" }, "node_modules/accepts": { "version": "1.3.8", diff --git a/ee/assist/package.json b/ee/assist/package.json index 3fcedf03b..4ef88774a 100644 --- a/ee/assist/package.json +++ b/ee/assist/package.json @@ -1,6 +1,6 @@ { "name": "assist-server", - "version": "1.0.0", + "version": "v1.11.0-ee", "description": "assist server to get live sessions & sourcemaps reader to get stack trace", "main": "peerjs-server.js", "scripts": { diff --git a/ee/assist/server.js b/ee/assist/server.js index 482ddcd17..414d7ac2c 100644 --- a/ee/assist/server.js +++ b/ee/assist/server.js @@ -1,6 +1,7 @@ const dumps = require('./utils/HeapSnapshot'); const {request_logger} = require('./utils/helper'); const express = require('express'); +const health = require("./utils/health"); const assert = require('assert').strict; let socket; @@ -14,7 +15,7 @@ const HOST = process.env.LISTEN_HOST || '0.0.0.0'; const PORT = process.env.LISTEN_PORT || 9001; assert.ok(process.env.ASSIST_KEY, 'The "ASSIST_KEY" environment variable is required'); const P_KEY = process.env.ASSIST_KEY; -const PREFIX = process.env.PREFIX || process.env.prefix || `/assist` +const PREFIX = process.env.PREFIX || process.env.prefix || `/assist`; let debug = process.env.debug === "1"; const heapdump = process.env.heapdump === "1"; @@ -31,18 +32,11 @@ if (process.env.uws !== "true") { ); heapdump && wsapp.use(`${PREFIX}/${P_KEY}/heapdump`, dumps.router); wsapp.use(`${PREFIX}/${P_KEY}`, socket.wsRouter); - wsapp.get('/private/shutdown', (req, res) => { - console.log("Requested shutdown"); - res.statusCode = 200; - res.end("ok!"); - process.kill(1, "SIGTERM"); - } - ); wsapp.enable('trust proxy'); const wsserver = wsapp.listen(PORT, HOST, () => { console.log(`WS App listening on http://${HOST}:${PORT}`); - console.log('Press Ctrl+C to quit.'); + health.healthApp.listen(health.PORT, HOST, health.listen_cb); }); socket.start(wsserver); @@ -102,13 +96,6 @@ if (process.env.uws !== "true") { uapp.post(`${PREFIX}/${P_KEY}/sockets-live/:projectKey`, uWrapper(socket.handlers.socketsLiveByProject)); uapp.get(`${PREFIX}/${P_KEY}/sockets-live/:projectKey/:sessionId`, uWrapper(socket.handlers.socketsLiveByProject)); - uapp.get('/private/shutdown', (res, req) => { - console.log("Requested shutdown"); - res.writeStatus('200 OK').end("ok!"); - process.kill(1, "SIGTERM"); - } - ); - socket.start(uapp); uapp.listen(HOST, PORT, (token) => { @@ -116,7 +103,7 @@ if (process.env.uws !== "true") { console.warn("port already in use"); } console.log(`WS App listening on http://${HOST}:${PORT}`); - console.log('Press Ctrl+C to quit.'); + health.healthApp.listen(health.PORT, HOST, health.listen_cb); }); diff --git a/ee/assist/servers/websocket-cluster.js b/ee/assist/servers/websocket-cluster.js index a1f389685..4618a6184 100644 --- a/ee/assist/servers/websocket-cluster.js +++ b/ee/assist/servers/websocket-cluster.js @@ -83,6 +83,22 @@ const respond = function (res, data) { } } +const countSessions = async function () { + let count = 0; + try { + let rooms = await io.of('/').adapter.allRooms(); + for (let i of rooms) { + let {projectKey, sessionId} = extractPeerId(i); + if (projectKey !== undefined && sessionId !== undefined) { + count++; + } + } + } catch (e) { + console.error(e); + } + return count; +} + const socketsList = async function (req, res) { debug && console.log("[WS]looking for all available sessions"); let filters = await extractPayloadFromRequest(req, res); @@ -417,6 +433,7 @@ module.exports = { process.exit(2); }); }, + countSessions, handlers: { socketsList, socketsListByProject, diff --git a/ee/assist/servers/websocket.js b/ee/assist/servers/websocket.js index 330361df3..7fb1c9684 100644 --- a/ee/assist/servers/websocket.js +++ b/ee/assist/servers/websocket.js @@ -66,6 +66,23 @@ const respond = function (res, data) { } } +const countSessions = async function () { + let count = 0; + try { + const arr = Array.from(io.sockets.adapter.rooms); + const filtered = arr.filter(room => !room[1].has(room[0])); + for (let i of filtered) { + let {projectKey, sessionId} = extractPeerId(i[0]); + if (projectKey !== null && sessionId !== null) { + count++; + } + } + } catch (e) { + console.error(e); + } + return count; +} + const socketsList = async function (req, res) { debug && console.log("[WS]looking for all available sessions"); let filters = await extractPayloadFromRequest(req, res); @@ -379,6 +396,7 @@ module.exports = { socketConnexionTimeout(io); }, + countSessions, handlers: { socketsList, socketsListByProject, diff --git a/ee/assist/utils/health.js b/ee/assist/utils/health.js new file mode 100644 index 000000000..bcb64f61c --- /dev/null +++ b/ee/assist/utils/health.js @@ -0,0 +1,61 @@ +const express = require('express'); +let socket; +if (process.env.redis === "true") { + socket = require("../servers/websocket-cluster"); +} else { + socket = require("../servers/websocket"); +} +const HOST = process.env.LISTEN_HOST || '0.0.0.0'; +const PORT = process.env.HEALTH_PORT || 8888; + + +const {request_logger} = require("./helper"); +const debug = process.env.debug === "1"; +const respond = function (res, data) { + res.statusCode = 200; + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify({"data": data})); +} + +const check_health = async function (req, res) { + debug && console.log("[WS]looking for all available sessions"); + respond(res, { + "health": true, + "details": { + "version": process.env.npm_package_version, + "connectedSessions": await socket.countSessions(), + "uWebSocket": process.env.uws === "true", + "redis": process.env.redis === "true" + } + }); +} + + +const healthApp = express(); +healthApp.use(express.json()); +healthApp.use(express.urlencoded({extended: true})); +healthApp.use(request_logger("[healthApp]")); +healthApp.get(['/'], (req, res) => { + res.statusCode = 200; + res.end("healthApp ok!"); + } +); +healthApp.get('/health', check_health); +healthApp.get('/shutdown', (req, res) => { + console.log("Requested shutdown"); + res.statusCode = 200; + res.end("ok!"); + process.kill(1, "SIGTERM"); + } +); + +const listen_cb = async function () { + console.log(`Health App listening on http://${HOST}:${PORT}`); + console.log('Press Ctrl+C to quit.'); +} + +module.exports = { + healthApp, + PORT, + listen_cb +}; diff --git a/peers/clean-dev.sh b/peers/clean-dev.sh new file mode 100755 index 000000000..a0cb5c9ed --- /dev/null +++ b/peers/clean-dev.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +rm -rf ./utils \ No newline at end of file diff --git a/peers/package-lock.json b/peers/package-lock.json index 5811b59e3..b18dca820 100644 --- a/peers/package-lock.json +++ b/peers/package-lock.json @@ -1,12 +1,12 @@ { "name": "peers-server", - "version": "1.0.0", + "version": "v1.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "peers-server", - "version": "1.0.0", + "version": "v1.11.0", "license": "Elastic License 2.0 (ELv2)", "dependencies": { "express": "^4.18.2", @@ -57,9 +57,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "18.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", - "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==" + "version": "18.15.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.1.tgz", + "integrity": "sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -600,9 +600,9 @@ } }, "node_modules/node-fetch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", - "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -657,9 +657,9 @@ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/peer": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/peer/-/peer-1.0.0-rc.10.tgz", - "integrity": "sha512-S7uMqIAd1tTyvnkj4efdpn8EGc6BM1ONQvLg0vZkrnvA1cTisscBRsx+Jbor6DH68NRLnXgZbiY7/6FDER/GXw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/peer/-/peer-1.0.0.tgz", + "integrity": "sha512-fPVtyCKZWVfjbf7XnY7MskhTlu+pBpMvQV81sngT8aXIuT5YF9y9bwIw8y5BlI98DV0NsDpLjow/oemFNvcKkg==", "dependencies": { "@types/express": "^4.17.3", "@types/ws": "^7.2.3 || ^8.0.0", @@ -921,9 +921,9 @@ } }, "node_modules/ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "engines": { "node": ">=10.0.0" }, diff --git a/peers/package.json b/peers/package.json index 400274ffc..82fd0ddf6 100644 --- a/peers/package.json +++ b/peers/package.json @@ -1,6 +1,6 @@ { "name": "peers-server", - "version": "1.0.0", + "version": "v1.11.0", "description": "assist server to get live sessions & sourcemaps reader to get stack trace", "main": "peerjs-server.js", "scripts": { diff --git a/peers/prepare-dev.sh b/peers/prepare-dev.sh new file mode 100755 index 000000000..d4825a3d0 --- /dev/null +++ b/peers/prepare-dev.sh @@ -0,0 +1,3 @@ +#!/bin/bash +rsync -avr --exclude=".*" --ignore-existing ../assist/utils ./ +cp ../sourcemap-reader/utils/health.js ./utils/. \ No newline at end of file diff --git a/peers/run-dev.sh b/peers/run-dev.sh new file mode 100755 index 000000000..00e8d5a4b --- /dev/null +++ b/peers/run-dev.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -a +source .env +set +a + +npm start \ No newline at end of file diff --git a/peers/server.js b/peers/server.js index 4e25a0827..8cf12d546 100644 --- a/peers/server.js +++ b/peers/server.js @@ -1,5 +1,6 @@ const dumps = require('./utils/HeapSnapshot'); const {request_logger} = require('./utils/helper'); +const health = require("./utils/health"); const assert = require('assert').strict; const {peerRouter, peerConnection, peerDisconnect, peerError} = require('./servers/peerjs-server'); const express = require('express'); @@ -44,10 +45,4 @@ process.on('uncaughtException', err => { // process.exit(1); }); -app.get('/private/shutdown', (req, res) => { - console.log("Requested shutdown"); - res.statusCode = 200; - res.end("ok!"); - process.kill(1, "SIGTERM"); - } -); \ No newline at end of file +health.healthApp.listen(health.PORT, HOST, health.listen_cb); \ No newline at end of file diff --git a/scripts/schema/db/init_dbs/postgresql/1.11.0/1.11.0.sql b/scripts/schema/db/init_dbs/postgresql/1.11.0/1.11.0.sql index 13813f5bc..41521a886 100644 --- a/scripts/schema/db/init_dbs/postgresql/1.11.0/1.11.0.sql +++ b/scripts/schema/db/init_dbs/postgresql/1.11.0/1.11.0.sql @@ -17,4 +17,9 @@ ALTER TABLE public.projects "defaultInputMode": "obscured" }'::jsonb; +ALTER TYPE issue_type ADD VALUE IF NOT EXISTS 'mouse_thrashing'; + +ALTER TABLE events.clicks + ADD COLUMN hesitation integer NULL; + COMMIT; \ No newline at end of file diff --git a/sourcemap-reader/.gitignore b/sourcemap-reader/.gitignore index 09c49b304..f2686decf 100644 --- a/sourcemap-reader/.gitignore +++ b/sourcemap-reader/.gitignore @@ -3,5 +3,8 @@ node_modules npm-debug.log .cache test.html -/utils/ +/utils/assistHelper.js +/utils/geoIP.js +/utils/HeapSnapshot.js +/utils/helper.js mappings.wasm diff --git a/sourcemap-reader/clean-dev.sh b/sourcemap-reader/clean-dev.sh index a0cb5c9ed..ebc1c36c6 100755 --- a/sourcemap-reader/clean-dev.sh +++ b/sourcemap-reader/clean-dev.sh @@ -1,3 +1,6 @@ #!/bin/bash -rm -rf ./utils \ No newline at end of file +rm -rf ./utils/assistHelper.js +rm -rf ./utils/geoIP.js +rm -rf ./utils/HeapSnapshot.js +rm -rf ./utils/helper.js \ No newline at end of file diff --git a/sourcemap-reader/package-lock.json b/sourcemap-reader/package-lock.json index e756a0649..1b3f5ec82 100644 --- a/sourcemap-reader/package-lock.json +++ b/sourcemap-reader/package-lock.json @@ -1,12 +1,12 @@ { "name": "sourcemaps-reader", - "version": "1.0.0", + "version": "v1.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sourcemaps-reader", - "version": "1.0.0", + "version": "v1.11.0", "license": "Elastic License 2.0 (ELv2)", "dependencies": { "aws-sdk": "^2.1314.0", @@ -43,9 +43,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1329.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1329.0.tgz", - "integrity": "sha512-F5M9x/T+PanPiYGiL95atFE6QiwzJWwgPahaEgUdq+qvVAgruiNy5t6nw2B5tBB/yWDPPavHFip3UsXeO0qU3Q==", + "version": "2.1333.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1333.0.tgz", + "integrity": "sha512-MvOuleNeRryJtkCGXGEWDHPqqgxuqdi4/hGzJEpn9tnjsW9LNK8UgFPpYzUZ24ZO/3S+jiUh8DMMrL5nVGnagg==", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/sourcemap-reader/package.json b/sourcemap-reader/package.json index 9d5a2806b..5a9b28ef8 100644 --- a/sourcemap-reader/package.json +++ b/sourcemap-reader/package.json @@ -1,6 +1,6 @@ { "name": "sourcemaps-reader", - "version": "1.0.0", + "version": "v1.11.0", "description": "assist server to get live sessions & sourcemaps reader to get stack trace", "main": "peerjs-server.js", "scripts": { diff --git a/sourcemap-reader/server.js b/sourcemap-reader/server.js index 02f63475b..08e3f926f 100644 --- a/sourcemap-reader/server.js +++ b/sourcemap-reader/server.js @@ -1,11 +1,12 @@ const dumps = require('./utils/HeapSnapshot'); const sourcemapsReaderServer = require('./servers/sourcemaps-server'); const express = require('express'); +const health = require("./utils/health"); const {request_logger} = require("./utils/helper"); const HOST = process.env.SMR_HOST || '127.0.0.1'; const PORT = process.env.SMR_PORT || 9000; -const PREFIX = process.env.PREFIX || process.env.prefix || '' +const PREFIX = process.env.PREFIX || process.env.prefix || ''; const P_KEY = process.env.SMR_KEY || 'smr'; const heapdump = process.env.heapdump === "1"; @@ -21,14 +22,7 @@ heapdump && app.use(`${PREFIX}/${P_KEY}/heapdump`, dumps.router); const server = app.listen(PORT, HOST, () => { console.log(`SR App listening on http://${HOST}:${PORT}`); - console.log('Press Ctrl+C to quit.'); + health.healthApp.listen(health.PORT, HOST, health.listen_cb); }); -module.exports = {server}; -app.get('/private/shutdown', (req, res) => { - console.log("Requested shutdown"); - res.statusCode = 200; - res.end("ok!"); - process.kill(1, "SIGTERM"); - } -); \ No newline at end of file +module.exports = {server}; \ No newline at end of file diff --git a/sourcemap-reader/utils/health.js b/sourcemap-reader/utils/health.js new file mode 100644 index 000000000..0b89dd1d8 --- /dev/null +++ b/sourcemap-reader/utils/health.js @@ -0,0 +1,52 @@ +const express = require('express'); +const HOST = process.env.LISTEN_HOST || '0.0.0.0'; +const PORT = process.env.HEALTH_PORT || 8888; + + +const {request_logger} = require("./helper"); +const debug = process.env.debug === "1"; +const respond = function (res, data) { + res.statusCode = 200; + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify({"data": data})); +} + +const check_health = async function (req, res) { + debug && console.log("[WS]looking for all available sessions"); + respond(res, { + "health": true, + "details": { + "version": process.env.npm_package_version + } + }); +} + + +const healthApp = express(); +healthApp.use(express.json()); +healthApp.use(express.urlencoded({extended: true})); +healthApp.use(request_logger("[healthApp]")); +healthApp.get(['/'], (req, res) => { + res.statusCode = 200; + res.end("healthApp ok!"); + } +); +healthApp.get('/health', check_health); +healthApp.get('/shutdown', (req, res) => { + console.log("Requested shutdown"); + res.statusCode = 200; + res.end("ok!"); + process.kill(1, "SIGTERM"); + } +); + +const listen_cb = async function () { + console.log(`Health App listening on http://${HOST}:${PORT}`); + console.log('Press Ctrl+C to quit.'); +} + +module.exports = { + healthApp, + PORT, + listen_cb +};