from dataclasses import dataclass from chartmetric_snowflake.chartmetric_handler.chartmetric_migrate import ChartmetricMigrate @dataclass class ChartmetricStatus(ChartmetricMigrate): def initialize_chartmetric_status(self, *args, **kwargs): """ Setup the workflow required to initiate Chartmetric Invoker """ super(ChartmetricStatus, self).initialize_chartmetric_migrate(*args, **kwargs) if self.process_to_bigtable: self.update_status_table() else: self.snowflake_utils.log(message=f"Nothing to update", _level="warning") self.threadpool.shutdown() return self def retrieve_schedule_value(self): try: schedule_value = self.snow_flake_instance.run_query( query=self.queries.get('schedule_value_query')) schedule_value = schedule_value.fetchall()[0]['SCHEDULE'] return schedule_value except Exception as e: self.snowflake_utils.log( message=f'Exception while retreiving schedule value: {e}', _level="error") raise e def update_status_table(self): schedule_value = self.retrieve_schedule_value() if not self.is_manual_run: for chartmetric_source in self.snowflake_source_table_names: _source = str(chartmetric_source).split('.')[2].split('_')[1] result = self.snow_flake_instance.run_query( query=self.snowflake_utils.generate_status_table_query( source=_source, schedule_value=schedule_value)) self.snowflake_utils.log( message=f"Status table updated for {_source}", _level="info") else: for chartmetric_source in self.source_list: _source = str(chartmetric_source).upper() result = self.snow_flake_instance.run_query( query=self.snowflake_utils.generate_status_table_query( source=_source, schedule_value=schedule_value, since=self.since, until=self.until)) self.snowflake_utils.log( message= f"Status table updated for {_source} {self.since} - {self.until}", _level="info")