generator/views/operational_monitoring_view.py (70 lines of code) (raw):

"""Class to describe an Operational Monitoring View.""" from __future__ import annotations from typing import Any, Dict, List, Optional, Union from . import lookml_utils from .ping_view import PingView from .view import ViewDict ALLOWED_DIMENSIONS = { "branch", "metric", "statistic", "parameter", } class OperationalMonitoringView(PingView): """A view on a operational monitoring table.""" type: str = "operational_monitoring_view" def __init__(self, namespace: str, name: str, tables: List[Dict[str, Any]]): """Create instance of a OperationalMonitoringView.""" super().__init__(namespace, name, tables) xaxis = "build_id" if "xaxis" in tables[0] and len(tables) > 0: xaxis = tables[0]["xaxis"] xaxis_to_sql_mapping = { "build_id": f"PARSE_DATE('%Y%m%d', CAST(${{TABLE}}.{xaxis} AS STRING))", "submission_date": f"${{TABLE}}.{xaxis}", } self.dimensions: List[Dict[str, str]] = [ { "name": xaxis, "type": "date", "sql": xaxis_to_sql_mapping[xaxis], "datatype": "date", "convert_tz": "no", } ] @classmethod def from_dict( klass, namespace: str, name: str, _dict: ViewDict ) -> OperationalMonitoringView: """Get a OperationalMonitoringView from a dict representation.""" return klass(namespace, name, _dict["tables"]) def to_lookml(self, v1_name: Optional[str], dryrun) -> Dict[str, Any]: """Get this view as LookML.""" if len(self.tables) == 0: raise Exception((f"Operational Monitoring view {self.name} has no tables")) reference_table = self.tables[0]["table"] all_dimensions = lookml_utils._generate_dimensions( reference_table, dryrun=dryrun ) filtered_dimensions = [ d for d in all_dimensions if d["name"] in ALLOWED_DIMENSIONS or d["name"] in self.tables[0].get("dimensions", {}).keys() ] self.dimensions.extend(filtered_dimensions) return { "views": [ { "name": self.name, "sql_table_name": reference_table, "dimensions": self.dimensions, "measures": self.get_measures( self.dimensions, reference_table, v1_name ), } ] } def get_measures( self, dimensions: List[dict], table: str, v1_name: Optional[str] ) -> List[Dict[str, Union[str, List[Dict[str, str]]]]]: """Get OpMon measures.""" return [ {"name": "point", "type": "sum", "sql": "${TABLE}.point"}, {"name": "upper", "type": "sum", "sql": "${TABLE}.upper"}, {"name": "lower", "type": "sum", "sql": "${TABLE}.lower"}, ]