def test_stream_has_dist_trait(self): #this mostly tests that the polymorphic trait comparisons are working. dt = self.db.stream_has_dist_trait(1, 'instance_id', 'zzzz-xxxx-yyyy-wwww') self.assertIsNotNone(dt) self.assertEqual(len(dt), 1) self.assertIn('instance_id', dt) self.assertEqual(dt['instance_id'], 'zzzz-xxxx-yyyy-wwww') dt = self.db.stream_has_dist_trait(1, 'memory_mb', 4096) self.assertIsNotNone(dt) self.assertEqual(len(dt), 1) self.assertIn('memory_mb', dt) self.assertEqual(dt['memory_mb'], 4096) dt = self.db.stream_has_dist_trait(1, 'test_weight', 3.1415) self.assertIsNotNone(dt) self.assertEqual(len(dt), 1) self.assertIn('test_weight', dt) self.assertEqual(dt['test_weight'], 3.1415) launched = datetime.datetime(2014,7,8,9,40,50,77777) dt = self.db.stream_has_dist_trait(1, 'launched_at', launched) self.assertIsNotNone(dt) self.assertEqual(len(dt), 1) self.assertIn('launched_at', dt) self.assertEqual(dt['launched_at'], launched) timestamp = timex.TimeRange(datetime.datetime(2014,7,8,0,0,0,27), datetime.datetime(2014,7,9,0,0,0,27)) dt = self.db.stream_has_dist_trait(1, 'timestamp', timestamp) self.assertIsNotNone(dt) self.assertEqual(len(dt), 1) self.assertIn('timestamp', dt) self.assertEqual(dt['timestamp'].begin, timestamp.begin) self.assertEqual(dt['timestamp'].end, timestamp.end)
def value(self): if self.type not in self.ATTRIBUTE_MAP: raise InvalidTraitType("Invalid trait type in db for %s: %s" % (self.name, self.type)) attribute = self.ATTRIBUTE_MAP[self.type] if attribute is None: return None if self.type == Datatype.timerange: val = getattr(self, attribute) return timex.TimeRange(val.begin, val.end) else: return getattr(self, attribute)
def test_get_active_stream(self): timestamp = timex.TimeRange(datetime.datetime(2014,7,8,0,0,0,27), datetime.datetime(2014,7,9,0,0,0,27)) dist_traits = dict(instance_id='zzzz-xxxx-yyyy-wwww', memory_mb=4096, test_weight=3.1415, launched_at=datetime.datetime(2014,7,8,9,40,50,77777), timestamp=timestamp) current_time = datetime.datetime(2014,8,2,1,0,0,02) stream = self.db.get_active_stream('test_trigger', dist_traits, current_time) self.assertIsNotNone(stream) self.assertEqual(stream.id, 1) current_time = datetime.datetime(2014,8,3,1,0,0,02) stream = self.db.get_active_stream('test_trigger', dist_traits, current_time) self.assertIsNone(stream)
def test_create_stream(self): event = dict( message_id='1234-5678-001', event_type='test.thing.begin', timestamp=datetime.datetime(2014, 8, 1, 10, 20, 45, 453201), instance_id='aaaa-bbbb-cccc-dddd', memory_mb=1024, test_weight=20112.42, launched_at=datetime.datetime(2014, 7, 1, 2, 30, 45, 453201), ) timestamp = timex.TimeRange(datetime.datetime(2014, 8, 1, 0, 0, 0, 27), datetime.datetime(2014, 2, 2, 0, 0, 0, 27)) dist_traits = dict(timestamp=timestamp, instance_id='aaaa-bbbb-cccc-dddd') class MockTimestamp(object): pass mock_expire_value = datetime.datetime(2014, 8, 2, 12, 12, 12, 12) def mock_time_expr(first, last): self.assertEqual(first, datetime.datetime(2014, 8, 1, 10, 20, 45, 453201)) self.assertEqual(last, datetime.datetime(2014, 8, 1, 10, 20, 45, 453201)) t = MockTimestamp() t.timestamp = mock_expire_value return t stream = self.db.create_stream('test_create_stream', event, dist_traits, mock_time_expr) self.assertEqual(stream.name, 'test_create_stream') self.assertEqual(stream.first_event, datetime.datetime(2014, 8, 1, 10, 20, 45, 453201)) self.assertEqual(stream.last_event, datetime.datetime(2014, 8, 1, 10, 20, 45, 453201)) self.assertEqual(stream.expire_timestamp, mock_expire_value) self.assertIsNone(stream.fire_timestamp) self.assertEqual(stream.state, models.StreamState.active) self.assertEqual(stream.state_serial_no, 0) self.assertTrue( self.db.stream_has_dist_trait(stream.id, 'timestamp', timestamp)) self.assertTrue( self.db.stream_has_dist_trait(stream.id, 'instance_id', 'aaaa-bbbb-cccc-dddd')) events = self.db.get_stream_events(stream) self.assertEqual(len(events), 1) self.assertEqual(events[0]['message_id'], '1234-5678-001')
def test_get_distinguished_traits_with_timeexpression(self): config = dict(name='test_trigger', expiration='$last + 1d', distinguished_by=['instance_id', dict(timestamp='day')], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) event1 = dict(event_type='test.thing', instance_id='foo', timestamp=datetime.datetime(2014, 8, 1, 20, 4, 23, 444)) tdef = definition.TriggerDefinition(config, self.debug_manager) mcriteria = tdef.match(event1) dt = tdef.get_distinguishing_traits(event1, mcriteria) self.assertEqual(len(dt), 2) self.assertIn('instance_id', dt) self.assertEqual(dt['instance_id'], 'foo') timerange = timex.TimeRange(datetime.datetime(2014, 8, 1, 0, 0, 0, 0), datetime.datetime(2014, 8, 2, 0, 0, 0, 0)) self.assertIn('timestamp', dt) self.assertIsInstance(dt['timestamp'], timex.TimeRange) self.assertEqual(dt['timestamp'].begin, timerange.begin) self.assertEqual(dt['timestamp'].end, timerange.end)