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)
Example #4
0
    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')
Example #5
0
 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)