generator.operational_monitoring_utils

Utils for operational monitoring.

 1"""Utils for operational monitoring."""
 2
 3from multiprocessing.pool import ThreadPool
 4from typing import Any, Dict, List, Optional, Tuple
 5
 6from google.api_core import exceptions
 7from google.cloud import bigquery
 8
 9from .views import lookml_utils
10
11
12def _default_helper(
13    bq_client: bigquery.Client, table: str, dimension: str
14) -> Tuple[Optional[str], dict]:
15    query_job = bq_client.query(
16        f"""
17            SELECT DISTINCT {dimension} AS option, COUNT(*)
18            FROM {table}
19            WHERE {dimension} IS NOT NULL
20            GROUP BY 1
21            ORDER BY 2 DESC
22            LIMIT 10
23        """
24    )
25
26    dimension_options = list(query_job.result())
27
28    if len(dimension_options) > 0:
29        return dimension, {
30            "default": dimension_options[0]["option"],
31            "options": [d["option"] for d in dimension_options],
32        }
33    return None, {}
34
35
36def get_dimension_defaults(
37    bq_client: bigquery.Client, table: str, dimensions: List[str]
38) -> Dict[str, Any]:
39    """
40    Find default values for certain dimensions.
41
42    For a given Operational Monitoring dimension, find its default (most common)
43    value and its top 10 most common to be used as dropdown options.
44    """
45    with ThreadPool(4) as pool:
46        return {
47            key: value
48            for key, value in pool.starmap(
49                _default_helper,
50                [[bq_client, table, dimension] for dimension in dimensions],
51            )
52            if key is not None
53        }
54
55
56def get_xaxis_val(bq_client: bigquery.Client, table: str) -> str:
57    """
58    Return whether the x-axis should be build_id or submission_date.
59
60    This is based on which one is found in the table provided.
61    """
62    all_dimensions = lookml_utils._generate_dimensions(bq_client, table)
63    return (
64        "build_id"
65        if "build_id" in {dimension["name"] for dimension in all_dimensions}
66        else "submission_date"
67    )
68
69
70def get_active_projects(
71    bq_client: bigquery.Client, project_table: str
72) -> List[Dict[str, Any]]:
73    """Select all operational monitoring projects."""
74    try:
75        query_job = bq_client.query(
76            f"""
77                SELECT *
78                FROM `{project_table}`
79                WHERE
80                    DATE_ADD(end_date, INTERVAL 90 DAY) > CURRENT_DATE() OR
81                    end_date IS NULL
82            """
83        )
84
85        projects = [dict(row) for row in query_job.result()]
86    except exceptions.Forbidden:
87        projects = []
88    return projects
def get_dimension_defaults( bq_client: google.cloud.bigquery.client.Client, table: str, dimensions: List[str]) -> Dict[str, Any]:
37def get_dimension_defaults(
38    bq_client: bigquery.Client, table: str, dimensions: List[str]
39) -> Dict[str, Any]:
40    """
41    Find default values for certain dimensions.
42
43    For a given Operational Monitoring dimension, find its default (most common)
44    value and its top 10 most common to be used as dropdown options.
45    """
46    with ThreadPool(4) as pool:
47        return {
48            key: value
49            for key, value in pool.starmap(
50                _default_helper,
51                [[bq_client, table, dimension] for dimension in dimensions],
52            )
53            if key is not None
54        }

Find default values for certain dimensions.

For a given Operational Monitoring dimension, find its default (most common) value and its top 10 most common to be used as dropdown options.

def get_xaxis_val(bq_client: google.cloud.bigquery.client.Client, table: str) -> str:
57def get_xaxis_val(bq_client: bigquery.Client, table: str) -> str:
58    """
59    Return whether the x-axis should be build_id or submission_date.
60
61    This is based on which one is found in the table provided.
62    """
63    all_dimensions = lookml_utils._generate_dimensions(bq_client, table)
64    return (
65        "build_id"
66        if "build_id" in {dimension["name"] for dimension in all_dimensions}
67        else "submission_date"
68    )

Return whether the x-axis should be build_id or submission_date.

This is based on which one is found in the table provided.

def get_active_projects( bq_client: google.cloud.bigquery.client.Client, project_table: str) -> List[Dict[str, Any]]:
71def get_active_projects(
72    bq_client: bigquery.Client, project_table: str
73) -> List[Dict[str, Any]]:
74    """Select all operational monitoring projects."""
75    try:
76        query_job = bq_client.query(
77            f"""
78                SELECT *
79                FROM `{project_table}`
80                WHERE
81                    DATE_ADD(end_date, INTERVAL 90 DAY) > CURRENT_DATE() OR
82                    end_date IS NULL
83            """
84        )
85
86        projects = [dict(row) for row in query_job.result()]
87    except exceptions.Forbidden:
88        projects = []
89    return projects

Select all operational monitoring projects.