Publish errors via nova.notifier

This commit is contained in:
Naveed Massjouni
2011-05-05 23:14:46 -04:00
parent b934a6eec6
commit 99b1b106fb
2 changed files with 28 additions and 2 deletions

View File

@@ -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:

View File

@@ -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')