Exemplo n.º 1
0
        def test_time_based_query():
            events_1 = Event.query(start_after=300)
            events_2 = Event.query(start_before=300)
            events_3 = Event.query(start_after=200, start_before=400)

            self.assertTrue(events_1.count() * 10 == cnt_all * 4)
            self.assertTrue(events_2.count() * 10 == cnt_all * 6)
            self.assertTrue(events_3.count() * 10 == cnt_all * 4)
Exemplo n.º 2
0
def run_wf(wf_name=''):
    """
    TODO:
        1. make wf_name meaningful
        2. refact it so as to reduce redundant code
        3. how to response gracefully if error/exception occurs
        4. the response should be contained the state of the workflow triggered
    :http param async:
    :return:
    """
    is_async = request.args.get('async', False)

    event, req = None, request.args
    if request.method == 'POST':
        event = Event.from_json(request.data)
        event.save()
        stat_driver.add_event(event)
        async_results = reactor.dispatch_event(event=event,
                                               wf_name=wf_name,
                                               req=req)
    else:
        async_results = reactor.dispatch_req(wf_name, req, event=event)

    if not is_async:
        for ar in async_results:
            ar.wait()
    return json.dumps([ar.wf_id for ar in async_results])
Exemplo n.º 3
0
    def test_query(self):
        all_event = Event.query()
        cnt_all = all_event.count()

        def test_time_based_query():
            events_1 = Event.query(start_after=300)
            events_2 = Event.query(start_before=300)
            events_3 = Event.query(start_after=200, start_before=400)

            self.assertTrue(events_1.count() * 10 == cnt_all * 4)
            self.assertTrue(events_2.count() * 10 == cnt_all * 6)
            self.assertTrue(events_3.count() * 10 == cnt_all * 4)

        test_time_based_query()
        query_by_name = Event.query(name=self.names[0])
        query_by_entity = Event.query(entity=self.entities[0])
        self.assertTrue(query_by_name.count() == query_by_entity.count())
Exemplo n.º 4
0
    def test_get_tags(self):
        target_tags = set()
        for ts in self.tags:
            for k, v in ts.iteritems():
                target_tags.add('%s=%s' % (k, v))

        tags = Event.get_tags()
        print tags
        self.assertTrue(tags == target_tags)
Exemplo n.º 5
0
 def on_message(self, headers, message):
     # TODO: should we validate the message format and field type here?
     try:
         event = Event.from_json(message)
         self.stat_driver.add_event(event)
         self.reactor.dispatch_event(event)
     except:
         self.logger.exception('failed to process message: ' + message)
     else:
         msg_id = headers['message-id']
         self.conn.ack(msg_id, self.subscription_id)
Exemplo n.º 6
0
 def evolve(self, raw_event, states):
     next_shot = 0
     for state in states:
         while True:
             now = time.time()
             if next_shot < now:
                 raw_event['state'] = state
                 next_shot = now + random.randint(5, 10)
                 break
             else:
                 yield
         raw_event['start'] = int(time.time() * 1000)
         self.publisher.publish(Event(**raw_event))
Exemplo n.º 7
0
    def _generate_data(self):
        self.names = ['name-' + str(n) for n in xrange(10)]
        self.entities = ['host-' + str(n) for n in xrange(10)]
        tags = [['key-' + str(k), 'value-' + str(v)] for k in xrange(5)
                for v in xrange(3)]
        self.tags = [dict(tags[0::3]), dict(tags[1::3]), dict(tags[2::3])]
        starts = [100, 200, 300, 400, 500]

        for state in EventState.alls:
            for i in xrange(len(self.names)):
                name, entity = self.names[i], self.entities[i]
                for ts in self.tags:
                    for start in starts:
                        Event(name=name, entity=entity, tags=ts,
                              start=start).save()
Exemplo n.º 8
0
def get_events():
    args = request.args

    name = args.get('name', None)
    entity = args.get('entity', None)
    tags = json.loads(args.get('tags', '{}'))
    state = args.get('state', None)
    start_before = args.get('startBefore', None)
    start_after = args.get('startAfter', None)

    limit = args.get('limit', 100)

    events = Event.query(name=name,
                         entity=entity,
                         tags=tags,
                         state=state,
                         start_before=start_before and int(start_before),
                         start_after=start_after and int(start_after))
    events = events.limit(limit).order_by('-start')
    return json.dumps(events.as_pymongo())
Exemplo n.º 9
0
 def gen_event(self, state, timestamp):
     return Event(name='test_ttr',
                  entity='localhost',
                  tags={'cluster': 'test'},
                  start=timestamp,
                  state=state)
Exemplo n.º 10
0
 def test_get_entities(self):
     entities = Event.get_entities()
     self.assertTrue(set(entities) == set(self.entities))
Exemplo n.º 11
0
 def test_get_names(self):
     names = Event.get_names()
     self.assertTrue(set(names) == set(self.names))
Exemplo n.º 12
0
 def _get_event(self, name, entity='ojr-test', state='critical', tags={}):
     default = {'cluster': 'jy', 'role': 'DataNode', 'ip': '10.11.12.13'}
     default.update(tags)
     return Event(name=name, entity=entity, state=state, tags=default)