diff --git a/bigbluebutton-html5/imports/startup/server/index.js b/bigbluebutton-html5/imports/startup/server/index.js
index a2e99ec206..6c9353702f 100755
--- a/bigbluebutton-html5/imports/startup/server/index.js
+++ b/bigbluebutton-html5/imports/startup/server/index.js
@@ -6,7 +6,6 @@ import Users from '/imports/api/users';
import './settings';
import { check } from 'meteor/check';
import Logger from './logger';
-import Redis from './redis';
import setMinBrowserVersions from './minBrowserVersion';
import { PrometheusAgent, METRIC_NAMES } from './prom-metrics/index.js'
@@ -14,7 +13,6 @@ import { PrometheusAgent, METRIC_NAMES } from './prom-metrics/index.js'
let guestWaitHtml = '';
const DEFAULT_LANGUAGE = Meteor.settings.public.app.defaultSettings.application.fallbackLocale;
-const CLIENT_VERSION = Meteor.settings.public.app.html5ClientBuild;
const FALLBACK_ON_EMPTY_STRING = Meteor.settings.public.app.fallbackOnEmptyLocaleString;
const env = Meteor.isDevelopment ? 'development' : 'production';
@@ -357,7 +355,3 @@ WebApp.connectHandlers.use('/guestWait', (req, res) => {
res.writeHead(200);
res.end(guestWaitHtml);
});
-
-export const eventEmitter = Redis.emitter;
-
-export const redisPubSub = Redis;
diff --git a/bigbluebutton-html5/imports/startup/server/metrics.js b/bigbluebutton-html5/imports/startup/server/metrics.js
index b9ce7252f1..967fa0d628 100644
--- a/bigbluebutton-html5/imports/startup/server/metrics.js
+++ b/bigbluebutton-html5/imports/startup/server/metrics.js
@@ -5,12 +5,6 @@ import path from 'path';
import { Meteor } from 'meteor/meteor';
import Logger from './logger';
-const {
- metricsDumpIntervalMs,
- metricsFolderPath,
- removeMeetingOnEnd,
-} = Meteor.settings.private.redis.metrics;
-
class Metrics {
constructor() {
this.metrics = {};
diff --git a/bigbluebutton-html5/imports/startup/server/prom-metrics/metrics.js b/bigbluebutton-html5/imports/startup/server/prom-metrics/metrics.js
index 903cbe5230..147b6d8678 100644
--- a/bigbluebutton-html5/imports/startup/server/prom-metrics/metrics.js
+++ b/bigbluebutton-html5/imports/startup/server/prom-metrics/metrics.js
@@ -1,18 +1,14 @@
const {
Counter,
- Gauge,
- Histogram
+ Histogram,
} = require('prom-client');
-const METRICS_PREFIX = 'html5_'
+const METRICS_PREFIX = 'html5_';
const METRIC_NAMES = {
METEOR_METHODS: 'meteorMethods',
METEOR_ERRORS_TOTAL: 'meteorErrorsTotal',
METEOR_RTT: 'meteorRtt',
- REDIS_MESSAGE_QUEUE: 'redisMessageQueue',
- REDIS_PAYLOAD_SIZE: 'redisPayloadSize',
- REDIS_PROCESSING_TIME: 'redisProcessingTime'
-}
+};
let METRICS;
const buildMetrics = () => {
@@ -36,25 +32,7 @@ const buildMetrics = () => {
buckets: [0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.75, 1, 1.5, 2, 2.5, 5],
labelNames: ['role', 'instanceId'],
}),
-
- [METRIC_NAMES.REDIS_MESSAGE_QUEUE]: new Gauge({
- name: `${METRICS_PREFIX}redis_message_queue`,
- help: 'Message queue size in redis',
- labelNames: ['meetingId', 'role', 'instanceId'],
- }),
-
- [METRIC_NAMES.REDIS_PAYLOAD_SIZE]: new Histogram({
- name: `${METRICS_PREFIX}redis_payload_size`,
- help: 'Redis events payload size',
- labelNames: ['eventName', 'role', 'instanceId'],
- }),
-
- [METRIC_NAMES.REDIS_PROCESSING_TIME]: new Histogram({
- name: `${METRICS_PREFIX}redis_processing_time`,
- help: 'Redis events processing time in milliseconds',
- labelNames: ['eventName', 'role', 'instanceId'],
- }),
- }
+ };
}
return METRICS;
diff --git a/bigbluebutton-html5/imports/startup/server/redis.js b/bigbluebutton-html5/imports/startup/server/redis.js
deleted file mode 100755
index 0e3c77408a..0000000000
--- a/bigbluebutton-html5/imports/startup/server/redis.js
+++ /dev/null
@@ -1,416 +0,0 @@
-import Redis from 'redis';
-import { Meteor } from 'meteor/meteor';
-import { EventEmitter2 } from 'eventemitter2';
-import { check } from 'meteor/check';
-import Logger from './logger';
-import Metrics from './metrics';
-import queue from 'queue';
-import { PrometheusAgent, METRIC_NAMES } from './prom-metrics/index.js'
-
-// Fake meetingId used for messages that have no meetingId
-const NO_MEETING_ID = '_';
-
-const { queueMetrics } = Meteor.settings.private.redis.metrics;
-const { collectRedisMetrics: PROM_METRICS_ENABLED } = Meteor.settings.private.prometheus;
-
-const makeEnvelope = (channel, eventName, header, body, routing) => {
- const envelope = {
- envelope: {
- name: eventName,
- routing: routing || {
- sender: 'html5-server',
- },
- timestamp: Date.now(),
- },
- core: {
- header,
- body,
- },
- };
-
- return JSON.stringify(envelope);
-};
-
-const getInstanceIdFromMessage = (parsedMessage) => {
- // End meeting message does not seem to have systemProps
- let instanceIdFromMessage = parsedMessage.core.body.props?.systemProps?.html5InstanceId;
-
- return instanceIdFromMessage;
-};
-
-class MeetingMessageQueue {
- constructor(eventEmitter, asyncMessages = [], redisDebugEnabled = false) {
- this.asyncMessages = asyncMessages;
- this.emitter = eventEmitter;
- this.queue = queue({ autostart: true, concurrency: 1 });
- this.redisDebugEnabled = redisDebugEnabled;
-
- this.handleTask = this.handleTask.bind(this);
- this.queue.taskHandler = this.handleTask;
- }
-
- handleTask(data, next) {
- const { channel } = data;
- const { envelope } = data.parsedMessage;
- const { header } = data.parsedMessage.core;
- const { body } = data.parsedMessage.core;
- const { meetingId } = header;
- const eventName = header.name;
- const isAsync = this.asyncMessages.includes(channel)
- || this.asyncMessages.includes(eventName);
-
- const beginHandleTimestamp = Date.now();
- let called = false;
-
- check(eventName, String);
- check(body, Object);
-
- const callNext = () => {
- if (called) return;
- if (this.redisDebugEnabled) {
- Logger.debug(`Redis: ${eventName} completed ${isAsync ? 'async' : 'sync'}`);
- }
- called = true;
-
- if (queueMetrics) {
- const queueId = meetingId || NO_MEETING_ID;
- const dataLength = JSON.stringify(data).length;
-
- Metrics.processEvent(queueId, eventName, dataLength, beginHandleTimestamp);
- }
-
- const queueLength = this.queue.length;
-
- if (PROM_METRICS_ENABLED) {
- const dataLength = JSON.stringify(data).length;
- const currentTimestamp = Date.now();
- const processTime = currentTimestamp - beginHandleTimestamp;
- PrometheusAgent.observe(METRIC_NAMES.REDIS_PROCESSING_TIME, processTime, { eventName });
- PrometheusAgent.observe(METRIC_NAMES.REDIS_PAYLOAD_SIZE, dataLength, { eventName });
- meetingId && PrometheusAgent.set(METRIC_NAMES.REDIS_MESSAGE_QUEUE, queueLength, { meetingId });
- }
-
- if (queueLength > 100) {
- Logger.warn(`Redis: MeetingMessageQueue for meetingId=${meetingId} has queue size=${queueLength} `);
- }
- next();
- };
-
- const onError = (reason) => {
- Logger.error(`${eventName}: ${reason.stack ? reason.stack : reason}`);
- callNext();
- };
-
- try {
- if (this.redisDebugEnabled) {
- if (!Meteor.settings.private.analytics.includeChat && eventName === 'GroupChatMessageBroadcastEvtMsg') {
- return;
- }
- Logger.debug(`Redis: ${JSON.stringify(data.parsedMessage.core)} emitted`);
- }
-
- if (isAsync) {
- callNext();
- }
-
- this.emitter
- .emitAsync(eventName, { envelope, header, body }, meetingId)
- .then(callNext)
- .catch(onError);
- } catch (reason) {
- onError(reason);
- }
- }
-
- add(...args) {
- const { taskHandler } = this.queue;
-
- this.queue.push(function (next) {
- taskHandler(...args, next);
- })
-
- }
-}
-
-class RedisPubSub {
- static handlePublishError(err) {
- if (err) {
- Logger.error(err);
- }
- }
-
- constructor(config = {}) {
- this.config = config;
-
- this.didSendRequestEvent = false;
- const host = process.env.REDIS_HOST || Meteor.settings.private.redis.host;
- const redisConf = Meteor.settings.private.redis;
- this.instanceId = parseInt(process.env.INSTANCE_ID, 10) || 1; // 1 also handles running in dev mode
- this.role = process.env.BBB_HTML5_ROLE;
- this.customRedisChannel = `to-html5-redis-channel${this.instanceId}`;
-
- const { password, port } = redisConf;
-
- if (password) {
- this.pub = Redis.createClient({ host, port, password });
- this.sub = Redis.createClient({ host, port, password });
- this.pub.auth(password);
- this.sub.auth(password);
- } else {
- this.pub = Redis.createClient({ host, port });
- this.sub = Redis.createClient({ host, port });
- }
-
- if (queueMetrics) {
- Metrics.startDumpFile();
- }
-
- this.emitter = new EventEmitter2();
- this.meetingsQueues = {};
- // We create this _ meeting queue because we need to be able to handle system messages (no meetingId in core.header)
- this.meetingsQueues[NO_MEETING_ID] = new MeetingMessageQueue(this.emitter, this.config.async, this.config.debug);
-
- this.handleSubscribe = this.handleSubscribe.bind(this);
- this.handleMessage = this.handleMessage.bind(this);
- }
-
- init() {
- this.sub.on('psubscribe', Meteor.bindEnvironment(this.handleSubscribe));
- this.sub.on('pmessage', Meteor.bindEnvironment(this.handleMessage));
-
- const channelsToSubscribe = this.config.subscribeTo;
-
- channelsToSubscribe.push(this.customRedisChannel);
-
- switch (this.role) {
- case 'frontend':
- this.sub.psubscribe('from-akka-apps-frontend-redis-channel');
- if (this.redisDebugEnabled) {
- Logger.debug(`Redis: NodeJSPool:${this.instanceId} Role: frontend. Subscribed to 'from-akka-apps-frontend-redis-channel'`);
- }
- break;
- case 'backend':
- channelsToSubscribe.forEach((channel) => {
- this.sub.psubscribe(channel);
- if (this.redisDebugEnabled) {
- Logger.debug(`Redis: NodeJSPool:${this.instanceId} Role: backend. Subscribed to '${channelsToSubscribe}'`);
- }
- });
- break;
- default:
- this.sub.psubscribe('from-akka-apps-frontend-redis-channel');
- channelsToSubscribe.forEach((channel) => {
- this.sub.psubscribe(channel);
- if (this.redisDebugEnabled) {
- Logger.debug(`Redis: NodeJSPool:${this.instanceId} Role:${this.role} (likely only one nodejs running, doing both frontend and backend. Dev env? ). Subscribed to '${channelsToSubscribe}'`);
- }
- });
-
- break;
- }
- }
-
- updateConfig(config) {
- this.config = Object.assign({}, this.config, config);
- this.redisDebugEnabled = this.config.debug;
- }
-
-
- // TODO: Move this out of this class, maybe pass as a callback to init?
- handleSubscribe() {
- if (this.didSendRequestEvent || this.role === 'frontend') return;
-
- // populate collections with pre-existing data
- const REDIS_CONFIG = Meteor.settings.private.redis;
- const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
- const EVENT_NAME = 'GetAllMeetingsReqMsg';
-
- const body = {
- requesterId: 'nodeJSapp',
- html5InstanceId: this.instanceId,
- };
-
- this.publishSystemMessage(CHANNEL, EVENT_NAME, body);
- this.didSendRequestEvent = true;
- }
-
- handleMessage(pattern, channel, message) {
- const parsedMessage = JSON.parse(message);
- const { ignored: ignoredMessages, async } = this.config;
- const eventName = parsedMessage.core.header.name;
-
- if (ignoredMessages.includes(channel)
- || ignoredMessages.includes(eventName)) {
- if (eventName === 'CheckAlivePongSysMsg') {
- return;
- }
- if (this.redisDebugEnabled) {
- Logger.debug(`Redis: ${eventName} skipped`);
- }
- return;
- }
-
- if (this.redisDebugEnabled) {
- Logger.warn('Received event to handle', { date: new Date().toISOString(), eventName });
- }
-
- // System messages like Create / Destroy Meeting, etc do not have core.header.meetingId.
- // Process them in MeetingQueue['_'] --- the NO_MEETING queueId
- const meetingIdFromMessageCoreHeader = parsedMessage.core.header.meetingId || NO_MEETING_ID;
-
- if (this.role === 'frontend') {
- // receiving this message means we need to look at it. Frontends do not have instanceId.
- if (meetingIdFromMessageCoreHeader === NO_MEETING_ID) { // if this is a system message
- if (eventName === 'MeetingCreatedEvtMsg' || eventName === 'SyncGetMeetingInfoRespMsg') {
- const meetingIdFromMessageMeetingProp = parsedMessage.core.body.props.meetingProp.intId;
- this.meetingsQueues[meetingIdFromMessageMeetingProp] = new MeetingMessageQueue(this.emitter, async, this.redisDebugEnabled);
- if (this.redisDebugEnabled) {
- Logger.warn('Created frontend queue for meeting', { date: new Date().toISOString(), eventName, meetingIdFromMessageMeetingProp });
- }
- }
- }
-
- if (eventName === 'SendWhiteboardAnnotationsEvtMsg') {
- // we need the instanceId in the handler to avoid calling the same upsert on the
- // Annotations collection multiple times
- parsedMessage.core.body.myInstanceId = this.instanceId;
- }
-
- if (!this.meetingsQueues[meetingIdFromMessageCoreHeader]) {
- Logger.warn(`Frontend meeting queue had not been initialized ${message}`, { eventName, meetingIdFromMessageCoreHeader });
- this.meetingsQueues[NO_MEETING_ID].add({
- pattern,
- channel,
- eventName,
- parsedMessage,
- });
- } else {
- // process the event - whether it's a system message or not, the meetingIdFromMessageCoreHeader value is adjusted
- this.meetingsQueues[meetingIdFromMessageCoreHeader].add({
- pattern,
- channel,
- eventName,
- parsedMessage,
- });
- }
- } else { // backend
- if (meetingIdFromMessageCoreHeader === NO_MEETING_ID) { // if this is a system message
- const meetingIdFromMessageMeetingProp = parsedMessage.core.body.props?.meetingProp?.intId;
- const instanceIdFromMessage = getInstanceIdFromMessage(parsedMessage);
-
- if (this.instanceId === instanceIdFromMessage) {
- // create queue or destroy queue
- if (eventName === 'MeetingCreatedEvtMsg' || eventName === 'SyncGetMeetingInfoRespMsg') {
- this.meetingsQueues[meetingIdFromMessageMeetingProp] = new MeetingMessageQueue(this.emitter, async, this.redisDebugEnabled);
- if (this.redisDebugEnabled) {
- Logger.warn('Created backend queue for meeting', { date: new Date().toISOString(), eventName, meetingIdFromMessageMeetingProp });
- }
- }
- this.meetingsQueues[NO_MEETING_ID].add({
- pattern,
- channel,
- eventName,
- parsedMessage,
- });
- } else {
- if (eventName === 'MeetingEndedEvtMsg' || eventName === 'MeetingDestroyedEvtMsg') {
- // MeetingEndedEvtMsg does not follow the system message pattern for meetingId
- // but we still need to process it on the backend which is processing the rest of the events
- // for this meetingId (it does not contain instanceId either, so we cannot compare that)
- const meetingIdForMeetingEnded = parsedMessage.core.body.meetingId;
- if (!!this.meetingsQueues[meetingIdForMeetingEnded]) {
- this.meetingsQueues[NO_MEETING_ID].add({
- pattern,
- channel,
- eventName,
- parsedMessage,
- });
- }
- }
- // ignore
- }
- } else {
- // add to existing queue
- if (!!this.meetingsQueues[meetingIdFromMessageCoreHeader]) {
- // only handle message if we have a queue for the meeting. If we don't have a queue, it means it's for a different instanceId
- this.meetingsQueues[meetingIdFromMessageCoreHeader].add({
- pattern,
- channel,
- eventName,
- parsedMessage,
- });
- } else {
- // If we reach this line, this means that there is no existing queue for this redis "backend" message
- // which means that the meeting is fully handled by another bbb-html5-backend.
- // Logger.warn('Backend meeting queue had not been initialized', { eventName, meetingIdFromMessageCoreHeader })
- }
- }
- }
- }
-
- destroyMeetingQueue(id) {
- delete this.meetingsQueues[id];
- }
-
- on(...args) {
- return this.emitter.on(...args);
- }
-
- publishVoiceMessage(channel, eventName, voiceConf, payload) {
- const header = {
- name: eventName,
- voiceConf,
- };
-
- const envelope = makeEnvelope(channel, eventName, header, payload);
-
- return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError);
- }
-
- publishSystemMessage(channel, eventName, payload) {
- const header = {
- name: eventName,
- };
-
- const envelope = makeEnvelope(channel, eventName, header, payload);
-
- return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError);
- }
-
- publishMeetingMessage(channel, eventName, meetingId, payload) {
- const header = {
- name: eventName,
- meetingId,
- };
-
- const envelope = makeEnvelope(channel, eventName, header, payload);
-
- return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError);
- }
-
- publishUserMessage(channel, eventName, meetingId, userId, payload) {
- const header = {
- name: eventName,
- meetingId,
- userId,
- };
-
- if (!meetingId || !userId) {
- Logger.warn(`Publishing ${eventName} with potentially missing data userId=${userId} meetingId=${meetingId}`);
- }
- const envelope = makeEnvelope(channel, eventName, header, payload, { meetingId, userId });
-
- return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError);
- }
-}
-
-const RedisPubSubSingleton = new RedisPubSub();
-
-Meteor.startup(() => {
- const REDIS_CONFIG = Meteor.settings.private.redis;
-
- RedisPubSubSingleton.updateConfig(REDIS_CONFIG);
- RedisPubSubSingleton.init();
-});
-
-export default RedisPubSubSingleton;
diff --git a/bigbluebutton-html5/imports/ui/Types/meetingClientSettings.ts b/bigbluebutton-html5/imports/ui/Types/meetingClientSettings.ts
index 76a6701a14..5f7907934a 100644
--- a/bigbluebutton-html5/imports/ui/Types/meetingClientSettings.ts
+++ b/bigbluebutton-html5/imports/ui/Types/meetingClientSettings.ts
@@ -776,7 +776,6 @@ export interface VirtualBackgrounds {
export interface Private {
analytics: Analytics
app: App2
- redis: Redis
serverLog: ServerLog
minBrowserVersions: MinBrowserVersion[]
prometheus: Prometheus
@@ -793,19 +792,6 @@ export interface App2 {
loadSlidesFromHttpAlways: boolean
}
-export interface Redis {
- host: string
- port: string
- timeout: number
- password: string | null
- debug: boolean
- metrics: Metrics
- channels: Channels
- subscribeTo: string[]
- async: string[]
- ignored: string[]
-}
-
export interface Metrics {
queueMetrics: boolean
metricsDumpIntervalMs: number
@@ -839,7 +825,6 @@ export interface Prometheus {
enabled: boolean
path: string
collectDefaultMetrics: boolean
- collectRedisMetrics: boolean
}
export default MeetingClientSettings;
diff --git a/bigbluebutton-html5/imports/ui/core/initial-values/meetingClientSettings.ts b/bigbluebutton-html5/imports/ui/core/initial-values/meetingClientSettings.ts
index 28e9ee126a..1d30cd1f12 100644
--- a/bigbluebutton-html5/imports/ui/core/initial-values/meetingClientSettings.ts
+++ b/bigbluebutton-html5/imports/ui/core/initial-values/meetingClientSettings.ts
@@ -1006,35 +1006,6 @@ export const meetingClientSettingsInitialValues: MeetingClientSettings = {
pencilChunkLength: 100,
loadSlidesFromHttpAlways: false,
},
- redis: {
- host: '127.0.0.1',
- port: '6379',
- timeout: 5000,
- password: null,
- debug: false,
- metrics: {
- queueMetrics: false,
- metricsDumpIntervalMs: 60000,
- metricsFolderPath: 'METRICS_FOLDER',
- removeMeetingOnEnd: true,
- },
- channels: {
- toAkkaApps: 'to-akka-apps-redis-channel',
- toThirdParty: 'to-third-party-redis-channel',
- },
- subscribeTo: [
- 'to-html5-redis-channel',
- 'from-akka-apps-[^f]*',
- 'from-third-party-redis-channel',
- ],
- async: [
- 'from-akka-apps-wb-redis-channel',
- ],
- ignored: [
- 'CheckAlivePongSysMsg',
- 'DoLatencyTracerMsg',
- ],
- },
serverLog: {
level: 'info',
streamerLog: false,
@@ -1107,7 +1078,6 @@ export const meetingClientSettingsInitialValues: MeetingClientSettings = {
enabled: false,
path: '/metrics',
collectDefaultMetrics: false,
- collectRedisMetrics: false,
},
},
};
diff --git a/bigbluebutton-html5/package-lock.json b/bigbluebutton-html5/package-lock.json
index 2d82578309..2804ef1152 100644
--- a/bigbluebutton-html5/package-lock.json
+++ b/bigbluebutton-html5/package-lock.json
@@ -4003,11 +4003,6 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
- "denque": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
- "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
- },
"dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -8105,35 +8100,6 @@
"resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz",
"integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng=="
},
- "redis": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz",
- "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==",
- "requires": {
- "denque": "^1.5.0",
- "redis-commands": "^1.7.0",
- "redis-errors": "^1.2.0",
- "redis-parser": "^3.0.0"
- }
- },
- "redis-commands": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
- "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ=="
- },
- "redis-errors": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
- "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60="
- },
- "redis-parser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
- "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=",
- "requires": {
- "redis-errors": "^1.0.0"
- }
- },
"reduce-css-calc": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
diff --git a/bigbluebutton-html5/package.json b/bigbluebutton-html5/package.json
index 3540a5c4ef..41199dfb91 100644
--- a/bigbluebutton-html5/package.json
+++ b/bigbluebutton-html5/package.json
@@ -95,7 +95,6 @@
"react-virtualized": "^9.22.4",
"recharts": "^2.7.2",
"reconnecting-websocket": "~v4.4.0",
- "redis": "^3.1.2",
"sanitize-html": "2.12.1",
"scheduler": "^0.20.2",
"sdp-transform": "2.7.0",
diff --git a/bigbluebutton-html5/private/config/settings.yml b/bigbluebutton-html5/private/config/settings.yml
index 53877c367f..7fe366ffb0 100755
--- a/bigbluebutton-html5/private/config/settings.yml
+++ b/bigbluebutton-html5/private/config/settings.yml
@@ -1113,29 +1113,6 @@ private:
localesUrl: /locale-list
pencilChunkLength: 100
loadSlidesFromHttpAlways: false
- redis:
- host: 127.0.0.1
- port: '6379'
- timeout: 5000
- password: null
- debug: false
- metrics:
- queueMetrics: false
- metricsDumpIntervalMs: 60000
- metricsFolderPath: METRICS_FOLDER
- removeMeetingOnEnd: true
- channels:
- toAkkaApps: to-akka-apps-redis-channel
- toThirdParty: to-third-party-redis-channel
- subscribeTo:
- - to-html5-redis-channel
- - from-akka-apps-[^f]*
- - from-third-party-redis-channel
- async:
- - from-akka-apps-wb-redis-channel
- ignored:
- - CheckAlivePongSysMsg
- - DoLatencyTracerMsg
serverLog:
level: info
streamerLog: false
@@ -1176,5 +1153,3 @@ private:
path: '/metrics'
# Whether default metrics for Node.js processes should be exported
collectDefaultMetrics: false
- # Whether redis metrics should be exported
- collectRedisMetrics: false