From a8974556ecc29f09e07f411fb745e61e68d8db92 Mon Sep 17 00:00:00 2001
From: licanwei
Date: Fri, 18 Oct 2019 16:41:29 +0800
Subject: [PATCH] Don't throw exception when missing metrics
When querying data from datasource, it's possible to miss some data.
In this case if we throw an exception, Audit will failed because of
the exception. We should remove the exception and give the decision
to the strategy.
Change-Id: I1b0e6b78b3bba4df9ba16e093b3910aab1de922e
Closes-Bug: #1847434
can not cherry picke from master because of code refactoring
(cherry picked from commit 306224f70cfa3adcd2e17ea5d88eff7cd37ac2a2)
---
watcher/datasource/ceilometer.py | 20 +++++++++++---------
watcher/datasource/gnocchi.py | 20 +++++++++-----------
watcher/datasource/monasca.py | 15 +++++++++------
3 files changed, 29 insertions(+), 26 deletions(-)
diff --git a/watcher/datasource/ceilometer.py b/watcher/datasource/ceilometer.py
index 424011bd5..a53b6943b 100644
--- a/watcher/datasource/ceilometer.py
+++ b/watcher/datasource/ceilometer.py
@@ -19,6 +19,7 @@
import datetime
from ceilometerclient import exc
+from oslo_log import log
from oslo_utils import timeutils
from watcher._i18n import _
@@ -26,6 +27,8 @@ from watcher.common import clients
from watcher.common import exception
from watcher.datasource import base
+LOG = log.getLogger(__name__)
+
class CeilometerHelper(base.DataSourceBase):
@@ -112,15 +115,15 @@ class CeilometerHelper(base.DataSourceBase):
self.osc.reset_clients()
self.ceilometer = self.osc.ceilometer()
return f(*args, **kargs)
- except Exception:
- raise
+ except Exception as e:
+ LOG.exception(e)
def check_availability(self):
- try:
- self.query_retry(self.ceilometer.resources.list)
- except Exception:
+ status = self.query_retry(self.ceilometer.resources.list)
+ if status:
+ return 'available'
+ else:
return 'not available'
- return 'available'
def query_sample(self, meter_name, query, limit=1):
return self.query_retry(f=self.ceilometer.samples.list,
@@ -138,9 +141,8 @@ class CeilometerHelper(base.DataSourceBase):
def list_metrics(self):
"""List the user's meters."""
- try:
- meters = self.query_retry(f=self.ceilometer.meters.list)
- except Exception:
+ meters = self.query_retry(f=self.ceilometer.meters.list)
+ if not meters:
return set()
else:
return meters
diff --git a/watcher/datasource/gnocchi.py b/watcher/datasource/gnocchi.py
index fd4658f86..ad651a8c5 100644
--- a/watcher/datasource/gnocchi.py
+++ b/watcher/datasource/gnocchi.py
@@ -24,7 +24,6 @@ from oslo_config import cfg
from oslo_log import log
from watcher.common import clients
-from watcher.common import exception
from watcher.common import utils as common_utils
from watcher.datasource import base
@@ -49,20 +48,18 @@ class GnocchiHelper(base.DataSourceBase):
except Exception as e:
LOG.exception(e)
time.sleep(CONF.gnocchi_client.query_timeout)
- raise exception.DataSourceNotAvailable(datasource='gnocchi')
def check_availability(self):
- try:
- self.query_retry(self.gnocchi.status.get)
- except Exception:
+ status = self.query_retry(self.gnocchi.status.get)
+ if status:
+ return 'available'
+ else:
return 'not available'
- return 'available'
def list_metrics(self):
"""List the user's meters."""
- try:
- response = self.query_retry(f=self.gnocchi.metric.list)
- except Exception:
+ response = self.query_retry(f=self.gnocchi.metric.list)
+ if not response:
return set()
else:
return set([metric['name'] for metric in response])
@@ -95,8 +92,9 @@ class GnocchiHelper(base.DataSourceBase):
f=self.gnocchi.resource.search, **kwargs)
if not resources:
- raise exception.ResourceNotFound(name='gnocchi',
- id=resource_id)
+ LOG.warning("The {0} resource {1} could not be "
+ "found".format(self.NAME, resource_id))
+ return
resource_id = resources[0]['id']
diff --git a/watcher/datasource/monasca.py b/watcher/datasource/monasca.py
index 4c948af3f..577b7b55a 100644
--- a/watcher/datasource/monasca.py
+++ b/watcher/datasource/monasca.py
@@ -19,11 +19,14 @@
import datetime
from monascaclient import exc
+from oslo_log import log
from watcher.common import clients
from watcher.common import exception
from watcher.datasource import base
+LOG = log.getLogger(__name__)
+
class MonascaHelper(base.DataSourceBase):
@@ -42,8 +45,8 @@ class MonascaHelper(base.DataSourceBase):
self.osc.reset_clients()
self.monasca = self.osc.monasca()
return f(*args, **kwargs)
- except Exception:
- raise
+ except Exception as e:
+ LOG.exception(e)
def _format_time_params(self, start_time, end_time, period):
"""Format time-related params to the correct Monasca format
@@ -67,11 +70,11 @@ class MonascaHelper(base.DataSourceBase):
return start_timestamp, end_timestamp, period
def check_availability(self):
- try:
- self.query_retry(self.monasca.metrics.list)
- except Exception:
+ status = self.query_retry(self.monasca.metrics.list)
+ if status:
+ return 'available'
+ else:
return 'not available'
- return 'available'
def list_metrics(self):
# TODO(alexchadin): this method should be implemented in accordance to