From b86a990612fa52ae3fd3f6b607cdbaaff1e20527 Mon Sep 17 00:00:00 2001
From: Maxim Khlobystov <maxim.khlobystov@gmail.com>
Date: Fri, 1 Feb 2019 14:12:06 -0500
Subject: [PATCH] Add logCode and build number to log messages

---
 bigbluebutton-html5/client/main.jsx                         | 2 +-
 .../imports/api/audio/client/bridge/kurento.js              | 2 +-
 bigbluebutton-html5/imports/api/audio/client/bridge/sip.js  | 2 +-
 .../imports/api/screenshare/client/bridge/kurento.js        | 4 ++--
 bigbluebutton-html5/imports/startup/client/base.jsx         | 6 +++---
 bigbluebutton-html5/imports/startup/client/logger.js        | 1 +
 .../ui/components/actions-bar/desktop-share/component.jsx   | 4 ++--
 bigbluebutton-html5/imports/ui/components/app/component.jsx | 2 +-
 .../ui/components/audio/device-selector/component.jsx       | 4 ++--
 .../imports/ui/components/join-handler/component.jsx        | 6 +++---
 .../presentation/presentation-uploader/component.jsx        | 2 +-
 .../imports/ui/components/video-preview/component.jsx       | 2 +-
 .../imports/ui/components/whiteboard/service.js             | 2 +-
 .../imports/ui/services/audio-manager/index.js              | 6 +++---
 bigbluebutton-html5/imports/ui/services/auth/index.js       | 2 +-
 15 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/bigbluebutton-html5/client/main.jsx b/bigbluebutton-html5/client/main.jsx
index 7eea3c5c44..6b95921e6e 100755
--- a/bigbluebutton-html5/client/main.jsx
+++ b/bigbluebutton-html5/client/main.jsx
@@ -19,7 +19,7 @@ Meteor.startup(() => {
     } else {
       message += `\n${stack}`;
     }
-    logger.error(message);
+    logger.error({ logCode: 'startup_error' }, message);
   });
 
   // TODO make this a Promise
diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js b/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js
index 2608e1dd42..1edbee5157 100644
--- a/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js
+++ b/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js
@@ -130,7 +130,7 @@ export default class KurentoAudioBridge extends BaseAudioBridge {
         await audioContext.setSinkId(value);
         this.media.outputDeviceId = value;
       } catch (err) {
-        logger.error(err);
+        logger.error({ logCode: 'audio_kurento_changeoutputdevice_error' }, err);
         throw new Error(this.baseErrorCodes.MEDIA_ERROR);
       }
     }
diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
index 6c7492068c..387044252a 100755
--- a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
+++ b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
@@ -395,7 +395,7 @@ export default class SIPBridge extends BaseAudioBridge {
         await audioContext.setSinkId(value);
         this.media.outputDeviceId = value;
       } catch (err) {
-        logger.error(err);
+        logger.error({ logCode: 'audio_sip_changeoutputdevice_error' }, err);
         throw new Error(this.baseErrorCodes.MEDIA_ERROR);
       }
     }
