def _set_scenario_result(
    scenario_id: str,
    output: Any,
    exception: Any,
    logs: str,
    time_taken: float,
    succeeded: int,
    failed: int,
    address: str = DEFAULT_BACKEND_ADDRESS,
):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.SetScenarioResultRequest(
            scenarioID=scenario_id,
            output=wrappers_pb2.StringValue(value=json.dumps(output)),
            exception=wrappers_pb2.StringValue(value=json.dumps(
                str(exception) if exception is not None else None)),
            logs=logs,
            timeTaken=time_taken,
            succeeded=succeeded,
            failed=failed,
        )

        stub.SetScenarioResult(request)
def _get_metric_statistics(
    scenario_id: str,
    name: str,
    address: str = DEFAULT_BACKEND_ADDRESS,
) -> Optional[dict]:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        try:
            stub = backend_pb2_grpc.BackendStub(channel)
            request = backend_pb2.GetMetricRequest(
                scenarioID=scenario_id,
                name=name,
            )

            response = stub.GetMetricStatistics(request)

            # FEATURE: type for metric statistics
            return {
                "min": response.min,
                "max": response.max,
                "median": response.median,
                "average": response.average,
                "len": response.len,
            }
        except grpc.RpcError as err:
            if err.code() == grpc.StatusCode.NOT_FOUND:
                return None
            else:
                raise err
def _move_scenario_result(
        scenario_id: str,
        address: str = DEFAULT_BACKEND_ADDRESS) -> Optional[dict]:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        try:
            stub = backend_pb2_grpc.BackendStub(channel)
            request = backend_pb2.MoveScenarioResultRequest(
                scenarioID=scenario_id, )

            response = stub.MoveScenarioResult(request)

            return {
                "id": response.id,
                "output": json.loads(response.output.value),
                "exception": json.loads(response.exception.value),
                "logs": response.logs,
                "timestamp": response.timestamp,
                "time_taken": response.timeTaken,
                "succeeded": response.succeeded,
                "failed": response.failed,
            }
        except grpc.RpcError as err:
            if err.code() == grpc.StatusCode.NOT_FOUND:
                return None
            else:
                raise err
def _clean_test_instances(test_id: str,
                          address: str = DEFAULT_BACKEND_ADDRESS):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.CleanTestInstancesRequest(testID=test_id)

        stub.CleanTestInstances(request)
def _get_user_work(user_manager_id: str,
                   address: str = DEFAULT_BACKEND_ADDRESS) -> int:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.GetUserWorkRequest(userManagerID=user_manager_id)

        response = stub.GetUserWork(request)

        return response.work
def _distribute_work(scenario_id: str,
                     amount: int,
                     address: str = DEFAULT_BACKEND_ADDRESS):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.DistributeWorkRequest(scenarioID=scenario_id,
                                                    amount=amount)

        stub.DistributeWork(request)
def _stop_users(
    scenario_id: str,
    amount: int,
    address: str = DEFAULT_BACKEND_ADDRESS,
):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.StopUsersRequest(scenarioID=scenario_id,
                                               amount=amount)

        stub.StopUsers(request)
def _add_user_results(user_manager_id: str,
                      results: List[Result],
                      address: str = DEFAULT_BACKEND_ADDRESS):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.AddUserResultsRequest(
            userManagerID=user_manager_id,
            results=[pickle.dumps(result) for result in results],
        )

        stub.AddUserResults(request)
def _check_test_instance(test_id: str,
                         instance_id: str,
                         address: str = DEFAULT_BACKEND_ADDRESS):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.CheckTestInstanceRequest(testID=test_id,
                                                       instanceID=instance_id)

        response = stub.CheckTestInstance(request)

        return response.running
示例#10
0
def _move_user_results(
    scenario_id: str,
    limit: int = 500,
    address: str = DEFAULT_BACKEND_ADDRESS,
) -> List[Result]:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.MoveUserResultsRequest(scenarioID=scenario_id,
                                                     limit=limit)

        response = stub.MoveUserResults(request)

        return [pickle.loads(result) for result in response.results]  # nosec
