import datetime import os import sys from dataclasses import dataclass sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from chartmetric_snowflake.chartmetric_handler import ChartmetricStatus @dataclass class SnowflakeToBigTable(ChartmetricStatus): def run_chartmetric(self, *args, **kwargs): """ Setup the workflow required to initiate Chartmetric Invoker """ try: super(SnowflakeToBigTable, self).initialize_chartmetric_status(*args, **kwargs) except Exception as e: self.snowflake_utils.log( message=f"Error running Chartmetric endpoint: {e}", _level="error") finally: end_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") time_delta_format = "%Y-%m-%d %H:%M:%S" time_delta = datetime.datetime.strptime( end_time, time_delta_format) - datetime.datetime.strptime( self.start_time, time_delta_format) self.snowflake_utils.log( message= f"Start time: {self.start_time}, End time: {end_time}, Total time: {time_delta}", _level="info") if self.snowflake_utils.exception_records: self.send_notifications_to_slack() def send_notifications_to_slack(self): try: self.snowflake_utils.notify_slack() except Exception as e: self.snowflake_utils.log( message=f"Error sending notification to: {e}", _level="error") if __name__ == "__main__": SnowflakeToBigTable().run_chartmetric()