Ejemplo n.º 1
0
def test_labeled_counter_type(ping_schema_url):
    labeled_counter_metric = metrics.LabeledCounterMetricType(
        disabled=False,
        category="telemetry",
        lifetime=Lifetime.APPLICATION,
        name="labeled_counter_metric",
        send_in_pings=["metrics"],
    )

    labeled_counter_metric["label1"].add(1)
    labeled_counter_metric["label2"].add(2)

    assert labeled_counter_metric["label1"].test_has_value()
    assert 1 == labeled_counter_metric["label1"].test_get_value()

    assert labeled_counter_metric["label2"].test_has_value()
    assert 2 == labeled_counter_metric["label2"].test_get_value()

    json_content = Glean.test_collect(_builtins.pings.metrics)

    assert 0 == validate_ping.validate_ping(io.StringIO(json_content),
                                            sys.stdout,
                                            schema_url=ping_schema_url)

    tree = json.loads(json_content)

    assert (1 == tree["metrics"]["labeled_counter"]
            ["telemetry.labeled_counter_metric"]["label1"])
    assert (2 == tree["metrics"]["labeled_counter"]
            ["telemetry.labeled_counter_metric"]["label2"])
Ejemplo n.º 2
0
def test_other_label_without_predefined_labels_before_glean_init():
    labeled_counter_metric = metrics.LabeledCounterMetricType(
        disabled=False,
        category="telemetry",
        lifetime=Lifetime.APPLICATION,
        name="labeled_counter_metric",
        send_in_pings=["metrics"],
    )

    Glean._reset()
    Dispatcher.set_task_queueing(True)

    for i in range(21):
        labeled_counter_metric["label_{}".format(i)].add(1)
    labeled_counter_metric["label_0"].add(1)

    Glean.initialize(
        application_id="glean-python-test",
        application_version=glean_version,
        upload_enabled=True,
    )

    assert 2 == labeled_counter_metric["label_0"].test_get_value()
    for i in range(1, 16):
        assert 1 == labeled_counter_metric["label_{}".format(
            i)].test_get_value()
    assert 5 == labeled_counter_metric["__other__"].test_get_value()
Ejemplo n.º 3
0
def test_other_label_without_predefined_labels(ping_schema_url):
    labeled_counter_metric = metrics.LabeledCounterMetricType(
        disabled=False,
        category="telemetry",
        lifetime=Lifetime.APPLICATION,
        name="labeled_counter_metric",
        send_in_pings=["metrics"],
    )

    for i in range(21):
        labeled_counter_metric["label_{}".format(i)].add(1)

    labeled_counter_metric["label_0"].add(1)

    assert 2 == labeled_counter_metric["label_0"].test_get_value()
    for i in range(1, 16):
        assert 1 == labeled_counter_metric["label_{}".format(
            i)].test_get_value()
    assert 5 == labeled_counter_metric["__other__"].test_get_value()

    json_content = Glean.test_collect(_builtins.pings.metrics)

    assert 0 == validate_ping.validate_ping(io.StringIO(json_content),
                                            sys.stdout,
                                            schema_url=ping_schema_url)
Ejemplo n.º 4
0
def test_rapidly_recreating_labeled_metrics_does_not_crash():
    """
    Regression test for bug 1733757.
    The underlying map implementation has an upper limit of entries it can handle,
    currently set to (1<<15)-1 = 32767.
    We used to create a new object every time a label was referenced,
    leading to exhausting the available storage in that map, which finally results in a panic.
    """

    labeled_counter_metric = metrics.LabeledCounterMetricType(
        category="telemetry",
        name="labeled_nocrash",
        send_in_pings=["metrics"],
        lifetime=Lifetime.APPLICATION,
        disabled=False,
        labels=["foo"],
    )

    # We go higher than the maximum of `(1<<15)-1 = 32767`.
    # Python is slow, so we only go a tiny bit higher.
    max_attempts = (1 << 15) + 1  # 32769
    for _ in range(max_attempts):
        labeled_counter_metric["foo"].add(1)

    assert max_attempts == labeled_counter_metric["foo"].test_get_value()
Ejemplo n.º 5
0
def get_upload_failure_metric():
    return metrics.LabeledCounterMetricType(
        disabled=False,
        send_in_pings=["metrics"],
        name="ping_upload_failure",
        category="glean.upload",
        labels=[
            "status_code_4xx",
            "status_code_5xx",
            "status_code_unknown",
            "unrecoverable",
            "recoverable",
        ],
        lifetime=metrics.Lifetime.PING,
    )
Ejemplo n.º 6
0
def test_invalid_labels_go_to_other():
    labeled_counter_metric = metrics.LabeledCounterMetricType(
        disabled=False,
        category="telemetry",
        lifetime=Lifetime.APPLICATION,
        name="labeled_counter_metric",
        send_in_pings=["metrics"],
    )

    labeled_counter_metric["notSnakeCase"].add(1)
    labeled_counter_metric[""].add(1)
    labeled_counter_metric["with/slash"].add(1)
    labeled_counter_metric["this_string_has_more_than_thirty_characters"].add(
        1)

    assert 4 == labeled_counter_metric.test_get_num_recorded_errors(
        ErrorType.INVALID_LABEL)
Ejemplo n.º 7
0
def test_other_label_with_predefined_labels():
    labeled_counter_metric = metrics.LabeledCounterMetricType(
        disabled=False,
        category="telemetry",
        lifetime=Lifetime.APPLICATION,
        name="labeled_counter_metric",
        send_in_pings=["metrics"],
        labels=["foo", "bar", "baz"],
    )

    labeled_counter_metric["foo"].add(1)
    labeled_counter_metric["foo"].add(2)
    labeled_counter_metric["bar"].add(1)
    labeled_counter_metric["not_there"].add(1)
    labeled_counter_metric["also_not_there"].add(1)
    labeled_counter_metric["not_me"].add(1)

    assert 3 == labeled_counter_metric["foo"].test_get_value()
    assert 1 == labeled_counter_metric["bar"].test_get_value()
    assert not labeled_counter_metric["baz"].test_has_value()
    assert 3 == labeled_counter_metric["not_there"].test_get_value()

    json_content = Glean.test_collect(_builtins.pings.metrics)

    assert 0 == validate_ping.validate_ping(io.StringIO(json_content), sys.stdout)

    tree = json.loads(json_content)

    assert (
        3
        == tree["metrics"]["labeled_counter"]["telemetry.labeled_counter_metric"]["foo"]
    )
    assert (
        1
        == tree["metrics"]["labeled_counter"]["telemetry.labeled_counter_metric"]["bar"]
    )
    assert (
        3
        == tree["metrics"]["labeled_counter"]["telemetry.labeled_counter_metric"][
            "__other__"
        ]
    )