Commit Graph

326 Commits

Author SHA1 Message Date
Fred Dixon
e08ff14c52
Update events_worker.rb
Fix file existence test.
2020-12-20 18:38:18 -04:00
Anton Georgiev
0c7ead1916 Merge branch 'v2.2.x-release' of github.com:bigbluebutton/bigbluebutton into oct16-merge 2020-10-21 14:48:02 +00:00
Calvin Walton
1268753519 Fix io deadlock in recording scripts process execution utilities
The previous implementation of the BigBlueButton.execute method runs the
process with separate stdout and stderr streams. It first reads all of
the output from stdout, then reads all of the output from stderr.

This can cause a deadlock if the process writes a lot of data to stderr.
The IO buffer for stderr could fill, blocking progress. But since it
hasn't closed stdout, the ruby script is still waiting on a read to
stdout.

Switch to an execution method (using IO.popen) that allows combining
stdout and stderr into a single stream, eliminating the issue.
2020-09-23 16:16:57 -04:00
Anton Georgiev
f9d1079b41
Merge pull request #10238 from kepstin/rec-fixes-develop
Events archiver: Strip more invalid characters
2020-08-25 08:36:20 -04:00
hiroshisuga
3cbe9abaf0 events_archiver.rb: Handle an empty meeting_metadata hash from redis
On my server 2.3 alpha, the method metadata_for(meeting_id) gives back {}
(empty Hash). Thus "return if meeting_metadata.nil?" does not occur.

Does @redis.hgetall give {} instead of nil, even though there is a comment in
node_modules/redis/lib/utils.js "hgetall converts its replies to an Object. If
the reply is empty, null is returned"???
2020-08-13 15:46:40 -04:00
hiroshisuga
dc0fc459e2 events_archiver.rb: Handle an empty meeting_metadata hash from redis
On my server 2.3 alpha, the method metadata_for(meeting_id) gives back {}
(empty Hash). Thus "return if meeting_metadata.nil?" does not occur.

Does @redis.hgetall give {} instead of nil, even though there is a comment in
node_modules/redis/lib/utils.js "hgetall converts its replies to an Object. If
the reply is empty, null is returned"???
2020-08-13 15:42:22 -04:00
Calvin Walton
659893051d Events archiver: Strip more invalid characters
Update the list of invalid characters based on what the XML
specification permits and discourages.

Use the ruby string `scrub` method to remove invalid characters that
can't be expressed in the `tr` syntax, like unpaired surrogates and
UTF-8 prefix bytes.
2020-08-11 14:15:29 -04:00
Anton Georgiev
b0e1dc8378 Merge branch 'v2.2.x-release' of github.com:bigbluebutton/bigbluebutton into merge-2.2-into-2.3-july-6 2020-07-07 14:35:34 +00:00
Anton Georgiev
420f8bf0a4 Merge branch 'develop' of github.com:bigbluebutton/bigbluebutton into merge-2.2-into-2.3-july-6 2020-07-07 14:13:58 +00:00
Pedro Beschorner Marin
44fc68c07c Skip recording process step for norecord meetings 2020-07-01 12:33:41 -03:00
Pedro Beschorner Marin
526f79e8f2 Merge remote-tracking branch 'bigbluebutton/v2.2.x-release' into bigbluebutton/develop 2020-06-30 18:15:18 -03:00
Calvin Walton
26f5450245 Fix removing reconnect indicator from usernames when counting participants 2020-06-24 11:23:59 -04:00
mw781
f60059c983 Ensure that files are handled safely 2 2020-06-17 11:13:07 +01:00
Anton Georgiev
cc79c4b6ae merge 2.2.10 into 2.3 2020-05-05 19:52:44 +00:00
Pedro Beschorner Marin
d97f413ef6 Fix note id 2020-04-29 13:08:10 -03:00
Calvin Walton
20b150e86b Strip control characters from user-provided metadata in events file 2020-04-01 13:21:54 -04:00
Leonardo Crauss Daronco
5bc3062d58 Fix the paths to the ruby scripts on the rap workers
Was pointing to the wrong directory when loading the ruby scripts. Also
made the directory easier to configure, it's all in a single place now.
2020-02-06 10:43:32 -03:00
Calvin Walton
1a88830a27 RaP: Fix done filenames for segmented recordings
The done filenames all have to contain the break_timestamp to identify
the segment
2020-01-21 17:21:50 -05:00
Calvin Walton
c52a67186e RaP: Clean up resque worker code, add worker for keep_events feature
I've moved the workers code into the `lib` subdirectory with other library-ish
code; this puts it into the ruby load path used by most scripts so referencing
files is easier.

