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, # ... }