diff --git a/data_diff/dbt.py b/data_diff/dbt.py index bf36c4fc..4583a273 100644 --- a/data_diff/dbt.py +++ b/data_diff/dbt.py @@ -1,5 +1,6 @@ from contextlib import nullcontext import json +import time import os import re import time @@ -113,7 +114,9 @@ def dbt_diff( dbt_parser.set_connection() with log_status_handler.status if log_status_handler else nullcontext(): + total_start_time = time.monotonic() for model in models: + start_time = time.monotonic() if log_status_handler: log_status_handler.set_prefix(f"Diffing {model.alias} \n") @@ -146,6 +149,8 @@ def dbt_diff( diff_threads.append(diff_thread) else: _local_diff(diff_vars, json_output) + if not is_cloud: + log_status_handler.stop_counter(start_time=start_time) else: if json_output: print( @@ -169,7 +174,10 @@ def dbt_diff( if diff_threads: for thread in diff_threads: thread.join() - + # TODO: update this to be a function instead + total_end_time = time.monotonic() + total_duration = total_end_time - total_start_time + rich.print(f"[blue][bold]Total Diff Time: {total_duration:.2f}s") _extension_notification() @@ -469,11 +477,15 @@ def _cloud_diff( diff_percent_list, "Value Match Percent:", ) - diff_output_str += f"\n{diff_url}\n {diff_output} \n" + diff_output_str += f"\n{diff_url}\n {diff_output}" rich.print(diff_output_str) + if log_status_handler: + log_status_handler.stop_counter(start_time=start) else: - diff_output_str += f"\n{diff_url}\n{no_differences_template()}\n" + diff_output_str += f"\n{diff_url}\n{no_differences_template()}" rich.print(diff_output_str) + if log_status_handler: + log_status_handler.stop_counter(start_time=start) if log_status_handler: log_status_handler.cloud_diff_finished(diff_vars.dev_path[-1]) diff --git a/data_diff/utils.py b/data_diff/utils.py index ee4a0f17..6bd0c946 100644 --- a/data_diff/utils.py +++ b/data_diff/utils.py @@ -1,4 +1,5 @@ import json +import time import logging import math import re @@ -455,7 +456,7 @@ def columns_type_changed_template(columns_type_changed) -> str: def no_differences_template() -> str: - return "[bold][green]No row differences[/][/]\n" + return "[bold][green]No row differences[/][/]" def print_version_info() -> None: @@ -485,6 +486,7 @@ def __init__(self): super().__init__() self.status = Status("") self.prefix = "" + self.diff_time = "" self.cloud_diff_status = {} def emit(self, record): @@ -497,6 +499,12 @@ def emit(self, record): def set_prefix(self, prefix_string): self.prefix = prefix_string + def stop_counter(self, start_time): + end_time = time.monotonic() + duration = end_time - start_time + self.diff_time = f"diff time: {duration:.2f}s" + print(self.diff_time) + def cloud_diff_started(self, model_name): self.cloud_diff_status[model_name] = "[yellow]In Progress[/]" self._update_cloud_status()