Commit Graph

362 Commits

Author SHA1 Message Date
Paulo Lanzarin
e1dc4b55e4
fix(bbb-html5): customHeartbeat would not close stale sessions, + (#19017)
* fix(bbb-html5): customHeartbeat would not close stale sessions, +

The [disabled by default] custom heartbeat included in Meteor's server
does not end connections when they are considered unhealthy/stale, which
deviates a bit from the default implementation. See:
https://github.com/bigbluebutton/bigbluebutton/pull/11486.

This commit includes a call to the default heartbeat termination timeout
so sockets are correctly cleaned up when the custom heartbeat is
activated. It also adds a customHeartbeatUseDataFrames config to allow
controlling whether the custom heartbeat should use WS data frames as
valid heartbeats as well - this should only be useful for
testing/debugging purposes and the default behavior (true) is
maintained.

As a side note: this change spun off from an investigation where some
problematic networks were triggering periodic client re-connects due to
the default heartbeat failing. Investigation points to the control
frames being put alongside fragmented WS data frames and the server side
failing to recognize the former - which means pong frames would be missed and
the health check would fail. Since the default heartbeat _does not_
account for data frame traffic (eg DDP payloads), it would shut down the
client's WS even though it was healthy.
The custom heartbeat _does_ account for data frames, which mitigates
that scenario and prevents unecessary reconnections.

* fix(bbb-html5): frontend crash due to undefined vars in customHeartbeat 

Meteor frontends may crash when customHeartbeat is enabled
due to an undefined access in the heartbeat`s logger.

Add optional chaining to the session props access so it won`t crash and tune down some log levels around that area.
2024-01-22 11:10:41 -05:00
Anton Georgiev
ec2ad5ed45 chore: upgrade NodeJS to 18 2023-06-13 12:08:58 -04:00
Ramón Souza
014dfa2670 adjust defaultsDeep merge 2023-03-01 16:48:08 -03:00
Ramón Souza
aa47aaa22a replace lodash merge and mergeWith 2023-03-01 11:52:39 -03:00
Ramón Souza
8315abc2c0 replace lodash find and isArray 2023-02-21 10:14:56 -03:00
Ramón Souza
077592df18
Merge pull request #15745 from germanocaumo/dup-ann-ws-fix
fix(whiteboard): annotations duplication in websocket/collection
2022-10-03 15:10:59 -03:00
Ramón Souza
4b4afb6916 remove empty object in logs 2022-10-03 13:48:00 -03:00
germanocaumo
d770a7df8c fix(whiteboard): only call annotation upsert in one frontend instance
We were calling upsert in the Annotations collection for the same annotation in all frontend instances, this could lead to the same annotation being inserted
multiple times with different ids due to concurrency.

Added the html5InstanceId of the original request to the redis message so we can use it to only call upsert in one instance.
2022-09-28 12:03:59 +00:00
Ramón Souza
ab50d4d60e add settings 2022-09-16 13:01:07 -03:00
Ramón Souza
706014430c change server name format and add timestamp to logs 2022-09-16 11:09:21 -03:00
Ramón Souza
485103ff93 include server role and instance in logs 2022-09-16 11:09:12 -03:00
Ramón Souza
7bb26b64ff add server health log 2022-09-16 11:09:04 -03:00
Ramon Souza
07f9a192b9 Merge remote-tracking branch 'upstream/v2.4.x-release' into merge-2425-apr27 2022-04-27 15:32:20 -03:00
Gustavo Trott
720a986d86 Remove html5client/useragent handler 2022-04-25 20:47:59 -03:00
germanocaumo
cacba3c7e7 feat(html5): add meteor rtt as prometheus metric 2022-04-08 14:27:35 +00:00
germanocaumo
640fe57a26 fix(html5): rename stream-cursor prom metric
Removes meetintId info from the event name in prometheus metric to better concur with other events.
2022-04-08 14:22:29 +00:00
germanocaumo
a04fbc56e1 feat(html5): add error logs and redis prometheus metrics
New config: settings.private.prometheus.collectRedisMetrics disabled by default
2022-04-08 14:21:55 +00:00
Ramón Souza
dba04834c7 Merge remote-tracking branch 'upstream/v2.4.x-release' into 2524-feb08 2022-02-09 15:52:42 +00:00
Joao Victor
a0434ff1e0 Change message queue concurrency to 1 2022-02-01 14:20:08 -03:00
Joao Victor
fbb807208e Undo presentation queue implementation 2022-02-01 14:18:16 -03:00
Joao Victor
914739ffc2 Add chaining operator 2022-01-28 10:18:55 -03:00
Joao Victor
da13e0aa93 Add own message queue for presentations 2022-01-28 09:59:41 -03:00
Pedro Beschorner Marin
810deb907b refactor(etherpad): access control et al.
Move all Etherpad's access control from Meteor to a separated [Node application](https://github.com/bigbluebutton/bbb-pads).
This new app uses [Etherpad's API](https://etherpad.org/doc/v1.8.4/#index_overview)
to create groups and manage session tokens for users to access them. Each group
represents one distinct pad at the html5 client.

- Removed locked users' access to pads: replaced readOnly pad's access with a new pad's content sharing routine
- Pad's access is now controlled by [Etherpad's API](https://etherpad.org/doc/v1.8.4/#index_overview)
- Closed captions edited content now reflects at it's live feedback
- Improved closed caption's dictation mode live feedback
- Moved all Etherpad's API control from Meteor to a separated [app](https://github.com/bigbluebutton/bbb-pads)
- Included access control both in akka-apps and bbb-pads
2022-01-21 16:56:01 -03:00
Ramón Souza
4b1f1594b1 replace arrays in configuration override 2021-11-24 17:09:06 +00:00
KDSBrowne
e184912311 prevent properties of undefined (reading 'toUpperCase') 2021-11-22 00:55:51 +00:00
Mario Jr
1ee9203fad fix: enable useLocationOrigin in dynamic-import
This makes meteor to work with a reverse proxy, without changing it's
settings
2021-11-09 12:10:25 -03:00
germanocaumo
3dd679761f Merge branch 'v2.4.x-release' of https://github.com/bigbluebutton/bigbluebutton into f-h-prom-agent 2021-11-05 19:38:40 +00:00
germanocaumo
6f1e1d4f4a refactor(prom-html5): serve endpoint via meteor instead of http server +
- separate backend/frontend metrics, only add metrics related to the role
- add role and instance labels
2021-11-05 16:31:23 +00:00
prlanzarin
b677f805c1 refactor(virtual-backgrounds): move WASM binaries to public, let nginx serve them 2021-10-14 03:50:39 +00:00
Paulo Lanzarin
ced2b27f84 refactor: remove unused gauge in bbb-html5 metrics 2021-10-06 19:03:36 +00:00
germanocaumo
8b2fd271de feat(html5-server): add number of meteor methods metric in prometheus 2021-10-06 19:02:36 +00:00
germanocaumo
e5b012d007 refactor(html5-prom): use ES6 imports/exports 2021-10-06 18:56:55 +00:00
germanocaumo
30db4a4122 refactor(html5-prometheus): remove MCS references and change default port 2021-10-06 18:56:32 +00:00
germanocaumo
a0580431e0 feat(html5-server): add prometheus default instrumentation
Adds prometheus client to collect html5 server metrics.
Only default Node.js metrics in this initial version.

Enable via configs in private.app.prometheus
2021-10-06 18:55:19 +00:00
prlanzarin
9071ba8bc4 refactor(virtual-backgrounds): re-organize virtual background code
Changes (maybe not a complete list):
  - Disable virtualbgs by default
  - Move the virtualbg selector in video-preview to the side below the
profile selection
  - Restore old video-preview sizes
  - Add a wrapper class for MediaStreams (BBBVideoStream)
  - Centralize virtualbg services and business logic code into BBBVideoStream
  - Refactor and centralize virtualbg constant fetching
  - Refactor and centralize virtualbg config fetching
  - Organize virtualbg type definitions
  - Remove added states in video-provider to prevent further bloat
  - Remove added states in video-preview to prevent further bloat
  - Lock virtual bg switching while video-preview itself is locked
  - Add proper virtualbg error surfacing via toasts
  - Refactor iOS availability detection to use centralized UA checker
  - Avoid calling gUM when toggling virtualbgs on/off
  - Make virtualbg video-list-item action a toggle instead of a
state-aware action
  - Make virtualbg switching work in video-preview for cameras that are
already shared. Especially useful when there are multiple source
cameras, and will be important in the near future
  - Add Derivative Work notices in files that are partially copied from
jitsi-meet
  - Simplify track replacing in video-provider
  - Split video-preview UI code for virtualbgs into a separate functional component
2021-07-22 18:53:42 +00:00
Bartu Bazna
9f791a8892 Squashed virtual background commits 2021-07-21 20:00:19 +00:00
Anton Georgiev
6cf863ff3d
Merge pull request #12604 from KDSBrowne/bbb-api-unit-tests
test: Add Unit Tests For Meteor Polls API
2021-07-06 16:56:46 -04:00
Anton Georgiev
b9cc633286 Merge branch 'v2.3.x-release' of github.com:bigbluebutton/bigbluebutton into merge-2.3.5-into-develop 2021-07-06 19:36:19 +00:00
Anton Georgiev
b5851aa152 removeUser: handle connections in frontends, db changes in backend 2021-06-30 20:08:00 +00:00
Joao Siebel
f23cdf4dbf Restore mongo metrics feature 2021-06-28 12:00:09 -03:00
KDSBrowne
cf6672b1c9 Add unit tests for poll api modifiers | 2x handlers 2021-06-17 02:20:49 +00:00
Ramon Souza
57cdf3f6b7 replace power-queue with queue 2021-05-24 16:41:22 -03:00
Ramon Souza
34007f5bc5 lint 2021-05-20 15:14:19 -03:00
Ramon Souza
f3260ed8bf handle additional cases for locales 2021-05-20 14:01:58 -03:00
Ramon Souza
02aea0a3de template syntax in string literal 2021-05-07 08:38:19 -03:00
Anton Georgiev
91b57f82f9 feat: allow to omit chat message from logging 2021-04-26 16:04:57 -04:00
Anton Georgiev
abd9539405
Update redis.js 2021-04-08 15:55:55 -04:00
Anton Georgiev
30229cebb6
Remove bbb-html5-backend log when meeting handled by other backend 2021-04-08 15:51:57 -04:00
Pedro Beschorner Marin
0c4cf0135d Handle pad's events and Meteor's instances
Since Meteor was split in multiple process and events started to be
filtered by instances, all Etherpad's Redis events were being discarded.

Etherpad has a Redis' publisher plugin that is unaware of BigBlueButton's
existence. All the communication between them is kept simple with minimal
of internal data exchange. The concept of distincts subscribers at Meteor's
side broke part of this simplicity and, now, Etherpad has to know which
instance must receive it's messages. To provide such information I decided
to include Meteor's instance as part of the pad's id. Should look like:

 - [instanceId]padId for the shared notes
 - [instanceId]padId_cc_(locale) for the closed captions

With those changes the pad id generation made at the recording scripts had to
be re-done because there is no instance id available. Pad id is now recorded at
akka-apps and queried while archiving the shared notes.
2021-03-23 18:03:50 -03:00
Ramon Souza
ca345de246 add check after extractCredentials is used 2021-03-16 13:15:41 -03:00