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 306224f70c)
This commit is contained in:
licanwei 2019-10-18 16:41:29 +08:00
parent 6a4a9af538
commit a8974556ec
3 changed files with 29 additions and 26 deletions

View File

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

View File

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

View File

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