in sync/metrichub.py [0:0]
def get_metric_definitions() -> List[MetricHubDefinition]:
config_collection = ConfigCollection.from_github_repos(
[METRIC_HUB_REPO_URL, LOOKER_METRICS_URL]
)
metrics = []
for definition in config_collection.definitions:
for (
metric_name,
metric,
) in definition.spec.metrics.definitions.items():
# Some metrics don't have data sources
# (e.g. ad_click_rate, chained metric used in jetstream)
tables = None
datasource = None
if metric.data_source is not None:
datasource = config_collection.get_data_source_definition(
slug=metric.data_source.name, app_name=definition.platform
)
tables = [
table.format(dataset=datasource.default_dataset)
for table in _extract_table_references(datasource.from_expression)
]
statistics = []
if metric.statistics is not None:
for statistic_name, _ in metric.statistics.items():
statistics.append(MetricStatistic(name=statistic_name))
metrics.append(
MetricHubDefinition(
name=metric.name,
description=metric.description or "",
owners=(
[metric.owner]
if isinstance(metric.owner, str)
else metric.owner
),
level=metric.level if metric.level else None,
friendly_name=(
metric.friendly_name if metric.friendly_name else None
),
deprecated=metric.deprecated or False,
sql_definition=metric.select_expression,
product=definition.platform,
bigquery_tables=tables,
statistics=statistics,
data_source=datasource.name if datasource else None,
)
)
return metrics