diff --git a/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js b/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js
index 3c22b70b55..7c70464abd 100755
--- a/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js
+++ b/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js
@@ -56,7 +56,7 @@ export default class KurentoScreenshareBridge {
     try {
       iceServers = await fetchWebRTCMappedStunTurnServers(getSessionToken());
     } catch (error) {
-      logger.error('Screenshare bridge failed to fetch STUN/TURN info, using default');
+      logger.error({ logCode: 'kurentowatchvideo_fetchstunturninfo_error' }, 'Screenshare bridge failed to fetch STUN/TURN info, using default');
     } finally {
       const options = {
         wsUrl: SFU_URL,
@@ -85,7 +85,7 @@ export default class KurentoScreenshareBridge {
     try {
       iceServers = await fetchWebRTCMappedStunTurnServers(getSessionToken());
     } catch (error) {
-      logger.error('Screenshare bridge failed to fetch STUN/TURN info, using default');
+      logger.error({ logCode: 'kurentosharescreen_fetchstunturninfo_error' }, 'Screenshare bridge failed to fetch STUN/TURN info, using default');
     } finally {
       const options = {
         wsUrl: SFU_URL,
diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx
index 3a061b1314..318a85d219 100755
--- a/bigbluebutton-html5/imports/startup/client/base.jsx
+++ b/bigbluebutton-html5/imports/startup/client/base.jsx
@@ -78,7 +78,7 @@ class Base extends Component {
     }
 
     if (codeError) {
-      logger.error(`User could not log in HTML5, hit ${codeError}`);
+      logger.error({ logCode: 'startup_client_usercouldnotlogin_error' }, `User could not log in HTML5, hit ${codeError}`);
       return (<ErrorScreen code={codeError} />);
     }
 
@@ -88,7 +88,7 @@ class Base extends Component {
     // this.props.annotationsHandler.stop();
 
     if (subscriptionsReady) {
-      logger.info('Subscriptions are ready');
+      logger.info({ logCode: 'startup_client_subscriptions_ready' }, 'Subscriptions are ready');
     }
 
     return (<AppContainer {...this.props} baseControls={stateControls} />);
@@ -130,7 +130,7 @@ const BaseContainer = withTracker(() => {
 
   const subscriptionErrorHandler = {
     onError: (error) => {
-      logger.error(error);
+      logger.error({ logCode: 'startup_client_subscription_error' }, error);
       Session.set('isMeetingEnded', true);
       Session.set('codeError', error.error);
     },
diff --git a/bigbluebutton-html5/imports/startup/client/logger.js b/bigbluebutton-html5/imports/startup/client/logger.js
index 6b8dc02b9b..4ba4cd3a6b 100755
--- a/bigbluebutton-html5/imports/startup/client/logger.js
+++ b/bigbluebutton-html5/imports/startup/client/logger.js
@@ -27,6 +27,7 @@ class ServerLoggerStream extends ServerStream {
     if (fullInfo.meetingId != null) {
       this.rec.clientInfo = fullInfo;
     }
+    this.rec.clientBuild = Meteor.settings.public.app.html5ClientBuild;
     return super.write(this.rec);
   }
 }
diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx b/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx
index 1a2ce6c29e..8bc46b7639 100755
--- a/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx
@@ -60,11 +60,11 @@ const DesktopShare = ({
     switch (error) {
       case ICE_CONNECTION_FAILED:
         kurentoExitScreenShare();
-        logger.error('Ice connection state error');
+        logger.error({ logCode: 'desktopshare_iceconnectionstate_error' }, 'Ice connection state error');
         notify(intl.formatMessage(intlMessages.iceConnectionStateError), 'error', 'desktop');
         break;
       default:
-        logger.error(error || 'Default error handler');
+        logger.error({ logCode: 'desktopshare_default_error' }, error || 'Default error handler');
     }
   };
   return (screenSharingCheck && !isMobileBrowser && isUserPresenter ?
diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx
index 435c131a01..62b9d7586f 100755
--- a/bigbluebutton-html5/imports/ui/components/app/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx
@@ -90,7 +90,7 @@ class App extends Component {
     this.handleWindowResize();
     window.addEventListener('resize', this.handleWindowResize, false);
 
-    logger.info('Client loaded successfully');
+    logger.info({ logCode: 'app_component_componentdidmount' }, 'Client loaded successfully');
   }
 
   componentWillUnmount() {
diff --git a/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx b/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx
index 8e8fafd0c9..9d07273bcc 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx
@@ -34,7 +34,7 @@ class DeviceSelector extends Component {
   componentDidMount() {
     const handleEnumerateDevicesSuccess = (deviceInfos) => {
       const devices = deviceInfos.filter(d => d.kind === this.props.kind);
-      logger.info(`Success on enumerateDevices() for ${this.props.kind}: ${JSON.stringify(devices)}`);
+      logger.info({ logCode: 'audiodeviceselector_component_enumeratedevices_success' }, `Success on enumerateDevices() for ${this.props.kind}: ${JSON.stringify(devices)}`);
       this.setState({
         devices,
         options: devices.map((d, i) => ({
@@ -49,7 +49,7 @@ class DeviceSelector extends Component {
       .enumerateDevices()
       .then(handleEnumerateDevicesSuccess)
       .catch((err) => {
-        logger.error(`Error on enumerateDevices(): ${JSON.stringify(err)}`);
+        logger.error({ logCode: 'audiodeviceselector_component_enumeratedevices_error' }, `Error on enumerateDevices(): ${JSON.stringify(err)}`);
       });
   }
 
diff --git a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
index 0064b02d21..49931ea6e9 100644
--- a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
@@ -66,7 +66,7 @@ class JoinHandler extends Component {
         location: window.location.href,
       };
 
-      logger.info(clientInfo);
+      logger.info({ logCode: 'joinhandler_component_clientinfo' }, clientInfo);
     };
 
     const setAuth = (resp) => {
@@ -127,11 +127,11 @@ class JoinHandler extends Component {
         Session.set('openPanel', '');
       }
 
-      logger.info(`User successfully went through main.joinRouteHandler with [${JSON.stringify(response)}].`);
+      logger.info({ logCode: 'joinhandler_component_joinroutehandler_success' }, `User successfully went through main.joinRouteHandler with [${JSON.stringify(response)}].`);
     } else {
       const e = new Error(response.message);
       if (!Session.get('codeError')) Session.set('errorMessageDescription', response.message);
-      logger.error(`User faced [${e}] on main.joinRouteHandler. Error was:`, JSON.stringify(response));
+      logger.error({ logCode: 'joinhandler_component_joinroutehandler_error' }, `User faced [${e}] on main.joinRouteHandler. Error was:`, JSON.stringify(response));
     }
     this.changeToJoin(true);
   }
diff --git a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx
index 2353afa111..24a877e5f4 100755
--- a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx
@@ -224,7 +224,7 @@ class PresentationUploader extends Component {
       .catch((error) => {
         notify(this.props.intl.formatMessage(intlMessages.genericError), 'error');
 
-        logger.error(error);
+        logger.error({ logCode: 'presentationuploader_component_save_error' }, error);
 
         this.setState({
           disableActions: false,
diff --git a/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx b/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx
index 33f66e942e..fc7201ddae 100644
--- a/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx
@@ -107,7 +107,7 @@ class VideoPreview extends Component {
     const errorMessage = intlMessages[error.name]
       || intlMessages.permissionError;
     notify(intl.formatMessage(errorMessage), 'error', 'video');
-    logger.error(error);
+    logger.error({ logCode: 'videopreview_component_gum_error' }, error);
   }
 
   handleSelectWebcam(event) {
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/service.js b/bigbluebutton-html5/imports/ui/components/whiteboard/service.js
index 1116c54dc4..c246355ba7 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/service.js
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/service.js
@@ -53,7 +53,7 @@ function handleAddedAnnotation({
 
   Annotations.upsert(query.selector, query.modifier, (err) => {
     if (err) {
-      logger.error(err);
+      logger.error({ logCode: 'whiteboard_annotation_upsert_error' }, err);
       return;
     }
 
diff --git a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
index d311901fb1..7348982e0c 100755
--- a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
+++ b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
@@ -175,7 +175,7 @@ class AudioManager {
         clearTimeout(iceGatheringTimeout);
       }
 
-      logger.error('Listen only error:', err, 'on try', retries);
+      logger.error({ logCode: 'audiomanager_listenonly_error' }, 'Listen only error:', err, 'on try', retries);
       throw {
         type: 'MEDIA_ERROR',
         message: this.messages.error.MEDIA_ERROR,
@@ -314,7 +314,7 @@ class AudioManager {
       } else if (status === FAILED) {
         this.error = error;
         this.notify(this.messages.error[error] || this.messages.error.GENERIC_ERROR, true);
-        logger.error('Audio Error:', error, bridgeError);
+        logger.error({ logCode: 'audiomanager_audio_error' }, 'Audio Error:', error, bridgeError);
         this.exitAudio();
         this.onAudioExit();
       }
@@ -338,7 +338,7 @@ class AudioManager {
     audio.src = 'resources/sounds/silence.mp3';
 
     audio.play().catch((e) => {
-      logger.warn('Error on playing test audio:', e);
+      logger.warn({ logCode: 'audiomanager_error_test_audio' }, 'Error on playing test audio:', e);
     });
 
     return dest.stream;
diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js
index 95b8fa9b80..74fb773491 100755
--- a/bigbluebutton-html5/imports/ui/services/auth/index.js
+++ b/bigbluebutton-html5/imports/ui/services/auth/index.js
@@ -218,7 +218,7 @@ class Auth {
 
         // Skip in case the user is not in the collection yet or is a dummy user
         if (!User || !('intId' in User)) {
-          logger.info('re-send validateAuthToken for delayed authentication');
+          logger.info({ logCode: 'auth_service_resend_validateauthtoken' }, 're-send validateAuthToken for delayed authentication');
           makeCall('validateAuthToken');
           return;
         }
-- 
GitLab