コード例 #1
0
def user_interface_generator(max_users=None):
    if not max_users:
        return schema_generator(ip_address=version_generator(4, 255))

    return schema_generator(
        ip_address=version_generator(4, 255),
        username=f"Hobgoblin {random.random()}",
        id=lambda: str(random.randrange(max_users)),
    )
コード例 #2
0
def device_context_generator():
    return schema_generator(
        type="device",
        screen_resolution=[
            None,
            lambda:
            f"{int(random.random() * 1000)}x{int(random.random() * 1000)}",
        ],
        orientation=["portrait", "landscape", "garbage data", None],
        name=[None, lambda: f"Android SDK built for x{random.random()}"],
        family=[None, lambda: f"Device family {random.random()}"],
        battery_level=range(101),
        screen_dpi=range(1000),
        memory_size=range(10**6),
        timezone=["America/Los_Angeles", "Europe/Vienna"],
        external_storage_size=range(10**6),
        external_free_storage=range(10**6),
        screen_width_pixels=range(1000),
        low_memory=[True, False],
        simulator=[True, False],
        screen_height_pixels=range(1000),
        free_memory=range(10**5),
        online=[True, False],
        screen_density=range(5),
        charging=[True, False],
        locale=["DE", "US", "NL", "ES", "CZ"],
        model_id="NYC",
        brand=["google", "zoogle", "moodle", "doodle", "tamagotchi"],
        storage_size=range(10**6),
        boot_time=lambda: str(time.time()),
        arch=lambda: f"x{random.random()}",
        manufacturer=["Google", "Hasbro"],
    )
コード例 #3
0
def app_context_generator():
    return schema_generator(
        type="app",
        app_version=version_generator(3),
        app_identifier="io.sentry.sample",
        app_build=range(100),
    )
コード例 #4
0
def breadcrumb_generator(min=None,
                         max=None,
                         categories=None,
                         levels=None,
                         types=None,
                         messages=None):
    min = min if min is not None else 0
    max = max if max is not None else 50
    categories = (categories if categories is not None and len(categories) > 0
                  else ["auth", "web-request", "query"])
    levels = (levels if levels is not None else
              ["fatal", "error", "warning", "info", "debug"])
    types = types if types is not None else ["default", "http", "error"]
    messages = messages if messages is not None else _breadcrumb_messages
    get_num_crumbs = lambda: random.randrange(min, max + 1)

    generator = schema_generator(
        category=categories,
        timestamp=lambda: time.time(),
        level=levels,
        type=types,
        message=lambda: random.choice(messages),
    )

    def inner():
        num_crumbs = get_num_crumbs()
        result = [None] * num_crumbs
        for idx in range(num_crumbs):
            result[idx] = generator()
        return result

    return inner
コード例 #5
0
def os_context_generator():
    return schema_generator(
        type="os",
        rooted=[True, False],
        kernel_version="Linux version 3.10.0+ ([email protected]) (gcc version 4.9.x 20150123 (prerelease) (GCC) ) #256 SMP PREEMPT Fri May 19 11:58:12 PDT 2017",
        version=version_generator(3),
        build="sdk_google_phone_x86-userdebug 7.1.1 NYC 5464897 test-keys",
        name=["Android", "NookPhone"],
    )
コード例 #6
0
def trace_context_generator(operations=Sequence[str]):
    def parent_span_id_generator():
        random.choice([None, span_id_generator()()])

    return schema_generator(
        trace_id=lambda: uuid.uuid4().hex,
        span_id=span_id_generator(),
        parent_span_id=parent_span_id_generator,
        op=span_op_generator(operations=operations),
        status=span_status_generator(),
        type="trace",
    )
