Exemple #1
0
 def objective_func(self, values):
     try:
         self._check_interrupt()
         pipeline = self.init_pipeline(values)
         loss, report_df = self._fit_predict_loss(pipeline)
         return loss, report_df
     except Exception as e:
         simple_logger.exception(e)
         simple_logger.error(values)
         return 1.0, self._add_loss_and_time_to_report(0, 0)
Exemple #2
0
 def start_server(self):
     if self._reloader_thread is None:
         self._reloader_thread = Thread(target=self._model_reloading_loop)
         self._reloader_thread.start()
         if self._block_until_first_load:
             self._block_until_first_load_loop()
     else:
         logger.error(
             f'{self.__class__.__name__}: server already started, '
             f'to control reloading behavior user keep_reloading attribute.'
         )
Exemple #3
0
 def _decode_data(data, key):
     if data:
         try:
             data = gzip.decompress(data)
         except (OSError, TypeError):
             pass  # not gzip compressed
         try:
             data = json.loads(data)
         except Exception as e:
             logger.exception(e)
             logger.error(f'Failed unpacking redis query. key: {key}, response: {data}')
     return data
Exemple #4
0
 def _model_reloading_loop(self):
     time.sleep(self._time_jitter())
     while self.keep_reloading:
         try:
             new_model_s3_path = self._latest_s3_model_path()
             if new_model_s3_path == self._current_model_path:
                 logger.info('Model path unchanged, not reloading. %s' %
                             new_model_s3_path)
             else:
                 updated_model = S3FileIO(
                     self._s3_bucket).unpickle(new_model_s3_path)
                 self._test_loaded_model(updated_model)
                 self.model = updated_model
                 self._current_model_path = new_model_s3_path
                 logger.info('Loaded updated model from S3. %s' %
                             new_model_s3_path)
         except Exception as e:
             logger.error('Failed model update. %s' % str(e))
             logger.exception(e)
             if self.model is None:
                 raise EnvironmentError('Could not load model on startup.')
         time.sleep(self._update_interval_seconds + self._time_jitter())
Exemple #5
0
    def query(self, index_key, index_value):
        """
        example:
            table = RedisTable('p-bla-bla')
            result_dict = table.query('uuid', '1234')

        :returns response JSON as dict, None if not found, or response string if JSON conversion fails
        """
        key = self.table_index_key(index_key, index_value)
        data = self.get(key)
        if data:
            try:
                data = gzip.decompress(data)
            except (OSError, TypeError):
                pass  # not gzip compressed
            try:
                data = json.loads(data)
            except Exception as e:
                logger.exception(e)
                logger.error(
                    'Failed unpacking redis query. key: %s, response: %s' %
                    (key, data))
        return data
Exemple #6
0
    def _send_message(self, msg, to):
        to = [to] if isinstance(to, str) else to

        if self.backend == 'SMTP':
            s = smtplib.SMTP('localhost')
            s.sendmail(self.from_email, to, msg.as_string())
            s.quit()

        elif 'SES' in self.backend:
            # https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-raw.html
            client = boto3.client('ses', region_name=self._SES_region())
            try:
                client.send_raw_email(Source=self.from_email,
                                      Destinations=to,
                                      RawMessage={
                                          'Data': msg.as_string(),
                                      })
            # Display an error if something goes wrong.
            except ClientError as e:
                logger.error(e.response['Error']['Message'])
                raise e
        else:
            raise ValueError('Unknown email backend: %s' % self.backend)