Add production settings + correct setting sandbox_enabled

Change-Id: I92bd99676fe0d3b4bc0de10e180e5a2e82ab2ef7
Related-bug: PROD-24880 (PROD:24880)
diff --git a/sf_notifier/salesforce/client.py b/sf_notifier/salesforce/client.py
index 84e68cb..319488d 100644
--- a/sf_notifier/salesforce/client.py
+++ b/sf_notifier/salesforce/client.py
@@ -83,7 +83,7 @@
                 env_var, config.get(setting_var))
 
             if field == 'domain':
-                if kwargs[field] is True:
+                if kwargs[field] in ['true', 'True', True]:
                     kwargs[field] = 'test'
                 else:
                     del kwargs[field]
@@ -99,7 +99,11 @@
     def _auth(self):
         kwargs = {'session': self.session}
         kwargs.update(self.config)
-        self.sf = Salesforce(**kwargs)
+        try:
+            self.sf = Salesforce(**kwargs)
+        except sf_exceptions.SalesforceAuthenticationFailed:
+            logger.error('Salesforce authentication failure.')
+            return
         logger.info('Salesforce authentication successful.')
 
     @staticmethod
@@ -137,7 +141,7 @@
             err_code = ex.content[0]['errorCode']
 
             if err_code == 'DUPLICATE_VALUE':
-                logger.info('Duplicate case: {}.'.format(msg))
+                logger.warning('Duplicate case: {}.'.format(msg))
                 case_id = msg.split()[-1]
                 self._registered_alerts[alert_id] = {'Id': case_id}
                 return 1, case_id
diff --git a/sf_notifier/server.py b/sf_notifier/server.py
index 182f55d..658061d 100644
--- a/sf_notifier/server.py
+++ b/sf_notifier/server.py
@@ -44,7 +44,9 @@
     try:
         data = json.loads(request.data)
     except ValueError:
-        return Response(json.dumps({'error': 'Invalid request data.'}),
+        msg = 'Invalid request data: {}.'.format(request.data)
+        app.logger.error(msg)
+        return Response(json.dumps({'error': msg}),
                         status=400,
                         mimetype='application/json')
 
@@ -65,7 +67,9 @@
             try:
                 cases.append(getattr(sf_cli, action)(*fields))
             except SalesforceMalformedRequest:
-                return Response(json.dumps({'error': 'Request failure.'}),
+                msg = 'Salesforce request failure.'
+                app.logger.error(msg)
+                return Response(json.dumps({'error': msg}),
                                 status=500,
                                 mimetype='application/json')
 
diff --git a/sf_notifier/settings/production.py b/sf_notifier/settings/production.py
new file mode 100644
index 0000000..b886190
--- /dev/null
+++ b/sf_notifier/settings/production.py
@@ -0,0 +1,38 @@
+LOGGING = {
+    'version': 1,
+    'formatters': {'default': {
+        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
+    }},
+    'handlers': {
+        'wsgi': {
+            'class': 'logging.StreamHandler',
+            'stream': 'ext://flask.logging.wsgi_errors_stream',
+            'formatter': 'default'
+        },
+        'file': {
+            'class': 'logging.handlers.RotatingFileHandler',
+            'formatter': 'default',
+            'filename': '/var/log/sf-notifier/sfnotifier.log',
+            'mode': 'a',
+            'maxBytes': 10485760,
+            'backupCount': 5
+        }
+    },
+    'loggers': {
+        'sf_notifier.server': {
+            'level': 'WARN',
+            'handlers': ['file', 'wsgi']
+        },
+        'sf_notifier.salesforce.client': {
+            'level': 'WARN',
+            'handlers': ['file', 'wsgi']
+        }
+    }
+}
+
+SIMPLE_SETTINGS = {
+    'OVERRIDE_BY_ENV': True,
+    'CONFIGURE_LOGGING': True,
+}
+
+SF_CONFIG = {}
diff --git a/sf_notifier/vars/production b/sf_notifier/vars/production
new file mode 100644
index 0000000..85d050b
--- /dev/null
+++ b/sf_notifier/vars/production
@@ -0,0 +1,4 @@
+export FLASK_APP=sf_notifier/server.py
+export FLASK_ENV=production
+
+export SIMPLE_SETTINGS=sf_notifier.settings.production