Commit Graph

924 Commits

Author SHA1 Message Date
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
Anton Georgiev
ab845b3078 Merge branch 'v2.4.x-release' of github.com:bigbluebutton/bigbluebutton into merge-24-rc-1-into-dev 2021-09-22 15:28:13 +00:00
Ramon Souza
6d95cab29c prevent invisible cameras issue on page load 2021-09-16 09:25:51 -03:00
Ramon Souza
6bc8ec5782 create BaseContainer 2021-09-13 08:34:03 -03:00
Ramon Souza
098826c70a rename layout functions 2021-09-10 17:48:52 -03:00
Ramon Souza
981e707612 add selector to containers, remove old layoutContext + convert base component into function 2021-09-10 14:21:04 -03:00
Ramon Souza
65382e72af remove saveLocale static method 2021-08-25 14:06:57 -03:00
Ramon Souza
86df6ee96f prevent endless loop if locale file is invalid json 2021-08-25 13:12:38 -03:00
Ramon Souza
b048e77f10 user leave alerts feature 2021-08-20 13:14:12 -03:00
Vitor Mateus De Almeida
145ca61d40 linting some files 2021-08-09 11:24:02 -03:00
Anton Georgiev
5cfb723e07 Merge branch 'v2.3.x-release' of github.com:bigbluebutton/bigbluebutton into aug6-merge 2021-08-06 15:23:36 +00:00
Vitor Mateus De Almeida
1b18977eac rename all NewLayout.. to Layout.. 2021-08-05 08:03:24 -03:00
Vitor Mateus De Almeida
09082734c9 remove old media, webcam draggable and panel components 2021-08-05 04:26:03 -03:00
Vitor Mateus De Almeida
abf089ae73 remove layout manager legacy 2021-08-05 01:22:07 -03:00
Ramon Souza
57d5ee8735 fix override default locale api parameter 2021-08-02 11:24:35 -03: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
4baf67c24d
Merge pull request #12796 from ramonlsouza/fix-start-closed-chat
fix: start closed chat option does not work
2021-07-20 16:25:35 -04:00
Anton Georgiev
472c9a6107 Merge branch 'v2.3.x-release' of github.com:bigbluebutton/bigbluebutton into 237-into-develop 2021-07-20 15:21:21 +00:00
Ramon Souza
92edd08448 fix start closed chat option 2021-07-20 10:19:48 -03:00
Ramon Souza
a7c545ff1f refactor reason -> ejectedReason 2021-07-08 13:09:25 -03:00
Ramon Souza
8fe8a0ac6b display endWhenNoModerator message 2021-07-08 11:51:00 -03: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
Anton Georgiev
5ee5ed1970 Merge branch 'v2.3.x-release' of github.com:bigbluebutton/bigbluebutton into merge-june16 2021-06-16 19:54:28 +00:00
Anton Georgiev
4780da6a79 Set Divehi as RTL 2021-06-14 16:33:17 +00:00
Ramon Souza
3ba15a83dd different navbar height for large fonts 2021-06-04 10:44:50 -03:00
Anton Georgiev
fd9b68b526
Revert "fix: different navbar size for locales with large fonts" 2021-06-03 10:42:02 -04:00
Ramon Souza
f4f01818f8 add localeChanged event to resize presentation area 2021-06-02 09:41:15 -03:00
Ramon Souza
8d2474135a formatting 2021-06-01 14:46:29 -03:00
Ramon Souza
96edb582f7 different navbar height for large fonts 2021-06-01 14:45:16 -03:00
Anton Georgiev
4356ea9e3d
Merge pull request #12439 from ramonlsouza/issue-12376
fix: replace power-queue dependency
2021-05-25 10:07:08 -04:00
Anton Georgiev
2eb09a15db
Merge pull request #12394 from vitormateusalmeida/layoutManagerNew
Add New Layout Manager
2021-05-25 10:06:35 -04: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
Vitor Mateus De Almeida
047b573d10 Fix auto resize when open/close panels 2021-05-19 19:29:03 -03:00
Vitor Mateus De Almeida
444b29a346 Merge remote-tracking branch 'upstream/develop' into layoutManagerNew 2021-05-19 11:54:22 -03:00
Vitor Mateus De Almeida
88a1edcc06 Fix userlist item button, Fix polling close button 2021-05-19 11:51:31 -03:00
Ramon Souza
165545ee77 remove useless conditional in base component 2021-05-19 08:57:32 -03:00
Vitor Mateus De Almeida
1326f3f791 Add New Layout Manager 2021-05-17 17:25:07 -03:00
Ramon Souza
02aea0a3de template syntax in string literal 2021-05-07 08:38:19 -03:00
Ramon Souza
3678348fdf remove unused code 2021-04-29 13:52:22 -03:00
Anton Georgiev
e00b7efb04
Merge pull request #12165 from vitormateusalmeida/issue-12050
Fix layout broken after open+close shared notes
2021-04-27 11:11:17 -04:00
Vitor Mateus De Almeida
340e0ba052 fix layout broken after opne close shared notes 2021-04-26 20:04:34 -03:00
Anton Georgiev
91b57f82f9 feat: allow to omit chat message from logging 2021-04-26 16:04:57 -04:00
Mario Jr
af6cea1734 fix: client may crash when loading develop version
Removed the reference for invalidateCookie, since it doesn't exist anymore.
2021-04-23 10:58:08 -03:00
Ramon Souza
75b9261f6f remove unused imports/variables 2021-04-22 13:17:20 -03:00
Vitor Mateus De Almeida
3374e638bb fix layout doesn't update when screen is shared 2021-04-16 18:02:47 -03: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
Ramon Souza
9218262e0a all device info moved to helper 2021-03-31 14:13:36 -03: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
c4fc7bcd92 locales fetch rework 2021-03-23 10:09:28 -03:00
Ramon Souza
5f2138ddea check if user settings are loaded 2021-03-17 15:01:08 -03:00
Ramon Souza
9ed8af666e fix chat panel appearing after webcam share/unshare 2021-03-17 13:20:59 -03:00
Ramon Souza
ca345de246 add check after extractCredentials is used 2021-03-16 13:15:41 -03:00
Anton Georgiev
a41fa87bdd
Re-enable redis.js log for meetings handled by other processes
I was shown a case just now where `CreateNewPresentationPodEvtMsg` can happen prior to the full add of a meeting. This log line becomes relevant once again
2021-03-15 12:55:51 -04:00
Anton Georgiev
8568bb03b9
Disable redis.js log for meetings handled by other processes
Disabled `'Backend meeting queue had not been initialized'` which was added to pinpoint an issue with handling of meeting create events, but the issue seems to be unrelated (and has not been hit after resolving a memory leak)
2021-03-15 12:30:02 -04:00
Ramón Souza
0105373cee
Applies changes needed to serve locale files as static content (#11234)
* moving locales folder to /public and applying changes needed to serve locales as static files

* better dev/prod check

* transifex pull script changes to match new locales directory + ignore locales with less than 100 lines

* fix local/prod locales path

* merge fallback messages

* applies new locale changes to legacy client

`bbb-html5.nginx` file content should also be changed to the following:

```
location /html5client/locales {
  alias /usr/share/meteor/bundle/programs/web.browser/app/locales;
}

location /html5client/compatibility {
  alias /usr/share/meteor/bundle/programs/web.browser/app/compatibility;
}

location /html5client/resources {
  alias /usr/share/meteor/bundle/programs/web.browser/app/resources;
}

location /html5client/svgs {
  alias /usr/share/meteor/bundle/programs/web.browser/app/svgs;
}

location /html5client/fonts {
  alias /usr/share/meteor/bundle/programs/web.browser/app/fonts;
}

location /html5client {
  # proxy_pass http://127.0.0.1:4100; # use for development
  proxy_pass http://poolhtml5servers; # use for production
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}
```
2021-03-11 06:42:41 -05:00
Ramon Souza
fb22eca58d fix legacy client with customHeartbeat:false 2021-03-10 15:14:25 -03:00
Mario Jr
c7df108f5a Improve the way we observe changes on Users's collection
It is safer to look at subscriptions's state to users instead of depending
on the initial state of the collection at mounting time. Although
i couldn't force any race conditions on this, there's a chance it could
happen. The fix avoid this problem.
This complements #11533
2021-03-08 18:08:56 -03:00
Mario Jr
9b1630186c Move some validations to the User's collection query
Also removed unnecessary fields
2021-03-05 15:56:42 -03:00
Mario Junior
d4620b024d
Update bigbluebutton-html5/imports/startup/client/base.jsx
Co-authored-by: Anton Georgiev <antobinary@users.noreply.github.com>
2021-03-05 15:14:19 -03:00
Mario Jr
837b1cfb52 Improve performance when doing user join notifications
Complements #11533
2021-03-05 15:10:31 -03:00
Anton Georgiev
088c3cde44
Merge pull request #11533 from mariogasparoni/fix-11399
Fix audio and push alerts for user join
2021-03-04 15:47:17 -05:00
hiroshisuga
b228d4cbb8
Probably a bug in usersVideo 2021-03-02 23:56:10 +09:00
Mario Jr
8036ce71b1 Fix audio and push alerts for user join
When validating tokens, the dummyUser created at the beginning is set
with validated=true. This means there won't be the state change that used
to occur from validated:false to validated:true (which detects the moment
joined the meeting) , therefore the alert code that expects for this change
won't run.
To fix this for audio alerts, we now detect when user join by observing
additions in Users's collection. This is actually good because we start
observing this only once (in componentDidMount), differently we used to do,
by calling this every time the tracker was activated.

To distinguish between the user addition that initially populates user's
collection from those that happens after user join (which are the ones we
want), we store the initial state (at componentDidMount) and compare it
with new additions. If the user added is present at the initial state,
then it is an addition to populates the collection, otherwise this is a real
user addition (happened after user joined the meeting)

Partially fixes #11399
2021-03-02 08:43:56 -03:00
Ramon Souza
ba6e6c8238 remove unnecessary dependency 2021-03-01 09:07:06 -03:00
Joao Siebel
31d49536e8 Add extra logs when handling messages on redis 2021-02-24 17:56:14 -03:00
Anton Georgiev
fc001a142c
Merge pull request #11443 from mariogasparoni/develop
Do not uncessarily fetch locales at first time you open/save settings menu
2021-02-23 09:31:24 -05:00
Anton Georgiev
111109674e
Merge pull request #11247 from ramonlsouza/language-dropdown
Reduces the number of options displayed on locale settings dropdown
2021-02-22 15:44:29 -05:00
Anton Georgiev
dfa754af79
Merge pull request #11436 from AadityaPrakash/meteor-config
Implemented merge option for default and local settings.
2021-02-22 15:30:15 -05:00
Mario Jr
d961dea594 Do not uncessarily fetch locales at first time you open/save settings menu
Locales would be fetched even if you simply open and save settings window (without changing any setting)
We now test it similarly we do on 2.2
Closes #11318
2021-02-20 11:47:46 -03:00
Aaditya Prakash
c3a7fde807 Implemented merge option for default and local settings. 2021-02-19 14:44:23 +01:00
Ramon Souza
3778ccb397 fix layout params not affecting the meeting 2021-02-18 13:11:02 -03:00
Anton Georgiev
683847304d on frontend attempt to handle events without matching queue 2021-02-17 20:51:36 +00:00
Anton Georgiev
b2c4244276 Merge branch 'develop' of github.com:bigbluebutton/bigbluebutton into 2.3-alpha5-with-split-meteor-roles-10349 2021-02-16 19:55:10 +00:00
Anton Georgiev
1cedc56504 process only some of CreateMeeting logic in frontends to avoid meeting duplication 2021-02-16 15:12:25 +00:00
Anton Georgiev
f43560d535 Support for backend vs frontend nodejs instances bbb-html5 2021-02-16 03:19:31 +00:00
Ramon Souza
1083fe810a no unmount on change locale 2021-02-12 13:55:39 -03:00
Ramon Souza
46af7880d6 Merge remote-tracking branch 'upstream/develop' into PR-8696 2021-02-11 09:12:13 -03:00
Anton Georgiev
e2e0b78d40 Merge branch 'develop' of github.com:bigbluebutton/bigbluebutton into split-meteor-roles-on-top-of-2.3-alpha6 2021-02-08 23:39:42 +00:00
Anton Georgiev
363c801338
Merge pull request #11215 from pedrobmarin/guest-draft
Disable authenticated guests
2021-02-05 16:13:46 -05:00
Anton Georgiev
8c0f0fdd52 Split Meteor roles backend-frontend revisit 2021-02-05 17:47:46 +00:00
Ramon Souza
55651506a4 improve language selector filter, closes #10706 2021-02-02 15:44:58 -03:00
Joao Siebel
68b2752e0d Add flag to enable sync 2021-01-29 14:27:13 -03:00
Joao Siebel
8c7c21f936 Sync users in collection with server active connections 2021-01-26 16:22:32 -03:00
Pedro Beschorner Marin
85ee3b283f Identify mobile users at user list 2021-01-23 21:57:55 -03:00
KDSBrowne
206cae3707 fix locale fetch loop with xx_XX fallback/override 2021-01-19 16:02:20 +00:00
Anton Georgiev
fc93b5a91c correctly add chat message without flattening 2020-12-17 22:02:38 +00:00
Anton Georgiev
c1ffced27d Merge branch 'v2.2.x-release' of github.com:bigbluebutton/bigbluebutton into develop 2020-12-17 21:14:29 +00:00
Joao Siebel
c5b8f30f5d Add option to generate heapdump file and improve metrics 2020-12-15 13:10:39 -03:00
Anton Georgiev
8b65f9e15b Set bbb-html5 loadbalancing to be round robin 2020-12-15 01:55:57 +00:00
Anton Georgiev
9239d515a5 dispatch whiteboard events to html5 redis channel only 2020-12-12 01:45:38 +00:00
Anton Georgiev
0be8773e4c Loadbalance bbb-html5 in bbb-web based on CPU 2020-12-11 21:36:06 +00:00
Joao Siebel
5b0d6c59e6 Code clean up 2020-12-10 14:05:22 -03:00
Joao Siebel
e9d05454ea Remvoe console 2020-12-10 13:52:25 -03:00
Joao Siebel
bf5a45d303 Create Metrics class 2020-12-10 12:07:06 -03:00
Joao Siebel
d6a1f1a454 Change processing start time 2020-12-09 15:06:25 -03:00
Joao Siebel
029c42c1e5 Add processing time metrics 2020-12-09 14:24:41 -03:00
Anton Georgiev
3930e164e6
Merge branch 'develop' into debug-window 2020-12-08 16:16:24 -05:00
Joao Siebel
0020d2b079 Add try/catch in custom send function 2020-12-08 19:53:33 +00:00
Joao Siebel
6e529e5292 Add try/catch to heartbeat function 2020-12-08 19:53:33 +00:00
Joao Siebel
240b75ea65 cherry-pick PR #10953 2020-12-08 19:50:18 +00:00
Joao Siebel
b532673691 Move metric function 2020-12-08 10:49:07 -03:00
Joao Siebel
0ec8576209 Fix multiple write listeners 2020-12-08 09:37:59 -03:00
Joao Siebel
829591ffc7 Implement redis metrics object 2020-12-07 17:57:33 -03:00
Joao Siebel
fc1b06c3e7 Add try/catch in custom send function 2020-12-03 15:07:24 -03:00
Joao Siebel
5d95e5ca1d Add try/catch to heartbeat function 2020-12-02 16:43:34 -03:00
Joao Siebel
d9a046fba9 Log uncaught errors in node 2020-12-02 16:06:42 -03:00
Anton Georgiev
244a239810 Merge branch 'v2.2.x-release' of github.com:bigbluebutton/bigbluebutton into 2020-12-01-merge 2020-12-01 20:02:50 +00:00
Anton Georgiev
ff6963e835
Merge pull request #10921 from BrentBaccala/dont-reset-panel-defaults
Only set panel settings to login defaults on login, not everytime the…
2020-11-30 14:47:43 -05:00
Anton Georgiev
f34826718d include instanceId in resources url 2020-11-30 16:09:35 +00:00
Brent Baccala
8845998bbd Only set panel settings to login defaults on login, not everytime the base component renders 2020-11-27 16:51:45 -05:00
Joao Siebel
c34d5381fe Add flag to enable/disable custom heartbeat functions 2020-11-26 11:19:59 -03:00
Anton Georgiev
0c7ae7537b
Only display Redis: MeetingMessageQueue if size > 100 2020-11-25 10:32:45 -05:00
Anton Georgiev
3faabd1821 Merge 2.2.29 and 2.2.30 into 2.3.x 2020-11-24 15:13:09 +00:00
Tainan Felipe
8650e0500b Port socket sockejs timeout to 2.3 2020-11-20 14:31:24 -03:00
Anton Georgiev
39257aa2d8 parse instanceId as int; develop on port 4000 2020-11-19 15:31:24 +00:00
Anton Georgiev
23f2df11d5 code changes to allow for meetings' redis events to be processed on different html5 nodejs pids 2020-11-18 20:34:02 +00:00
Joao Siebel
b6b211f4fb Tweak heartbeat 2020-11-16 18:37:25 -03:00
Joao Siebel
1c47023e8a Add original function link for reference 2020-11-16 10:46:18 -03:00
Joao Siebel
3a2d06fd88 Tweak sockjs timeout value 2020-11-13 18:41:56 -03:00
Anton Georgiev
a8dc7a0bff Simplified redis debug and placed behind check 2020-11-12 21:03:57 -05:00
Anton Georgiev
5ba12846d5
Update index.js 2020-10-28 15:17:17 -04:00
Joao Siebel
e50c348874 WIP improve log 2020-10-21 14:27:40 -03:00
Joao Siebel
be8421db3c Merge remote-tracking branch 'upstream/develop' into connection-manager 2020-10-21 13:57:17 -03: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
Joao Siebel
dadca62741 Merge remote-tracking branch 'upstream/develop' into connection-manager 2020-10-13 10:49:12 -03:00
Anton Georgiev
adcb05b1ec
Merge pull request #10612 from jfsiebel/improve-logs
Improve  log in/authentication logs
2020-10-09 13:43:09 -04:00
Joao Siebel
14388ec922 Improve logs for a better debug/understanding of problems related to authentication and log in process 2020-10-07 16:50:17 -03:00
Mario Jr
e9e436378a Correctly set audio input/output devices
When refusing ("thumbs down" button) echo test, user is able to select a different input device. This should work fine for chrome, firefox and safari (once user grants permission when asked by html5client).
For output devices, we depend on setSinkId function, which is enabled by default on current chrome release (2020) but not in Firefox (user needs to enable "setSinkId in about:config page). This implementation is listed as (?) in MDN.
In other words, output device selection should work out of the box for chrome, only.
When selecting an outputDevice, all alert sounds (hangup, screenshare , polling, etc) also goes to the same output device.
This solves #10592
2020-10-06 20:37:55 -03:00
Vitor Mateus De Almeida
69eb26f281 Merge remote-tracking branch 'upstream/develop' into debug-window 2020-09-22 09:37:42 -03:00
Anton Georgiev
124b2d9b51
Merge branch 'develop' into move-guest-wait 2020-09-21 16:28:59 -04:00
Joao Siebel
b2adffa4c2 Merge remote-tracking branch 'upstream/develop' into connection-manager 2020-09-18 16:30:20 -03:00
Anton Georgiev
3b2446989e recalculate locales on new request if there was issue on start 2020-09-10 14:32:42 +00:00
Joao Siebel
ac0a014571 WIP onClose 2020-09-10 08:49:22 -03:00
Anton Georgiev
fd0e69c280 Added fallback support for Armenian, Georgian, Occitan 2020-09-10 03:21:41 +00:00
Anton Georgiev
707f80a785 Only calculate locales list once, on process start 2020-09-10 01:27:03 +00:00
Anton Georgiev
e3d1fa2c17 return all locales, not just an empty [] 2020-09-10 00:37:43 +00:00
Anton Georgiev
f1e92341a5 Merge branch 'issue-10291' of github.com:Tainan404/bigbluebutton into locales-total 2020-09-09 19:30:52 +00:00
Anton Georgiev
d8b185f2b3 Merge branch 'issue-9219' of github.com:Tainan404/bigbluebutton into locales-total 2020-09-09 19:29:18 +00:00