예제 #1
0
def get_executions(actor_ids):
    ex_ids = {}
    for a in actor_ids:
        ex_ids[a] = []
        url = '{}/actors/{}/executions'.format(base, a)
        rsp = requests.get(url, headers=headers)
        result = basic_response_checks(rsp)
        for ex in result['executions']:
            ex_ids[a].append(ex['id'])
    return ex_ids
예제 #2
0
def remove_actors(actor_ids):
    for aid in actor_ids:
        url = '{}/actors/{}'.format(base, aid)
        rsp = requests.delete(url, headers=headers)
        print(f"Send actor id {aid} sent delete request...")
        try:
            result = basic_response_checks(rsp)
            print(f"actor id {aid} successfully deleted.")
        except Exception as e:
            print(
                f"got exception in request to delete actor {aid}; exception: {e}"
            )
예제 #3
0
def get_actors():
    """
    Helper script that can return that actor_ids associated with this test suite.
    :return:
    """
    aids = []
    url = '{}/actors'.format(base)
    rsp = requests.get(url, headers=headers)
    result = basic_response_checks(rsp)
    for actor in result:
        if 'abaco_load_test_' in actor.get('name'):
            aids.append(actor.get('id'))
    return aids
예제 #4
0
def check_for_ready(actor_ids):
    """
    Check for READY status of each actor in the actor_ids list.
    :param actor_ids:
    :return:
    """
    for aid in actor_ids:
        # check for workers to be ready
        idx = 0
        ready = False
        while not ready and idx < 60:
            url = '{}/actors/{}/workers'.format(base, aid)
            rsp = requests.get(url, headers=headers)
            result = basic_response_checks(rsp)
            for worker in result:
                if not worker['status'] == 'READY':
                    idx = idx + 1
                    time.sleep(2)
                    continue
                ready = True
        if not ready:
            print("ERROR - workers for actor {} never entered READY status.")
            raise Exception()
        # now check that the actor itself is ready -
        ready = False
        idx = 0
        while not ready and idx < 10:
            url = '{}/actors/{}'.format(base, aid)
            rsp = requests.get(url, headers=headers)
            result = basic_response_checks(rsp)
            if result['status'] == 'READY':
                ready = True
                break
            idx = idx + 1
            time.sleep(1)
        if not ready:
            print("ERROR - actor {} never entered READY status.")
            raise Exception()
        print(f"workers and actor ready for actor {aid}")
예제 #5
0
def send_messages(actor_ids, num_messages_per_actor):
    execution_ids = {}
    for idx, aid in enumerate(actor_ids):
        execution_ids[aid] = []
        url = '{}/actors/{}/messages'.format(base, aid)
        for j in range(num_messages_per_actor):
            rsp = requests.post(url,
                                data={'message': 'test_{}_{}'.format(idx, j)},
                                headers=headers)
            result = basic_response_checks(rsp)
            ex_id = result['executionId']
            print("Send actor id {} message {}_{}; execution id: {}".format(
                aid, idx, j, ex_id))
            execution_ids[aid].append(ex_id)
    return execution_ids
예제 #6
0
def send_one_message(actor_ids):
    execution_ids = {}
    for idx, aid in enumerate(actor_ids):
        print("sending one primer message to actor: {}".format(aid))
        execution_ids[aid] = []
        url = '{}/actors/{}/messages'.format(base, aid)
        rsp = requests.post(url,
                            data={'message': 'test1_{}'.format(idx)},
                            headers=headers)
        result = basic_response_checks(rsp)
        ex_id = result['executionId']
        print("Send actor id {} message {}; execution id: {}".format(
            aid, idx, ex_id))
        execution_ids[aid].append(ex_id)
    print("All primer messages sent.")
    return execution_ids
예제 #7
0
def check_for_complete(actor_ids):
    done_actors = []
    count = 0
    while not len(done_actors) == len(actor_ids):
        count = count + 1
        messages = []
        for idx, aid in enumerate(actor_ids):
            if aid in done_actors:
                continue
            url = f'{base}/actors/{aid}/executions'
            try:
                rsp = requests.get(url, headers=headers)
                result = basic_response_checks(rsp)
            except Exception as e:
                print(
                    f"got exception trying to check executions for actor {aid}, exception: {e}"
                )
                continue
            tot_done = 0
            tot = 0
            for e in result['executions']:
                tot = tot + 1
                if e['status'] == 'COMPLETE':
                    tot_done = tot_done + 1
            if tot == tot_done:
                done_actors.append(aid)
            else:
                messages.append(f"{tot_done}/{tot} for actor {aid}.")
        if count % 100 == 0:
            print(
                f"{len(done_actors)}/{len(actor_ids)} actors completed executions."
            )
            for m in messages:
                print(m)
            # sleep more at the beginning -
            if len(done_actors) / len(actor_ids) < 0.5:
                time.sleep(4)
            elif len(done_actors) / len(actor_ids) < 0.75:
                time.sleep(3)
            elif len(done_actors) / len(actor_ids) < 0.9:
                time.sleep(2)
            else:
                time.sleep(1)
    print("All executions complete.")
예제 #8
0
def start_workers(aid, num_workers):
    data = {'num': num_workers}
    rsp = requests.post(f'{base}/actors/{aid}/workers',
                        data=data,
                        headers=headers)
    result = basic_response_checks(rsp)
예제 #9
0
def register_actor(idx):
    IMAGE = os.environ.get('IMAGE', 'abacosamples/test')
    data = {'image': IMAGE, 'name': 'abaco_load_test_{}'.format(idx)}
    rsp = requests.post('{}/actors'.format(base), data=data, headers=headers)
    result = basic_response_checks(rsp)
    return result['id']