示例#11
0
def _get_test_events(
        test_id: str,
        address: str = DEFAULT_BACKEND_ADDRESS) -> List[TestEvent]:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.GetEventsRequest(id=test_id)

        response = stub.GetTestEvents(request)

        return [
            TestEvent(kind=event.kind,
                      payload=pickle.loads(event.payload))  # nosec
            for event in response.events
        ]
示例#12
0
def _get_user_events(user_manager_id: str,
                     kind: str,
                     address: str = DEFAULT_BACKEND_ADDRESS):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.GetEventsRequest(id=user_manager_id, kind=kind)

        response = stub.GetUserEvents(request)

        return [
            UserEvent(kind=event.kind,
                      payload=json.loads(event.payload.decode("utf-8")))
            for event in response.events
        ]
示例#13
0
def _create_users(
    test_id: str,
    scenario_id: str,
    amount: int,
    address: str = DEFAULT_BACKEND_ADDRESS,
) -> List[str]:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.CreateUsersRequest(testID=test_id,
                                                 scenarioID=scenario_id,
                                                 amount=amount)

        response = stub.CreateUsers(request)

        return response.userManagerIDs
示例#14
0
def _add_metric(
    scenario_id: str,
    name: str,
    value: float,
    address: str = DEFAULT_BACKEND_ADDRESS,
):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.AddMetricRequest(
            scenarioID=scenario_id,
            name=name,
            value=value,
        )

        stub.AddMetric(request)
示例#15
0
def _add_test_event(
    test_id: str,
    event: TestEvent,
    address: str = DEFAULT_BACKEND_ADDRESS,
):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.AddEventRequest(
            id=test_id,
            event=backend_pb2.Event(
                kind=event.kind,
                payload=pickle.dumps(event.payload),
            ),
        )

        stub.AddTestEvent(request)
示例#16
0
def _add_user_event(
    scenario_id: str,
    kind: str,
    payload: dict,
    address: str = DEFAULT_BACKEND_ADDRESS,
):
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.AddEventRequest(
            id=scenario_id,
            event=backend_pb2.Event(
                kind=kind,
                payload=json.dumps(payload).encode("utf-8"),
            ),
        )

        stub.AddUserEvent(request)
示例#17
0
def _create_test(
    scheduling_metadata: str,
    tags: List[str],
    env: Dict[str, str],
    backend_address: str,
    address: str = DEFAULT_BACKEND_ADDRESS,
) -> str:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.CreateTestRequest(
            backendAddress=backend_address,
            schedulingMetadata=scheduling_metadata,
            tags=tags,
            env=env,
        )

        response = stub.CreateTest(request)

        return response.testID
示例#18
0
def _get_last_metric(
    scenario_id: str,
    name: str,
    address: str = DEFAULT_BACKEND_ADDRESS,
) -> Optional[float]:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        try:
            stub = backend_pb2_grpc.BackendStub(channel)
            request = backend_pb2.GetMetricRequest(
                scenarioID=scenario_id,
                name=name,
            )

            response = stub.GetLastMetric(request)

            return response.last
        except grpc.RpcError as err:
            if err.code() == grpc.StatusCode.NOT_FOUND:
                return None
            else:
                raise err
示例#19
0
def _create_scenario(
    test_id: str,
    scenario_name: str,
    context: str,
    users_per_instance: int,
    tags: List[str],
    address: str = DEFAULT_BACKEND_ADDRESS,
) -> str:
    with grpc.insecure_channel(address,
                               compression=grpc.Compression.Gzip) as channel:
        stub = backend_pb2_grpc.BackendStub(channel)
        request = backend_pb2.CreateScenarioRequest(
            testID=test_id,
            scenarioName=scenario_name,
            context=context,
            usersPerInstance=users_per_instance,
            tags=tags,
        )

        response = stub.CreateScenario(request)

        return response.scenarioID