in opmon/metadata.py [0:0]
def write(self) -> None:
"""Update the BQ table with project metadata."""
destination_table = f"{self.project}.{self.derived_dataset}.{PROJECTS_TABLE}"
# check if projects metadata table exists; otherwise it needs to be created
first_run = True
try:
self.bigquery.client.get_table(destination_table)
first_run = False
except Exception:
first_run = True
project_metadata: List[Dict[str, Any]] = []
for slug, config in self.projects:
summaries = config.metrics
render_summaries = [
{
"metric": summary.metric.name,
"statistic": Summary.from_config(summary).statistic.name(),
}
for summary in summaries
]
if (
config.project
and config.project.end_date
and config.project.start_date
and config.project.end_date <= config.project.start_date
):
continue
metric_groups: Dict[str, List[Any]] = {}
for metric_group in config.project.metric_groups:
for metric in metric_group.metrics:
if metric.name in metric_groups:
metric_groups[metric.name].append(metric_group.name)
else:
metric_groups[metric.name] = [metric_group.name]
project_metadata.append(
{
"slug": slug,
"dimensions": config.dimensions,
"summaries": render_summaries,
"config": config.project,
"alerts": config.alerts,
"metric_groups": metric_groups,
}
)
render_kwargs = {
"gcp_project": self.project,
"dataset": self.dataset,
"derived_dataset": self.derived_dataset,
"table": PROJECTS_TABLE,
"projects": project_metadata,
"first_run": first_run,
}
query = self._render_sql(PROJECTS_FILENAME, render_kwargs=render_kwargs)
self.bigquery.execute(query)
# Create view
view_name = PROJECTS_TABLE.split("_")[0]
view_query = f"""
CREATE OR REPLACE VIEW `{self.project}.{self.dataset}.{view_name}` AS (
SELECT *
FROM `{self.project}.{self.derived_dataset}.{PROJECTS_TABLE}`
)
"""
self.bigquery.execute(view_query)
print("Updated project metadata")