summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNaveed Massjouni <naveedm9@gmail.com>2011-05-05 23:14:46 -0400
committerNaveed Massjouni <naveedm9@gmail.com>2011-05-05 23:14:46 -0400
commit3ee0507ddc6bb7e15834144acc47c354396fbc70 (patch)
tree6ed7f2abafca3d43e37576dcc265994e0ee85399
parentc03e9805328afe1d03fa65ac93d2b91ba04c229e (diff)
Publish errors via nova.notifier
-rw-r--r--nova/log.py9
-rw-r--r--nova/tests/test_notifier.py21
2 files changed, 28 insertions, 2 deletions
diff --git a/nova/log.py b/nova/log.py
index 096279f7c..3e587891a 100644
--- a/nova/log.py
+++ b/nova/log.py
@@ -35,6 +35,7 @@ import os
import sys
import traceback
+import nova
from nova import flags
from nova import version
@@ -63,6 +64,7 @@ flags.DEFINE_list('default_log_levels',
'eventlet.wsgi.server=WARN'],
'list of logger=LEVEL pairs')
flags.DEFINE_bool('use_syslog', False, 'output to syslog')
+flags.DEFINE_bool('publish_errors', True, 'publish error events')
flags.DEFINE_string('logfile', None, 'output to named file')
@@ -258,12 +260,19 @@ class NovaRootLogger(NovaLogger):
else:
self.removeHandler(self.filelog)
self.addHandler(self.streamlog)
+ if FLAGS.publish_errors:
+ self.addHandler(PublishErrorsHandler(ERROR))
if FLAGS.verbose:
self.setLevel(DEBUG)
else:
self.setLevel(INFO)
+class PublishErrorsHandler(logging.Handler):
+ def emit(self, record):
+ nova.notifier.notify('error', record)
+
+
def handle_exception(type, value, tb):
extra = {}
if FLAGS.verbose:
diff --git a/nova/tests/test_notifier.py b/nova/tests/test_notifier.py
index 4d6289e6a..d18d3bc05 100644
--- a/nova/tests/test_notifier.py
+++ b/nova/tests/test_notifier.py
@@ -13,14 +13,18 @@
# License for the specific language governing permissions and limitations
# under the License.
-import nova
+import json
+
+import stubout
+import nova
+from nova import log as logging
from nova import flags
from nova import notifier
from nova.notifier import no_op_notifier
from nova import test
-import stubout
+LOG = logging.getLogger('nova.compute.api')
class NotifierTestCase(test.TestCase):
"""Test case for notifications"""
@@ -58,3 +62,16 @@ class NotifierTestCase(test.TestCase):
notifier.notify('derp', Mock())
self.assertEqual(self.mock_cast, True)
+
+ def test_error_notification(self):
+ self.stubs.Set(nova.flags.FLAGS, 'notification_driver',
+ 'nova.notifier.rabbit_notifier.RabbitNotifier')
+ msgs = []
+ def mock_cast(context, topic, msg):
+ data = json.loads(msg)
+ msgs.append(data)
+ self.stubs.Set(nova.rpc, 'cast', mock_cast)
+ LOG.error('foo');
+ msg = msgs[0]
+ self.assertEqual(msg['event_name'], 'error')
+ self.assertEqual(msg['model']['msg'], 'foo')