I've applied various style cleanups based on the rubocop config present.

The `events` processing step has been integrated as a new worker `EventsWorker`,
there is no longer a separate `events/events.rb` script. I've reworked the
`rap-starter.rb` script to check for the done files in both the events and
recorded status directories.
2020-01-21 17:14:39 -05:00
Leonardo Crauss Daronco
ac801cfce7 Use journald as the default logger for rap and rap services
Changed only in the main class so journald is the default and in the
scripts related to the processes in resque. Internal scripts might still
be logging to files.
2019-12-06 17:06:32 -03:00
Leonardo Crauss Daronco
5e05b7a8e8 Fixes for the rap scripts after processing a real recording 2019-12-06 12:26:24 -03:00
Leonardo Crauss Daronco
62d62a2a1e Merge remote-tracking branch 'upstream/master' into v2.0-rap-on-resque
# Conflicts:
#	bigbluebutton-config/bin/bbb-conf
#	record-and-playback/core/Gemfile.lock
#	record-and-playback/core/lib/recordandplayback/events_archiver.rb
#	record-and-playback/core/scripts/archive/archive.rb
#	record-and-playback/core/scripts/bigbluebutton.yml
#	record-and-playback/core/scripts/rap-process-worker.rb
#	record-and-playback/core/scripts/rap-publish-worker.rb
#	record-and-playback/core/scripts/rap-sanity-worker.rb
#	record-and-playback/core/scripts/rap-starter.rb
#	record-and-playback/core/scripts/sanity/sanity.rb
#	record-and-playback/core/systemd/bbb-rap-archive-worker.service
#	record-and-playback/core/systemd/bbb-rap-process-worker.service
#	record-and-playback/core/systemd/bbb-rap-publish-worker.service
#	record-and-playback/core/systemd/bbb-rap-sanity-worker.service
#	record-and-playback/core/systemd/bbb-record-core.target
2019-12-04 17:33:44 -03:00
Calvin Walton
0aa018109c
Merge branch 'master' into rec-vp9 2019-10-29 10:52:30 -04:00
Calvin Walton
cad8995858 recording archive: Compress audio files
The wav files from the freeswitch recordings are huge, uncompressed.
There's no reason to keep them as wav, we can compress them in the
archive step.
2019-10-22 17:27:23 -04:00
Pedro Beschorner Marin
4bc6fae649 Patching playback updates for iOS (#8195) 2019-10-21 16:05:59 -04:00
Calvin Walton
f2f9989c70 Delete control characters from all recording event properties
Found another case where the html5 client was passing through control
characters, in the original presentation name field.

Rather than play whack-a-mole with different fields which may eventually
get poorly sanitized user data, apply the control character filtering
to all properties.

Adjust the character range to do the following:
* Allow horizontal tab (0x09), it's not problematic.
* Disallow control characters in the range 0x1A-0x1F. Probably missed by accident.
2019-07-04 10:46:46 -04:00
Richard Alam
9ac272d1a0 - use thumbnails to find the num pages of presentation instead of swfs as we now turn off generation of
swfs for html5
2019-06-07 13:22:59 -07:00
Richard Alam
a46d0b9680 Merge branch 'master' of github.com:bigbluebutton/bigbluebutton into captions-text-tracks-intermediate-branch 2019-06-06 15:04:53 -07:00
Calvin Walton
19a011cc29 RaP: Fix error message when shared notes could not be archived.
It used to print:

Failed to download file: undefined local variable or method `respose' for BigBlueButton:Module
Did you mean?  response

because the incorrect variable name was used in the error message.

There was no effect other than the message in the log, since the shared notes
couldn't be archived anyways, and the only thing the exception did was ...
prevent the shared notes from being archived.
2019-06-06 10:55:53 -04:00
Calvin Walton
812052a8c7 Change events archiver to read config from relative path
Makes testing easier
2019-06-04 11:03:22 -04:00
Calvin Walton
d74f0044cc Add function that uses ffmpeg to convert subtitles to webvtt
FFmpeg has pretty good format autodetection even if the filename has the
'.txt' extension, so just rely on that. It'll even pull subtitles out of
video files - although I expect we'll have size limits so that doesn't
happen.
2019-06-04 11:03:22 -04:00
Fred Dixon
056ef6ee8c
Merge pull request #7327 from ritzalam/add-redis-password-on-master
Add redis password on master
2019-05-09 16:35:42 -04:00
Calvin Walton
5c09ea5605 Merge branch 'archive-note' of https://github.com/fcecagno/bigbluebutton 2019-05-09 13:43:48 -04:00
Fred Dixon
0d9220051f
Merge pull request #7357 from kepstin/archive-text-cleanup
Recording: Strip control characters in whiteboard text events
2019-05-08 10:10:25 -04:00
Calvin Walton
548ac7edef Recording: Strip control characters in whiteboard text events
Sometimes when text is pasted into the whiteboard text tool from
external apps, it'll include control characters that mess up later
recording processing scripts.

Run the same cleanup as already used for chat messages on the whiteboard
text as well.

The cleanup has been adjusted to allow newline and tab characters. They
won't really cause issues in chat, and newlines (at a minimum) are
required for the whiteboard.

This is a workaround for #7356
2019-05-07 11:48:20 -04:00
Richard Alam
bf7898225b - minor cleanup 2019-04-30 12:30:59 -07:00
Felipe Cecagno
109bb7b658 cleanup 2019-04-15 12:36:05 -03:00
Ghazi Triki
757d92cc29 Raise an error when the note file header does not respond with a HTTPOK status. 2019-04-15 15:07:03 +01:00
Ghazi Triki
92a4bc7e52 Replaced wget and curl commands by net/http module. 2019-04-04 14:09:49 +01:00
Richard Alam
f2098bc376 Merge branch 'master' of github.com:bigbluebutton/bigbluebutton into ritzalam-add-redis-password-on-v2.2-dev 2019-04-02 10:43:46 -07:00
Calvin Walton
ef007cc1a4 Recording: Switch from vp8 to vp9, use better x264 options 2019-03-17 10:01:39 -04:00
Felipe Cecagno
657a3ef013 use etherpad api to archive exported note 2019-03-05 13:17:48 -03:00
Calvin Walton
49a86e4d4e Recording archive: log when events are are out of order and must be sorted
To help us track down exactly why this is happening - and know when we've
properly fixed it - add some logging.
2019-02-26 12:10:21 -05:00
Calvin Walton
abc8284052 Recording events archiver: fix syntax errors
I had renamed prev_event to previous_event, but missed a couple of spots.
2019-02-25 16:43:27 -05:00
Calvin Walton
5d189be062 Sort events when writing the events.xml file
BigBlueButton can sometimes write events out of order - this particularly
seems to affect the final RecordStatusEvent in a meeting which was ended
while recording was still running. This breaks the recording processing
scripts.

As a workaround, sort the events as they're being written into the events.xml
file. We have the following properties:

* The input data is already mostly sorted
* Items in the wrong position will be no more than a couple spots off from where
  they should be
* We should not change the relative order of events with the same timestamp.

The best algorithm to use here is a simple insertion sort. When adding each new
event to the XML structure, it scans backwards through existing events until it
finds the correct position.

For #6035
2019-02-25 12:34:29 -05:00
Calvin Walton
1e76256ea5 Recording: Fix handling of links in chat messages
At some point, BigBlueButton switched from using `"` to `'` in the link tags in
chat messages, which caused the regular expression that was supposed to remove
the `event:` prefix to not match.

I've replaced the error-prone regular expression with an actual HTML parser,
using the "Loofah" HTML transformation/sanitization library based on Nokogiri.

I've removed the code that detected unlinked URLs, since it was broken - and
not needed: current BigBlueButton versions do the link detection in the client.
If someone reprocesses a really old BBB recording with these scripts, URLs in
chat might not be linked in the result. But they wouldn't have been linked in the
client in the original meeting either, so I figure that's ok.

Fixes #6475
2019-02-20 12:03:24 -05:00
Fred Dixon
b9f9f0b3af
Merge pull request #6635 from kepstin/rec-corrupt-video
Add a check to reject undecodable video streams.
2019-01-24 16:27:54 -05:00
Calvin Walton
52fadaf4a6 Add a check to reject undecodable video streams.
In some cases, ffmpeg will be able to read the file, but the video itself
can't be decoded (missing/corrupt stream headers, for example). In this case,
some of the properties on the stream object will be nil.
Make sure that pix_fmt is present in the probed info, since that's a required
property.
2019-01-24 14:56:48 -05:00
Richard Alam
05c7b5f7e7 Merge branch 'v2.2-dev' into merge-with-v2.2-dev 2018-12-14 15:08:47 -08:00
Richard Alam
1b3895e3aa - add redis password to record and playback scripts 2018-12-14 13:37:21 -08:00