Adding a new metric type - Python

Re-export generated API

By default a metric type gets an auto-generated API from the definition in glean.udl. If this API is sufficient it needs to be re-exported.

In glean-core/python/glean/metrics/__init__.py add a new re-export:

from .._uniffi import CounterMetric as CounterMetricType

Extend and modify API

If the generated API is not sufficient, convenient or needs additional language-specific constructs or conversions the generated API can be wrapped.

Create a new Python file, e.g. glean-core/python/glean/metrics/counter.py. Then create a new class, that delegates functionality to the generated metric type class.

from .._uniffi import CommonMetricData
from .._uniffi import CounterMetric


class CounterMetricType:
    def __init__(self, common_metric_data: CommonMetricData):
        self._inner = CounterMetric(common_metric_data)

    # Wrap existing functionality
    def add(self, amount = 1):
        self._inner.add(amount)

    # Add a new method
    def add_two(self):
        self._inner.add(2)

The new metric type also needs to be imported from glean-core/python/glean/metrics/__init__.py:

from .counter import CounterMetricType

__all__ = [
    "CounterMetricType",
    # ...
]

It also must be added to the _TYPE_MAPPING in glean-core/python/glean/_loader.py:

_TYPE_MAPPING = {
    "counter": metrics.CounterMetricType,
    # ...
}