Merge "Add return value for collect_usage()"

This commit is contained in:
Jenkins 2017-07-09 21:44:28 +00:00 committed by Gerrit Code Review
commit 07db108fad
3 changed files with 28 additions and 6 deletions

View File

@ -47,6 +47,10 @@ class BaseCollector(object):
raise NotImplementedError
def collect_usage(self, project, start, end):
"""Collect usage for specific tenant.
:return: True if no error happened otherwise return False.
"""
LOG.info('collect_usage by %s for project: %s(%s)' %
(self.__class__.__name__, project['id'], project['name']))
@ -92,13 +96,15 @@ class BaseCollector(object):
project['name'], window_start, window_end)
except Exception as e:
LOG.exception(
"IntegrityError for %s(%s) in window: %s - %s, reason: %s",
project['id'], project['name'],
"Collection failed for %s(%s) in window: %s - %s, reason: "
"%s", project['id'], project['name'],
window_start.strftime(constants.iso_time),
window_end.strftime(constants.iso_time),
str(e)
)
return
return False
return True
def _filter_and_group(self, usage, usage_by_resource):
trust_sources = set(CONF.collector.trust_sources)

View File

@ -129,9 +129,8 @@ class CollectorService(service.Service):
db_project = db_api.project_add(project, last_collect)
start = db_project.last_collected
self.collector.collect_usage(project, start, end)
count = count + 1
if self.collector.collect_usage(project, start, end):
count = count + 1
except Exception:
LOG.warning('Get lock failed. Process: %s' % self.identifier)

View File

@ -11,11 +11,14 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
from datetime import timedelta
import os
import mock
from distil.collector import base as collector_base
from distil.service import collector
from distil.tests.unit import base
@ -136,3 +139,17 @@ class CollectorBaseTest(base.DistilWithDbTestCase):
os_distro = collector._get_os_distro(entry)
self.assertEqual('unknown', os_distro)
@mock.patch('distil.common.openstack.get_ceilometer_client')
def test_collect_usage_meter_exception(self, mock_cclient):
mock_cclient.new_samples.list.side_effect = Exception(
'get_meter exception!')
srv = collector.CollectorService()
ret = srv.collector.collect_usage(
{'name': 'fake_project', 'id': '123'},
datetime.utcnow() - timedelta(hours=1.5),
datetime.utcnow()
)
self.assertFalse(ret)