コード例 #1
0
    def get_all(self,
                q=None,
                meter=None,
                groupby=None,
                period=None,
                aggregate=None):
        """Retrieve all statistics for all meters

        :param q: Filter rules for the statistics to be returned.
        """
        rbac.enforce('compute_statistics', pecan.request)

        q = q or []
        meter = meter or []
        groupby = groupby or []
        aggregate = aggregate or []

        if period and period < 0:
            raise base.ClientSideError(_("Period must be positive."))

        g = meters._validate_groupby_fields(groupby)

        # TO DO:  break out the meter names and invoke multiple calls
        kwargs = v2_utils.query_to_kwargs(q, storage.SampleFilter.__init__)

        aggregate = utils.uniq(aggregate, ['func', 'param'])
        # Find the original timestamp in the query to use for clamping
        # the duration returned in the statistics.
        start = end = None
        for i in q:
            if i.field == 'timestamp' and i.op in ('lt', 'le'):
                end = timeutils.parse_isotime(i.value).replace(tzinfo=None)
            elif i.field == 'timestamp' and i.op in ('gt', 'ge'):
                start = timeutils.parse_isotime(i.value).replace(tzinfo=None)
        ret = []

        kwargs['meter'] = meter
        f = storage.SampleFilter(**kwargs)
        try:
            computed = pecan.request.storage_conn.get_meter_statistics(
                f, period, g, aggregate)
            dbStats = [
                ScopedStatistics(start_timestamp=start,
                                 end_timestamp=end,
                                 **c.as_dict()) for c in computed
            ]
            ret += dbStats
        except OverflowError:
            LOG.exception("Problem processing meters %s" % meter)

        return ret
コード例 #2
0
 def test_duplicate_fields(self):
     result = set(
         meters._validate_groupby_fields(['user_id', 'source', 'user_id']))
     self.assertEqual(set(['user_id', 'source']), result)
コード例 #3
0
 def test_valid_fields_multiple(self):
     result = set(
         meters._validate_groupby_fields(
             ['user_id', 'project_id', 'source']))
     self.assertEqual(set(['user_id', 'project_id', 'source']), result)
コード例 #4
0
 def test_valid_field(self):
     result = meters._validate_groupby_fields(['user_id'])
     self.assertEqual(['user_id'], result)
コード例 #5
0
ファイル: test_query.py プロジェクト: luffyhwl/ceilometer
 def test_duplicate_fields(self):
     result = set(
         meters._validate_groupby_fields(['user_id', 'source', 'user_id'])
     )
     self.assertEqual(set(['user_id', 'source']), result)
コード例 #6
0
ファイル: test_query.py プロジェクト: luffyhwl/ceilometer
 def test_valid_fields_multiple(self):
     result = set(meters._validate_groupby_fields(
         ['user_id', 'project_id', 'source']))
     self.assertEqual(set(['user_id', 'project_id', 'source']), result)
コード例 #7
0
ファイル: test_query.py プロジェクト: luffyhwl/ceilometer
 def test_valid_field(self):
     result = meters._validate_groupby_fields(['user_id'])
     self.assertEqual(['user_id'], result)
コード例 #8
0
ファイル: test_query.py プロジェクト: isyippee/ceilometer
 def test_duplicate_fields(self):
     result = set(meters._validate_groupby_fields(["user_id", "source", "user_id"]))
     self.assertEqual(set(["user_id", "source"]), result)