def search_value(self, metrics, query, from_timestamp=None, to_timestamp=None, aggregation='mean', granularity=None): granularity = granularity or [] predicate = storage.MeasureQuery(query) results = self._map_in_thread( self._find_measure, [(metric, aggregation, gran, predicate, from_timestamp, to_timestamp) for metric in metrics for gran in granularity or ( defin.granularity for defin in metric.archive_policy.definition)]) result = collections.defaultdict(list) for r in results: for metric, metric_result in six.iteritems(r): result[metric].extend(metric_result) # Sort the result for metric, r in six.iteritems(result): # Sort by timestamp asc, granularity desc r.sort(key=lambda t: (t[0], -t[1])) return result
def test_math(self): q = storage.MeasureQuery( { u"and": [ # v+5 is bigger 0 {u"≥": [{u"+": 5}, 0]}, # v-6 is not 5 {u"≠": [5, {u"-": 6}]}, ], } ) self.assertTrue(q(5)) self.assertTrue(q(10)) self.assertFalse(q(11))
def search_value(self, metrics, query, from_timestamp=None, to_timestamp=None, aggregation='mean'): results = {} predicate = storage.MeasureQuery(query) for metric in metrics: measures = self.get_measures(metric, from_timestamp, to_timestamp, aggregation) results[metric] = [(timestamp, granularity, value) for timestamp, granularity, value in measures if predicate(value)] return results
def test_empty(self): q = storage.MeasureQuery({}) self.assertFalse(q(5)) self.assertFalse(q(10))
def test_modulo(self): q = storage.MeasureQuery({"=": [{"%": 5}, 0]}) self.assertTrue(q(5)) self.assertTrue(q(10)) self.assertFalse(q(-1)) self.assertFalse(q(6))
def test_or(self): q = storage.MeasureQuery({"or": [{"=": 4}, {"=": 10}]}) self.assertTrue(q(4)) self.assertTrue(q(10)) self.assertFalse(q(-1))
def test_and(self): q = storage.MeasureQuery({"and": [{">": 4}, {"<": 10}]}) self.assertTrue(q(5)) self.assertFalse(q(40)) self.assertFalse(q(1))
def test_gt(self): q = storage.MeasureQuery({">": 4}) self.assertTrue(q(40)) self.assertFalse(q(4))
def test_find_measures(self): metric2, __ = self._create_metric() self.incoming.add_measures(self.metric.id, [ incoming.Measure(datetime64( 2014, 1, 1, 12, 0, 1, ), 69), incoming.Measure(datetime64(2014, 1, 1, 12, 7, 31), 42), incoming.Measure(datetime64(2014, 1, 1, 12, 5, 31), 8), incoming.Measure(datetime64(2014, 1, 1, 12, 9, 31), 4), incoming.Measure(datetime64(2014, 1, 1, 12, 12, 45), 42), ]) self.incoming.add_measures(metric2.id, [ incoming.Measure(datetime64(2014, 1, 1, 12, 0, 5), 9), incoming.Measure(datetime64(2014, 1, 1, 12, 7, 31), 2), incoming.Measure(datetime64(2014, 1, 1, 12, 9, 31), 6), incoming.Measure(datetime64(2014, 1, 1, 12, 13, 10), 2), ]) self.trigger_processing([str(self.metric.id), str(metric2.id)]) self.assertEqual([ (datetime64(2014, 1, 1), numpy.timedelta64(1, 'D'), 33), ], self.storage.find_measure( self.metric, storage.MeasureQuery({u"≥": 30}), numpy.timedelta64(1, 'D'))) self.assertEqual( [(datetime64(2014, 1, 1, 12), numpy.timedelta64(5, 'm'), 69), (datetime64(2014, 1, 1, 12, 10), numpy.timedelta64(5, 'm'), 42)], self.storage.find_measure(self.metric, storage.MeasureQuery({u"≥": 30}), numpy.timedelta64(5, 'm'))) self.assertEqual([], self.storage.find_measure( metric2, storage.MeasureQuery({u"≥": 30}), numpy.timedelta64(5, 'm'))) self.assertEqual([], self.storage.find_measure( self.metric, storage.MeasureQuery( {u"∧": [{ u"eq": 100 }, { u"≠": 50 }]}), numpy.timedelta64(5, 'm'))) self.assertEqual([], self.storage.find_measure( metric2, storage.MeasureQuery( {u"∧": [{ u"eq": 100 }, { u"≠": 50 }]}), numpy.timedelta64(5, 'm')))