66from pathlib import Path
77
88import yaml
9+ from dagster import get_dagster_logger
910
1011# environment variables that can be used to override the configuration.
1112env_vars = ["ANOMSTACK_GCP_PROJECT_ID" , "ANOMSTACK_MODEL_PATH" , "ANOMSTACK_TABLE_KEY" ]
@@ -23,35 +24,37 @@ def get_specs(metrics_dir: str = "./metrics"):
2324 Returns:
2425 dict: Dictionary of processed metric configurations.
2526 """
26- metrics_dir = Path (metrics_dir ).resolve ()
27- defaults_dir = metrics_dir / "defaults"
28- examples_dir = metrics_dir / "examples"
27+ logger = get_dagster_logger ()
28+ logger .info ("get_specs called" )
29+ metrics_dir_path = Path (metrics_dir ).resolve ()
30+ defaults_dir = metrics_dir_path / "defaults"
31+ examples_dir = metrics_dir_path / "examples"
2932 specs = {}
3033
3134 # Load defaults
32- defaults_file = defaults_dir / "defaults.yaml"
33- if not defaults_file .exists ():
35+ defaults_file = str ( defaults_dir / "defaults.yaml" )
36+ if not Path ( defaults_file ) .exists ():
3437 raise FileNotFoundError (f"Defaults file not found: { defaults_file } " )
3538 with open (defaults_file , "r" , encoding = "utf-8" ) as file :
3639 defaults = yaml .safe_load (file )
3740
3841 def process_yaml_file (yaml_file : str ):
42+ logger .info (f"process_yaml_file called for { yaml_file } " )
3943 with open (yaml_file , "r" , encoding = "utf-8" ) as f :
4044 metric_specs = yaml .safe_load (f )
4145 metric_batch = metric_specs ["metric_batch" ]
4246 merged_specs = {** defaults , ** metric_specs }
43- merged_specs ["metrics_dir" ] = str (metrics_dir )
47+ merged_specs ["metrics_dir" ] = str (metrics_dir_path )
4448 if merged_specs .get ("disable_batch" ):
4549 return
4650
4751 # Apply global environment variable overrides
4852 for env_var in env_vars :
4953 if env_var in os .environ :
5054 param_key = env_var .replace ("ANOMSTACK_" , "" ).lower ()
51- # Check if the parameter exists in either YAML file
5255 yaml_value = metric_specs .get (param_key ) or defaults .get (param_key )
53- # Always override with the environment variable value
5456 merged_specs [param_key ] = os .getenv (env_var )
57+ logger .info (f"ENV OVERRIDE: { env_var } replaces { param_key } (was: { yaml_value } , now: { merged_specs [param_key ]} )" )
5558
5659 # Apply metric batch-specific environment variable overrides
5760 # Pattern: ANOMSTACK__<METRIC_BATCH>__<PARAM>
@@ -61,13 +64,14 @@ def process_yaml_file(yaml_file: str):
6164 if env_var .startswith (f"ANOMSTACK__{ metric_batch_upper } __" ):
6265 # Extract the parameter name from the environment variable
6366 param_key = env_var .replace (f"ANOMSTACK__{ metric_batch_upper } __" , "" ).lower ()
64- # Do NOT convert underscores to hyphens; keep as is to match YAML keys
67+ old_value = merged_specs . get ( param_key , None )
6568 merged_specs [param_key ] = value
69+ logger .info (f"ENV BATCH OVERRIDE: { env_var } replaces { param_key } (was: { old_value } , now: { value } )" )
6670
6771 specs [metric_batch ] = merged_specs
6872
6973 # Walk through the metrics directory and process YAML files
70- for root , dirs , files in os .walk (metrics_dir ):
74+ for root , dirs , files in os .walk (str ( metrics_dir_path ) ):
7175 # Skip the examples directory if the environment variable is set
7276 if (
7377 os .getenv ("ANOMSTACK_IGNORE_EXAMPLES" ) == "yes"
@@ -78,7 +82,7 @@ def process_yaml_file(yaml_file: str):
7882 if yaml_file == "defaults.yaml" :
7983 continue
8084 if yaml_file .endswith (".yaml" ):
81- yaml_path = Path (root ) / yaml_file
85+ yaml_path = str ( Path (root ) / yaml_file )
8286 process_yaml_file (yaml_path )
8387
8488 return specs
0 commit comments