From cd39f0a1935facd322d51df9a28430fc2c996101 Mon Sep 17 00:00:00 2001 From: Eric K Date: Tue, 24 Jul 2018 11:59:46 -0700 Subject: [PATCH] vitrage driver keep deactivated alarms instead of deleting deactivated alarms right away, keep them around for a time until clean-up. It is helpful for Congress to have reference to alarms that have been resolved and the information regarding them. Change-Id: I664e3fcfaf232f0bd938ac8ba684aee3310b1aa1 --- congress/datasources/vitrage_driver.py | 21 ++++++++----------- .../tests/datasources/test_vitrage_driver.py | 21 ++++++++++++++++--- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/congress/datasources/vitrage_driver.py b/congress/datasources/vitrage_driver.py index 86d1d1af4..b3f549499 100644 --- a/congress/datasources/vitrage_driver.py +++ b/congress/datasources/vitrage_driver.py @@ -90,15 +90,7 @@ class VitrageDriver(datasource_driver.PushedDataSourceDriver): @lockutils.synchronized('congress_vitrage_ds_data') def _webhook_handler(self, payload): tablename = 'alarms' - if payload['notification'] == 'vitrage.alarm.activate': - # add alarm to table - translator = self.webhook_alarm_translator - row_data = VitrageDriver.convert_objs( - [payload['payload']], translator) - for table, row in row_data: - if table == tablename: - self.state[tablename].add(row) - elif payload['notification'] == 'vitrage.alarm.deactivate': + if payload['notification'] == 'vitrage.alarm.deactivate': # remove alarm from table row_id = payload['payload']['vitrage_id'] column_index_number_of_row_id = 4 @@ -106,9 +98,14 @@ class VitrageDriver(datasource_driver.PushedDataSourceDriver): if row[column_index_number_of_row_id] == row_id] for row in to_remove: self.state[tablename].discard(row) - else: - raise ValueError('Unexpected webhook notification type: ' - '{0}'.format(payload['notification'])) + + # add alarm to table + translator = self.webhook_alarm_translator + row_data = VitrageDriver.convert_objs( + [payload['payload']], translator) + for table, row in row_data: + if table == tablename: + self.state[tablename].add(row) LOG.debug('publish a new state %s in %s', self.state[tablename], tablename) diff --git a/congress/tests/datasources/test_vitrage_driver.py b/congress/tests/datasources/test_vitrage_driver.py index 2f50c1882..38cf53bfd 100644 --- a/congress/tests/datasources/test_vitrage_driver.py +++ b/congress/tests/datasources/test_vitrage_driver.py @@ -89,13 +89,13 @@ class TestVitrageDriver(base.TestCase): "resource": { "vitrage_id": "437f1f4c-ccce-40a4-ac62-1c2f1fd9f6ac", "name": "app-1-server-1-jz6qvznkmnif", - "update_timestamp": "2018-01-22 10:00:34.327142+00:00", + "update_timestamp": "2018-01-22 11:00:34.327142+00:00", "vitrage_category": "RESOURCE", "vitrage_operational_state": "OK", "vitrage_type": "nova.instance", "project_id": "8f007e5ba0944e84baa6f2a4f2b5d03a", "id": "9b7d93b9-94ec-41e1-9cec-f28d4f8d702c"}, - "update_timestamp": "2018-01-22T10:00:34Z", + "update_timestamp": "2018-01-22T11:00:34Z", "vitrage_category": "ALARM", "state": "Inactive", "vitrage_type": "vitrage", @@ -118,7 +118,22 @@ class TestVitrageDriver(base.TestCase): u'nova.instance')]) self.vitrage._webhook_handler(test_payload) - self.assertEqual(0, len(self.vitrage.state['alarms'])) + self.assertEqual(1, len(self.vitrage.state['alarms'])) + + expected_rows = set([(u'Instance memory performance degraded', + u'Inactive', + u'vitrage', + u'OK', + u'2def31e9-6d9f-4c16-b007-893caa806cd4', + u'2018-01-22T11:00:34Z', + next(iter(self.vitrage.state['alarms']))[6], + u'app-1-server-1-jz6qvznkmnif', + u'9b7d93b9-94ec-41e1-9cec-f28d4f8d702c', + u'437f1f4c-ccce-40a4-ac62-1c2f1fd9f6ac', + u'8f007e5ba0944e84baa6f2a4f2b5d03a', + u'OK', + u'nova.instance')]) + self.assertEqual(self.vitrage.state['alarms'], expected_rows) @mock.patch.object(vitrage_driver.VitrageDriver, 'publish') def test_webhook_alarm_cleanup(self, mocked_publish):