コード例 #7
0
def transaction_generator(
        num_releases: Optional[int],
        max_users: Optional[int],
        min_spans: int,
        max_spans: int,
        transaction_duration_max: timedelta,
        transaction_duration_min: timedelta,
        transaction_timestamp_spread: timedelta,
        min_breadcrumbs: int,
        max_breadcrumbs: int,
        breadcrumb_categories,
        breadcrumb_levels,
        breadcrumb_types,
        breadcrumb_messages,
        measurements: Sequence[str],
        operations: Sequence[str],
        **kwargs,  # additional ignored params
):
    basic_generator = schema_generator(
        event_id=lambda: uuid.uuid4().hex,
        release=(lambda: f"release{random.randrange(num_releases)}"
                 if num_releases is not None else None),
        transaction=[None, lambda: f"mytransaction{random.randrange(100)}"],
        logger=["foo.bar.baz", "bam.baz.bad", None],
        environment=["production", "development", "staging"],
        user=user_interface_generator(max_users=max_users),
        contexts={
            "os": [None, os_context_generator()],
            "device": [None, device_context_generator()],
            "app": [None, app_context_generator()],
            "trace": trace_context_generator(operations=operations),
        },
        breadcrumbs=breadcrumb_generator(
            min=min_breadcrumbs,
            max=max_breadcrumbs,
            categories=breadcrumb_categories,
            levels=breadcrumb_levels,
            types=breadcrumb_types,
            messages=breadcrumb_messages,
        ),
        measurements=measurements_generator(measurements=measurements),
    )

    def inner():
        # get the basic structure (before adding the spans)
        transaction_data = basic_generator()
        # extract trace_id and root span to use in child spans
        trace_ctx = transaction_data["contexts"]["trace"]
        trace_id = trace_ctx["trace_id"]
        transaction_id = trace_ctx["span_id"]
        now = time.time()
        duration_min_sec = transaction_duration_min.total_seconds()
        duration_max_sec = transaction_duration_max.total_seconds()
        range_seconds = duration_max_sec - duration_min_sec
        transaction_duration = timedelta(
            seconds=range_seconds * random.random() + duration_min_sec)
        transaction_delta = timedelta(
            seconds=transaction_timestamp_spread.total_seconds() *
            random.random())

        timestamp = now - transaction_delta.total_seconds()
        transaction_start = timestamp - transaction_duration.total_seconds()

        spans = create_spans(
            min_spans=min_spans,
            max_spans=max_spans,
            transaction_id=transaction_id,
            trace_id=trace_id,
            transaction_start=transaction_start,
            timestamp=timestamp,
            operations_generator=span_op_generator(operations),
        )

        transaction_data["spans"] = spans
        transaction_data["timestamp"] = timestamp
        transaction_data["start_timestamp"] = transaction_start

        return transaction_data

    return inner
コード例 #8
0
ファイル: event.py プロジェクト: getsentry/ingest-load-tester
def base_event_generator(
    with_event_id=True,
    with_level=True,
    num_event_groups=1,
    max_users=None,
    min_breadcrumbs=None,
    max_breadcrumbs=None,
    breadcrumb_categories=None,
    breadcrumb_levels=None,
    breadcrumb_types=None,
    breadcrumb_messages=None,
    with_native_stacktrace=False,
    with_javascript_stacktrace=False,
    num_stacktraces=5,
    num_frames=100,
    num_releases=10,
    release=None,
    min_frames=5,
    max_frames=30,
    **kwargs,
):
    event_generator = schema_generator(
        event_id=(lambda: uuid.uuid4().hex) if with_event_id else None,
        level=["error", "debug"] if with_level else None,
        fingerprint=lambda:
        [f"fingerprint{random.randrange(num_event_groups)}"],
        release=(lambda: f"release{random.randrange(num_releases)}"
                 if release is None else release),
        transaction=[None, lambda: f"mytransaction{random.randrange(100)}"],
        logentry={"formatted": sentence_generator()},
        logger=["foo.bar.baz", "bam.baz.bad", None],
        timestamp=time.time,
        environment=["production", "development", "staging"],
        user=user_interface_generator(max_users=max_users),
        contexts={
            "os": [None, os_context_generator()],
            "device": [None, device_context_generator()],
            "app": [None, app_context_generator()],
        },
        breadcrumbs=breadcrumb_generator(
            min=min_breadcrumbs,
            max=max_breadcrumbs,
            categories=breadcrumb_categories,
            levels=breadcrumb_levels,
            types=breadcrumb_types,
            messages=breadcrumb_messages,
        ),
    )

    if with_native_stacktrace:
        native_gen = native_data_generator(
            num_frames=random.randrange(min_frames, max_frames))

        exc_gen = schema_generator(value=sentence_generator())

        def event_generator(base_gen=event_generator):
            event = base_gen()
            event["platform"] = "cocoa"

            frames, images = native_gen()
            exc = exc_gen()
            exc["stacktrace"] = {"frames": exc_frames}

            event["exception"] = {"values": [exc]}
            event["debug_meta"] = {"images": images}
            return event

    elif with_javascript_stacktrace:
        js_gen = javascript_exception_generator(min_frames=min_frames,
                                                max_frames=max_frames)

        def event_generator(base_gen=event_generator):
            event = base_gen()
            event["platform"] = "javascript"
            event["exception"] = js_gen()
            return event

    return event_generator