feat:ログ出力や、Salesforceの接続リトライを主とした機能修正

This commit is contained in:
Y_SAKAI 2022-07-21 10:01:24 +09:00
parent a7426900b7
commit 3b5b0dc33c
20 changed files with 214 additions and 192 deletions

19
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,19 @@
{
// IntelliSense 使
//
// : https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: CRMデータ取得ローカル実行",
"type": "python",
"request": "launch",
// windows\
"program": "ecs\\crm-datafetch\\main.py",
"console": "integratedTerminal",
"justMyCode": true,
"envFile": "${workspaceFolder}/.env",
"args": ["local"]
}
]
}

View File

@ -6,6 +6,7 @@ from src.environments import (
IMPORT_DATA_BUCKET, IMPORT_DATA_BUCKET,
OBJECT_INFO_FOLDER, OBJECT_INFO_FOLDER,
OBJECT_INFO_FILENAME, OBJECT_INFO_FILENAME,
PROCESS_RESULT_FOLDER,
CRM_IMPORT_DATA_FOLDER, CRM_IMPORT_DATA_FOLDER,
CRM_IMPORT_DATA_BACKUP_FOLDER, CRM_IMPORT_DATA_BACKUP_FOLDER,
LAST_FETCH_DATE_FOLDER, LAST_FETCH_DATE_FOLDER,
@ -49,7 +50,7 @@ class S3ResourceNonBucket:
def __init__(self) -> None: def __init__(self) -> None:
self.__s3_resource = boto3.resource(AWS_RESOURCE_S3) self.__s3_resource = boto3.resource(AWS_RESOURCE_S3)
def copy(self, src_bucket, src_key, dest_bucket, dest_key): def copy(self, src_bucket, src_key, dest_bucket, dest_key) -> None:
copy_source = {'Bucket': src_bucket, 'Key': src_key} copy_source = {'Bucket': src_bucket, 'Key': src_key}
self.__s3_resource.meta.client.copy(copy_source, dest_bucket, dest_key) self.__s3_resource.meta.client.copy(copy_source, dest_bucket, dest_key)
@ -62,13 +63,13 @@ class ConfigBucket:
def __init__(self) -> None: def __init__(self) -> None:
self.__s3_resource = S3Resource(CRM_CONFIG_BUCKET) self.__s3_resource = S3Resource(CRM_CONFIG_BUCKET)
def get_object_info_file(self): def get_object_info_file(self) -> str:
return self.__s3_resource.get_object(f'{OBJECT_INFO_FOLDER}/{OBJECT_INFO_FILENAME}') return self.__s3_resource.get_object(f'{OBJECT_INFO_FOLDER}/{OBJECT_INFO_FILENAME}')
def get_last_fetch_datetime_file(self, file_name): def get_last_fetch_datetime_file(self, file_name) -> str:
return self.__s3_resource.get_object(f'{LAST_FETCH_DATE_FOLDER}/{file_name}') return self.__s3_resource.get_object(f'{LAST_FETCH_DATE_FOLDER}/{file_name}')
def put_last_fetch_datetime_file(self, file_name, data): def put_last_fetch_datetime_file(self, file_name, data) -> None:
self.__s3_resource.put_object( self.__s3_resource.put_object(
f'{LAST_FETCH_DATE_FOLDER}/{file_name}', data) f'{LAST_FETCH_DATE_FOLDER}/{file_name}', data)
return return
@ -80,7 +81,7 @@ class DataBucket:
def __init__(self) -> None: def __init__(self) -> None:
self.__s3_resource = S3Resource(IMPORT_DATA_BUCKET) self.__s3_resource = S3Resource(IMPORT_DATA_BUCKET)
def put_csv(self, file_name, data): def put_csv(self, file_name, data) -> None:
object_key = f'{CRM_IMPORT_DATA_FOLDER}/{file_name}' object_key = f'{CRM_IMPORT_DATA_FOLDER}/{file_name}'
self.__s3_resource.put_object(object_key, data) self.__s3_resource.put_object(object_key, data)
return return
@ -92,16 +93,16 @@ class BackupBucket:
def __init__(self) -> None: def __init__(self) -> None:
self.__s3_resource = S3Resource(CRM_BACKUP_BUCKET) self.__s3_resource = S3Resource(CRM_BACKUP_BUCKET)
def put_response_json(self, file_name, data): def put_response_json(self, file_name, data) -> None:
object_key = f'{RESPONSE_JSON_BACKUP_FOLDER}/{file_name}' object_key = f'{RESPONSE_JSON_BACKUP_FOLDER}/{file_name}'
self.__s3_resource.put_object(object_key, json.dumps(data)) self.__s3_resource.put_object(object_key, json.dumps(data))
return return
def put_csv_bk(self, file_name, data): def put_csv_bk(self, file_name, data) -> None:
object_key = f'{CRM_IMPORT_DATA_BACKUP_FOLDER}/{file_name}' object_key = f'{CRM_IMPORT_DATA_BACKUP_FOLDER}/{file_name}'
self.__s3_resource.put_object(object_key, data) self.__s3_resource.put_object(object_key, data)
return return
def put_result_json(self, file_name, data): def put_result_json(self, file_name, data) -> None:
object_key = f'{RESPONSE_JSON_BACKUP_FOLDER}/{file_name}' object_key = f'{PROCESS_RESULT_FOLDER}/{file_name}'
self.__s3_resource.put_object(object_key, json.dumps(data)) self.__s3_resource.put_object(object_key, json.dumps(data))

View File

@ -1,4 +1,4 @@
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.constants import( from src.constants import(
CHK_JP_NAME CHK_JP_NAME
) )
@ -8,9 +8,6 @@ from src.error.exceptions import(
from src.config.objects import TargetObject from src.config.objects import TargetObject
logger = Logger().get_logger()
def check_object_info(object_info, execute_datetime): def check_object_info(object_info, execute_datetime):
# ① オブジェクト情報形式チェック処理開始ログを出力する # ① オブジェクト情報形式チェック処理開始ログを出力する
logger.info('I-CHK-01 オブジェクト情報形式チェック処理を開始します') logger.info('I-CHK-01 オブジェクト情報形式チェック処理を開始します')

View File

View File

@ -1,38 +1,38 @@
# environments(task settings file) # environments(task settings file)
LOG_LEVEL = "LOG_LEVEL" # ログ出力レベル。DEBUG, INFO, WARNING, ERRORの4つから指定する LOG_LEVEL = "LOG_LEVEL" # ログ出力レベル。DEBUG, INFO, WARNING, ERRORの4つから指定する
CRM_AUTH_TIMEOUT = 'CRM_AUTH_TIMEOUT' # CRMへの認証処理のタイムアウト秒数 CRM_AUTH_TIMEOUT = 'CRM_AUTH_TIMEOUT' # CRMへの認証処理のタイムアウト秒数
CRM_AUTH_MAX_RETRY_ATTEMPT = 'CRM_AUTH_MAX_RETRY_ATTEMPT' # CRMへの認証処理の最大リトライ試行回数 CRM_AUTH_MAX_RETRY_ATTEMPT = 'CRM_AUTH_MAX_RETRY_ATTEMPT' # CRMへの認証処理の最大リトライ試行回数
CRM_AUTH_RETRY_INTERVAL = 'CRM_AUTH_RETRY_INTERVAL' # CRMへの認証処理のリトライ時の初回待ち秒数 CRM_AUTH_RETRY_INTERVAL = 'CRM_AUTH_RETRY_INTERVAL' # CRMへの認証処理のリトライ時の初回待ち秒数
CRM_AUTH_RETRY_MIN_INTERVAL = 'CRM_AUTH_RETRY_MIN_INTERVAL' # CRMへの認証処理のリトライ時の最小待ち秒数 CRM_AUTH_RETRY_MIN_INTERVAL = 'CRM_AUTH_RETRY_MIN_INTERVAL' # CRMへの認証処理のリトライ時の最小待ち秒数
CRM_AUTH_RETRY_MAX_INTERVAL = 'CRM_AUTH_RETRY_MAX_INTERVAL' # CRMへの認証処理のリトライ時の最大待ち秒数 CRM_AUTH_RETRY_MAX_INTERVAL = 'CRM_AUTH_RETRY_MAX_INTERVAL' # CRMへの認証処理のリトライ時の最大待ち秒数
CRM_GET_RECORD_COUNT_TIMEOUT = 'CRM_GET_RECORD_COUNT_TIMEOUT' # CRMのレコード件数取得処理のタイムアウト秒数 CRM_GET_RECORD_COUNT_TIMEOUT = 'CRM_GET_RECORD_COUNT_TIMEOUT' # CRMのレコード件数取得処理のタイムアウト秒数
CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = 'CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT' # CRMのレコード件数取得処理の最大リトライ試行回数 CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = 'CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT' # CRMのレコード件数取得処理の最大リトライ試行回数
CRM_GET_RECORD_COUNT_RETRY_INTERVAL = 'CRM_GET_RECORD_COUNT_RETRY_INTERVAL' # CRMのレコード件数取得処理のリトライ時の初回待ち秒数 CRM_GET_RECORD_COUNT_RETRY_INTERVAL = 'CRM_GET_RECORD_COUNT_RETRY_INTERVAL' # CRMのレコード件数取得処理のリトライ時の初回待ち秒数
CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL = 'CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL' # CRMのレコード件数取得処理のリトライ時の最小待ち秒数 CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL = 'CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL' # CRMのレコード件数取得処理のリトライ時の最小待ち秒数
CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL = 'CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL' # CRMのレコード件数取得処理のリトライ時の最大待ち秒数 CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL = 'CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL' # CRMのレコード件数取得処理のリトライ時の最大待ち秒数
CRM_FETCH_RECORD_TIMEOUT = 'CRM_FETCH_RECORD_TIMEOUT' # CRMのレコード取得処理のタイムアウト秒数 CRM_FETCH_RECORD_TIMEOUT = 'CRM_FETCH_RECORD_TIMEOUT' # CRMのレコード取得処理のタイムアウト秒数
CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = 'CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT' # CRMのレコード取得処理の最大リトライ試行回数 CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = 'CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT' # CRMのレコード取得処理の最大リトライ試行回数
CRM_FETCH_RECORD_RETRY_INTERVAL = 'CRM_FETCH_RECORD_RETRY_INTERVAL' # CRMのレコード取得処理のリトライ時の初回待ち秒数 CRM_FETCH_RECORD_RETRY_INTERVAL = 'CRM_FETCH_RECORD_RETRY_INTERVAL' # CRMのレコード取得処理のリトライ時の初回待ち秒数
CRM_FETCH_RECORD_RETRY_MIN_INTERVAL = 'CRM_FETCH_RECORD_RETRY_MIN_INTERVAL' # CRMのレコード取得処理のリトライ時の最小待ち秒数 CRM_FETCH_RECORD_RETRY_MIN_INTERVAL = 'CRM_FETCH_RECORD_RETRY_MIN_INTERVAL' # CRMのレコード取得処理のリトライ時の最小待ち秒数
CRM_FETCH_RECORD_RETRY_MAX_INTERVAL = 'CRM_FETCH_RECORD_RETRY_MAX_INTERVAL' # CRMのレコード取得処理のリトライ時の最大待ち秒数 CRM_FETCH_RECORD_RETRY_MAX_INTERVAL = 'CRM_FETCH_RECORD_RETRY_MAX_INTERVAL' # CRMのレコード取得処理のリトライ時の最大待ち秒数
# environments(ECS Task Enviroment) # environments(ECS Task Enviroment)
CRM_AUTH_DOMAIN = 'CRM_AUTH_DOMAIN' # CRMのAPI実行のための認証エンドポイントのドメイン CRM_AUTH_DOMAIN = 'CRM_AUTH_DOMAIN' # CRMのAPI実行のための認証エンドポイントのドメイン
CRM_USER_NAME = 'CRM_USER_NAME' # CRMのAPI実行用ユーザ名 CRM_USER_NAME = 'CRM_USER_NAME' # CRMのAPI実行用ユーザ名
CRM_USER_PASSWORD = 'CRM_USER_PASSWORD' # CRMのAPI実行用ユーザパスワード CRM_USER_PASSWORD = 'CRM_USER_PASSWORD' # CRMのAPI実行用ユーザパスワード
CRM_USER_SECURITY_TOKEN = 'CRM_USER_SECURITY_TOKEN' # CRMのAPI実行用ユーザのセキュリティトークン CRM_USER_SECURITY_TOKEN = 'CRM_USER_SECURITY_TOKEN' # CRMのAPI実行用ユーザのセキュリティトークン
CRM_CONFIG_BUCKET = 'CRM_CONFIG_BUCKET' # CRMデータ取得用の設定ファイルを格納するバケット名 CRM_CONFIG_BUCKET = 'CRM_CONFIG_BUCKET' # CRMデータ取得用の設定ファイルを格納するバケット名
CRM_BACKUP_BUCKET = 'CRM_BACKUP_BUCKET' # CRMのバックアップデータを格納するバケット名 CRM_BACKUP_BUCKET = 'CRM_BACKUP_BUCKET' # CRMのバックアップデータを格納するバケット名
IMPORT_DATA_BUCKET = 'IMPORT_DATA_BUCKET' # CRMの取込データを格納するバケット名 IMPORT_DATA_BUCKET = 'IMPORT_DATA_BUCKET' # CRMの取込データを格納するバケット名
OBJECT_INFO_FOLDER = 'OBJECT_INFO_FOLDER' # CRM取得対象オブジェクトの情報を格納するフォルダパス OBJECT_INFO_FOLDER = 'OBJECT_INFO_FOLDER' # CRM取得対象オブジェクトの情報を格納するフォルダパス
OBJECT_INFO_FILENAME = 'OBJECT_INFO_FILENAME' # CRM取得対象オブジェクトの情報のファイル名 OBJECT_INFO_FILENAME = 'OBJECT_INFO_FILENAME' # CRM取得対象オブジェクトの情報のファイル名
PROCESS_RESULT_FOLDER = 'PROCESS_RESULT_FOLDER' # CRMデータ取得結果を格納するフォルダパス PROCESS_RESULT_FOLDER = 'PROCESS_RESULT_FOLDER' # CRMデータ取得結果を格納するフォルダパス
PROCESS_RESULT_FILENAME = 'PROCESS_RESULT_FILENAME' # CRMデータ取得結果を格納するファイル名 PROCESS_RESULT_FILENAME = 'PROCESS_RESULT_FILENAME' # CRMデータ取得結果を格納するファイル名
LAST_FETCH_DATE_FOLDER = 'LAST_FETCH_DATE_FOLDER' # CRMからの最終取得日時ファイルを格納するフォルダパス LAST_FETCH_DATE_FOLDER = 'LAST_FETCH_DATE_FOLDER' # CRMからの最終取得日時ファイルを格納するフォルダパス
CRM_IMPORT_DATA_FOLDER ='CRM_IMPORT_DATA_FOLDER' # CRMから取得し、取込用に変換したデータを格納するフォルダ CRM_IMPORT_DATA_FOLDER = 'CRM_IMPORT_DATA_FOLDER' # CRMから取得し、取込用に変換したデータを格納するフォルダ
LAST_FETCH_DATE_BACKUP_FOLDER = 'LAST_FETCH_DATE_BACKUP_FOLDER' # CRMからの最終取得日時ファイルのバックアップを格納するフォルダパス LAST_FETCH_DATE_BACKUP_FOLDER = 'LAST_FETCH_DATE_BACKUP_FOLDER' # CRMからの最終取得日時ファイルのバックアップを格納するフォルダパス
RESPONSE_JSON_BACKUP_FOLDER = 'RESPONSE_JSON_BACKUP_FOLDER' # CRMから取得した生データのバックアップを格納するフォルダパス RESPONSE_JSON_BACKUP_FOLDER = 'RESPONSE_JSON_BACKUP_FOLDER' # CRMから取得した生データのバックアップを格納するフォルダパス
CRM_IMPORT_DATA_BACKUP_FOLDER = 'CRM_IMPORT_DATA_BACKUP_FOLDER' # CRMから取得し、取込用に変換したデータのバックアップを格納するフォルダ CRM_IMPORT_DATA_BACKUP_FOLDER = 'CRM_IMPORT_DATA_BACKUP_FOLDER' # CRMから取得し、取込用に変換したデータのバックアップを格納するフォルダ
# 時刻フォーマット # 時刻フォーマット
# .000ZはUTCを表す。ミリ秒までの考慮は不要なので固定で指定 # .000ZはUTCを表す。ミリ秒までの考慮は不要なので固定で指定

View File

@ -1,5 +1,5 @@
from datetime import datetime from datetime import datetime
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.constants import ( from src.constants import (
CONV_JP_NAME, CONV_JP_NAME,
) )
@ -9,9 +9,6 @@ from src.error.exceptions import(
from src.converter.converter import CSVStringConverter from src.converter.converter import CSVStringConverter
logger = Logger().get_logger()
def convert_crm_csvdata(target_object, sf_object_jsons): def convert_crm_csvdata(target_object, sf_object_jsons):
# ① CSV変換処理の開始ログを出力する # ① CSV変換処理の開始ログを出力する
logger.info(f'I-CONV-01 [{target_object.object_name}] のCSV変換処理を開始します') logger.info(f'I-CONV-01 [{target_object.object_name}] のCSV変換処理を開始します')

View File

@ -1,4 +1,4 @@
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.aws.s3 import BackupBucket from src.aws.s3 import BackupBucket
from src.constants import ( from src.constants import (
CSVBK_JP_NAME CSVBK_JP_NAME
@ -8,9 +8,6 @@ from src.error.exceptions import(
) )
logger = Logger().get_logger()
def backup_crm_csvdata(target_object, date_path, csv_object): def backup_crm_csvdata(target_object, date_path, csv_object):
# ① CSVバックアップ処理の開始ログを出力する # ① CSVバックアップ処理の開始ログを出力する
logger.info( logger.info(
@ -22,6 +19,9 @@ def backup_crm_csvdata(target_object, date_path, csv_object):
backup_bucket.put_csv_bk( backup_bucket.put_csv_bk(
f'{date_path}/{target_object.upload_file_name}.csv', csv_object.csv_buffer) f'{date_path}/{target_object.upload_file_name}.csv', csv_object.csv_buffer)
logger.debug(
f'D-CSVBK-02 [{target_object.object_name}] のCSVデータバックアップ 正常終了')
except Exception as e: except Exception as e:
raise FileUploadException( raise FileUploadException(
'E-CSVBK-01', CSVBK_JP_NAME, f'[{target_object.object_name}] CSVデータのバックアップに失敗しました ファイル名:[{target_object.upload_file_name}.csv] エラー内容:[{e}]') 'E-CSVBK-01', CSVBK_JP_NAME, f'[{target_object.object_name}] CSVデータのバックアップに失敗しました ファイル名:[{target_object.upload_file_name}.csv] エラー内容:[{e}]')

View File

@ -1,4 +1,4 @@
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.constants import( from src.constants import(
DATE_JP_NAME DATE_JP_NAME
) )
@ -15,9 +15,6 @@ from src.config.objects import LastFetchDatetime
from src.aws.s3 import ConfigBucket from src.aws.s3 import ConfigBucket
logger = Logger().get_logger()
def set_datetime_period(target_object, execute_datetime): def set_datetime_period(target_object, execute_datetime):
# ① データ取得期間設定処理の開始ログを出力する # ① データ取得期間設定処理の開始ログを出力する
logger.info( logger.info(

View File

@ -1,4 +1,4 @@
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.constants import ( from src.constants import (
END_JP_NAME END_JP_NAME
) )
@ -11,9 +11,6 @@ from src.error.exceptions import(
from src.aws.s3 import BackupBucket from src.aws.s3 import BackupBucket
logger = Logger().get_logger()
def updload_result_data(process_result, date_path): def updload_result_data(process_result, date_path):
# ① 取得処理実施結果アップロード処理のログを出力する # ① 取得処理実施結果アップロード処理のログを出力する
logger.info( logger.info(

View File

@ -1,73 +1,38 @@
import os import os
import src.constants as constants
from src.constants import (
LOG_LEVEL,
LOG_LEVEL_INFO,
CRM_AUTH_TIMEOUT,
CRM_AUTH_MAX_RETRY_ATTEMPT,
CRM_AUTH_RETRY_INTERVAL,
CRM_AUTH_RETRY_MIN_INTERVAL,
CRM_AUTH_RETRY_MAX_INTERVAL,
CRM_GET_RECORD_COUNT_TIMEOUT,
CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT,
CRM_GET_RECORD_COUNT_RETRY_INTERVAL,
CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL,
CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL,
CRM_FETCH_RECORD_TIMEOUT,
CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT,
CRM_FETCH_RECORD_RETRY_INTERVAL,
CRM_FETCH_RECORD_RETRY_MIN_INTERVAL,
CRM_FETCH_RECORD_RETRY_MAX_INTERVAL,
CRM_AUTH_DOMAIN,
CRM_USER_NAME,
CRM_USER_PASSWORD,
CRM_USER_SECURITY_TOKEN,
CRM_CONFIG_BUCKET,
CRM_BACKUP_BUCKET,
IMPORT_DATA_BUCKET,
OBJECT_INFO_FOLDER,
OBJECT_INFO_FILENAME,
PROCESS_RESULT_FOLDER,
PROCESS_RESULT_FILENAME,
LAST_FETCH_DATE_FOLDER,
CRM_IMPORT_DATA_FOLDER,
LAST_FETCH_DATE_BACKUP_FOLDER,
RESPONSE_JSON_BACKUP_FOLDER,
CRM_IMPORT_DATA_BACKUP_FOLDER
)
# environments(task settings file) # environments(task settings file)
LOG_LEVEL = os.environ.get(LOG_LEVEL, LOG_LEVEL_INFO) # ログ出力レベル。DEBUG, INFO, WARNING, ERRORの4つから指定する LOG_LEVEL = os.environ.get(constants.LOG_LEVEL, constants.LOG_LEVEL_INFO) # ログ出力レベル。DEBUG, INFO, WARNING, ERRORの4つから指定する
CRM_AUTH_TIMEOUT = os.environ["CRM_AUTH_TIMEOUT"] # CRMへの認証処理のタイムアウト秒数 CRM_AUTH_TIMEOUT = os.environ[constants.CRM_AUTH_TIMEOUT] # CRMへの認証処理のタイムアウト秒数
CRM_AUTH_MAX_RETRY_ATTEMPT = os.environ["CRM_AUTH_MAX_RETRY_ATTEMPT"] # CRMへの認証処理の最大リトライ試行回数 CRM_AUTH_MAX_RETRY_ATTEMPT = os.environ[constants.CRM_AUTH_MAX_RETRY_ATTEMPT] # CRMへの認証処理の最大リトライ試行回数
CRM_AUTH_RETRY_INTERVAL = os.environ["CRM_AUTH_RETRY_INTERVAL"] # CRMへの認証処理のリトライ時の初回待ち秒数 CRM_AUTH_RETRY_INTERVAL = os.environ[constants.CRM_AUTH_RETRY_INTERVAL] # CRMへの認証処理のリトライ時の初回待ち秒数
CRM_AUTH_RETRY_MIN_INTERVAL = os.environ["CRM_AUTH_RETRY_MIN_INTERVAL"] # CRMへの認証処理のリトライ時の最小待ち秒数 CRM_AUTH_RETRY_MIN_INTERVAL = os.environ[constants.CRM_AUTH_RETRY_MIN_INTERVAL] # CRMへの認証処理のリトライ時の最小待ち秒数
CRM_AUTH_RETRY_MAX_INTERVAL = os.environ["CRM_AUTH_RETRY_MAX_INTERVAL"] # CRMへの認証処理のリトライ時の最大待ち秒数 CRM_AUTH_RETRY_MAX_INTERVAL = os.environ[constants.CRM_AUTH_RETRY_MAX_INTERVAL] # CRMへの認証処理のリトライ時の最大待ち秒数
CRM_GET_RECORD_COUNT_TIMEOUT = os.environ["CRM_GET_RECORD_COUNT_TIMEOUT"] # CRMのレコード件数取得処理のタイムアウト秒数 CRM_GET_RECORD_COUNT_TIMEOUT = os.environ[constants.CRM_GET_RECORD_COUNT_TIMEOUT] # CRMのレコード件数取得処理のタイムアウト秒数
CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = os.environ["CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT"] # CRMのレコード件数取得処理の最大リトライ試行回数 CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = os.environ[constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT] # CRMのレコード件数取得処理の最大リトライ試行回数
CRM_GET_RECORD_COUNT_RETRY_INTERVAL = os.environ["CRM_GET_RECORD_COUNT_RETRY_INTERVAL"] # CRMのレコード件数取得処理のリトライ時の初回待ち秒数 CRM_GET_RECORD_COUNT_RETRY_INTERVAL = os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_INTERVAL] # CRMのレコード件数取得処理のリトライ時の初回待ち秒数
CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL = os.environ["CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL"] # CRMのレコード件数取得処理のリトライ時の最小待ち秒数 CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL = os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL] # CRMのレコード件数取得処理のリトライ時の最小待ち秒数
CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL = os.environ["CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL"] # CRMのレコード件数取得処理のリトライ時の最大待ち秒数 CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL = os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL] # CRMのレコード件数取得処理のリトライ時の最大待ち秒数
CRM_FETCH_RECORD_TIMEOUT = os.environ["CRM_FETCH_RECORD_TIMEOUT"] # CRMのレコード取得処理のタイムアウト秒数 CRM_FETCH_RECORD_TIMEOUT = os.environ[constants.CRM_FETCH_RECORD_TIMEOUT] # CRMのレコード取得処理のタイムアウト秒数
CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = os.environ["CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT"] # CRMのレコード取得処理の最大リトライ試行回数 CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = os.environ[constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT] # CRMのレコード取得処理の最大リトライ試行回数
CRM_FETCH_RECORD_RETRY_INTERVAL = os.environ["CRM_FETCH_RECORD_RETRY_INTERVAL"] # CRMのレコード取得処理のリトライ時の初回待ち秒数 CRM_FETCH_RECORD_RETRY_INTERVAL = os.environ[constants.CRM_FETCH_RECORD_RETRY_INTERVAL] # CRMのレコード取得処理のリトライ時の初回待ち秒数
CRM_FETCH_RECORD_RETRY_MIN_INTERVAL = os.environ["CRM_FETCH_RECORD_RETRY_MIN_INTERVAL"] # CRMのレコード取得処理のリトライ時の最小待ち秒数 CRM_FETCH_RECORD_RETRY_MIN_INTERVAL = os.environ[constants.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL] # CRMのレコード取得処理のリトライ時の最小待ち秒数
CRM_FETCH_RECORD_RETRY_MAX_INTERVAL = os.environ["CRM_FETCH_RECORD_RETRY_MAX_INTERVAL"] # CRMのレコード取得処理のリトライ時の最大待ち秒数 CRM_FETCH_RECORD_RETRY_MAX_INTERVAL = os.environ[constants.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL] # CRMのレコード取得処理のリトライ時の最大待ち秒数
# environments(ECS Task Enviroment) # environments(ECS Task Enviroment)
CRM_AUTH_DOMAIN = os.environ["CRM_AUTH_DOMAIN"] # CRMのAPI実行のための認証エンドポイントのドメイン CRM_AUTH_DOMAIN = os.environ[constants.CRM_AUTH_DOMAIN] # CRMのAPI実行のための認証エンドポイントのドメイン
CRM_USER_NAME = os.environ["CRM_USER_NAME"] # CRMのAPI実行用ユーザ名 CRM_USER_NAME = os.environ[constants.CRM_USER_NAME] # CRMのAPI実行用ユーザ名
CRM_USER_PASSWORD = os.environ["CRM_USER_PASSWORD"] # CRMのAPI実行用ユーザパスワード CRM_USER_PASSWORD = os.environ[constants.CRM_USER_PASSWORD] # CRMのAPI実行用ユーザパスワード
CRM_USER_SECURITY_TOKEN = os.environ["CRM_USER_SECURITY_TOKEN"] # CRMのAPI実行用ユーザのセキュリティトークン CRM_USER_SECURITY_TOKEN = os.environ[constants.CRM_USER_SECURITY_TOKEN] # CRMのAPI実行用ユーザのセキュリティトークン
CRM_CONFIG_BUCKET = os.environ["CRM_CONFIG_BUCKET"] # CRMデータ取得用の設定ファイルを格納するバケット名 CRM_CONFIG_BUCKET = os.environ[constants.CRM_CONFIG_BUCKET] # CRMデータ取得用の設定ファイルを格納するバケット名
CRM_BACKUP_BUCKET = os.environ["CRM_BACKUP_BUCKET"] # CRMのバックアップデータを格納するバケット名 CRM_BACKUP_BUCKET = os.environ[constants.CRM_BACKUP_BUCKET] # CRMのバックアップデータを格納するバケット名
IMPORT_DATA_BUCKET = os.environ["IMPORT_DATA_BUCKET"] # CRMの取込データを格納するバケット名 IMPORT_DATA_BUCKET = os.environ[constants.IMPORT_DATA_BUCKET] # CRMの取込データを格納するバケット名
OBJECT_INFO_FOLDER = os.environ["OBJECT_INFO_FOLDER"] # CRM取得対象オブジェクトの情報を格納するフォルダパス OBJECT_INFO_FOLDER = os.environ[constants.OBJECT_INFO_FOLDER] # CRM取得対象オブジェクトの情報を格納するフォルダパス
OBJECT_INFO_FILENAME = os.environ["OBJECT_INFO_FILENAME"] # CRM取得対象オブジェクトの情報のファイル名 OBJECT_INFO_FILENAME = os.environ[constants.OBJECT_INFO_FILENAME] # CRM取得対象オブジェクトの情報のファイル名
PROCESS_RESULT_FOLDER = os.environ["PROCESS_RESULT_FOLDER"] # CRMデータ取得結果を格納するフォルダパス PROCESS_RESULT_FOLDER = os.environ[constants.PROCESS_RESULT_FOLDER] # CRMデータ取得結果を格納するフォルダパス
PROCESS_RESULT_FILENAME = os.environ["PROCESS_RESULT_FILENAME"] # CRMデータ取得結果を格納するファイル名 PROCESS_RESULT_FILENAME = os.environ[constants.PROCESS_RESULT_FILENAME] # CRMデータ取得結果を格納するファイル名
LAST_FETCH_DATE_FOLDER = os.environ["LAST_FETCH_DATE_FOLDER"] # CRMからの最終取得日時ファイルを格納するフォルダパス LAST_FETCH_DATE_FOLDER = os.environ[constants.LAST_FETCH_DATE_FOLDER] # CRMからの最終取得日時ファイルを格納するフォルダパス
CRM_IMPORT_DATA_FOLDER = os.environ["CRM_IMPORT_DATA_FOLDER"] # CRMから取得し、取込用に変換したデータを格納するフォルダ CRM_IMPORT_DATA_FOLDER = os.environ[constants.CRM_IMPORT_DATA_FOLDER] # CRMから取得し、取込用に変換したデータを格納するフォルダ
LAST_FETCH_DATE_BACKUP_FOLDER = os.environ["LAST_FETCH_DATE_BACKUP_FOLDER"] # CRMからの最終取得日時ファイルのバックアップを格納するフォルダパス LAST_FETCH_DATE_BACKUP_FOLDER = os.environ[constants.LAST_FETCH_DATE_BACKUP_FOLDER] # CRMからの最終取得日時ファイルのバックアップを格納するフォルダパス
RESPONSE_JSON_BACKUP_FOLDER = os.environ["FETCH_DATA_BACKUP_FOLDER"] # CRMから取得した生データのバックアップを格納するフォルダパス RESPONSE_JSON_BACKUP_FOLDER = os.environ[constants.RESPONSE_JSON_BACKUP_FOLDER] # CRMから取得した生データのバックアップを格納するフォルダパス
CRM_IMPORT_DATA_BACKUP_FOLDER = os.environ["CRM_IMPORT_DATA_BACKUP_FOLDER"] # CRMから取得し、取込用に変換したデータのバックアップを格納するフォルダ CRM_IMPORT_DATA_BACKUP_FOLDER = os.environ[constants.CRM_IMPORT_DATA_BACKUP_FOLDER] # CRMから取得し、取込用に変換したデータのバックアップを格納するフォルダ

View File

@ -30,16 +30,6 @@ class DataConvertException(MeDaCaCRMDataFetchException):
pass pass
class TimeOutException(MeDaCaCRMDataFetchException):
"""タイムアウトが発生した場合の例外"""
pass
class RetryExceededException(MeDaCaCRMDataFetchException):
"""リトライ処理が発生した場合の例外"""
pass
class SalesforceAPIException(MeDaCaCRMDataFetchException): class SalesforceAPIException(MeDaCaCRMDataFetchException):
"""SalseforceのAPI実行失敗が発生した場合の例外""" """SalseforceのAPI実行失敗が発生した場合の例外"""
pass pass

View File

@ -1,7 +1,23 @@
from src.util.logger import Logger from requests.exceptions import ConnectTimeout, ReadTimeout
from tenacity import retry, stop_after_attempt
from tenacity.wait import wait_exponential
from src.util.logger import logger_instance as logger
from src.constants import( from src.constants import(
FETCH_JP_NAME FETCH_JP_NAME
) )
from src.environments import(
CRM_AUTH_TIMEOUT,
CRM_GET_RECORD_COUNT_TIMEOUT,
CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT,
CRM_GET_RECORD_COUNT_RETRY_INTERVAL,
CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL,
CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL,
CRM_FETCH_RECORD_TIMEOUT,
CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT,
CRM_FETCH_RECORD_RETRY_INTERVAL,
CRM_FETCH_RECORD_RETRY_MIN_INTERVAL,
CRM_FETCH_RECORD_RETRY_MAX_INTERVAL
)
from src.error.exceptions import( from src.error.exceptions import(
SalesforceAPIException, SalesforceAPIException,
DataConvertException DataConvertException
@ -12,9 +28,6 @@ from src.salesforce.salesforce_api import(
) )
logger = Logger().get_logger()
def fetch_crm_data(target_object, last_fetch_datetime): def fetch_crm_data(target_object, last_fetch_datetime):
# ① CRMデータ取得処理開始ログを出力する # ① CRMデータ取得処理開始ログを出力する
logger.info( logger.info(
@ -25,31 +38,37 @@ def fetch_crm_data(target_object, last_fetch_datetime):
last_fetch_datetime_from = last_fetch_datetime.last_fetch_datetime_from last_fetch_datetime_from = last_fetch_datetime.last_fetch_datetime_from
last_fetch_datetime_to = last_fetch_datetime.last_fetch_datetime_to last_fetch_datetime_to = last_fetch_datetime.last_fetch_datetime_to
global count_contime_counter, count_readtime_counter, count_counter, data_contime_counter, data_readtime_counter, data_counter
count_contime_counter = 1
count_readtime_counter = 1
count_counter = 1
data_contime_counter = 1
data_readtime_counter = 1
data_counter = 1
try: try:
# ② 取得対象オブジェクトの取得期間内のレコード件数を取得する # ② 取得対象オブジェクトの取得期間内のレコード件数を取得する
logger.info(f'I-FETCH-02 [{object_name}] の件数取得を開始します') logger.info(f'I-FETCH-02 [{object_name}] の件数取得を開始します')
saleforce_count = SalesForceCount() record_count = fetch_sf_count_retry(
record_count = saleforce_count.fetch_sf_count_retry(
object_name, last_fetch_datetime_from, last_fetch_datetime_to) object_name, last_fetch_datetime_from, last_fetch_datetime_to)
logger.info(f'I-FETCH-03 [{object_name}] の件数:[{record_count}]') logger.info(f'I-FETCH-03 [{object_name}] の件数:[{record_count}]')
except Exception as e: except Exception as e:
raise SalesforceAPIException( raise SalesforceAPIException(
'E-FETCH-01', FETCH_JP_NAME, f'[{object_name}] の件数取得に失敗しました [{e}]') 'E-FETCH-01', FETCH_JP_NAME, f'[{object_name}] の件数取得に失敗しました エラー内容:[{e}]')
try: try:
# ③ 取得対象オブジェクトのレコードを取得する # ③ 取得対象オブジェクトのレコードを取得する
logger.info(f'I-FETCH-04 [{object_name}] のレコード取得を開始します') logger.info(f'I-FETCH-04 [{object_name}] のレコード取得を開始します')
saleforce_data = SalesForceData() record_generator = fetch_sf_data_retry(
record_generator = saleforce_data.fetch_sf_data_retry(
columns, object_name, last_fetch_datetime_from, last_fetch_datetime_to) columns, object_name, last_fetch_datetime_from, last_fetch_datetime_to)
except Exception as e: except Exception as e:
raise SalesforceAPIException( raise SalesforceAPIException(
'E-FETCH-02', FETCH_JP_NAME, f'[{object_name}] のレコード取得に失敗しました [{e}]') 'E-FETCH-02', FETCH_JP_NAME, f'[{object_name}] のレコード取得に失敗しました エラー内容:[{e}]')
try: try:
# ④ 取得対象オブジェクトをJSONに変換 # ④ 取得対象オブジェクトをJSONに変換
@ -62,10 +81,68 @@ def fetch_crm_data(target_object, last_fetch_datetime):
except Exception as e: except Exception as e:
raise DataConvertException( raise DataConvertException(
'E-FETCH-03', FETCH_JP_NAME, f'[{object_name}] のレコードのJSON変換に失敗しました [{e}]') 'E-FETCH-03', FETCH_JP_NAME, f'[{object_name}] のレコードのJSON変換に失敗しました エラー内容:[{e}]')
# ⑤ CRMデータ取得処理終了ログを出力する # ⑤ CRMデータ取得処理終了ログを出力する
logger.info(f'I-FETCH-06 [{object_name}] のレコード取得が成功しました') logger.info(f'I-FETCH-06 [{object_name}] のレコード取得が成功しました')
# ⑥ 次の処理へ移行する # ⑥ 次の処理へ移行する
return sf_object_jsons return sf_object_jsons
@retry(wait=wait_exponential(multiplier=CRM_GET_RECORD_COUNT_RETRY_INTERVAL, min=CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL, max=CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL), stop=stop_after_attempt(CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT))
def fetch_sf_count_retry(object_name, last_update_datetime_from, last_update_datetime_to):
try:
global count_contime_counter, count_readtime_counter, count_counter
saleforce_count = SalesForceCount()
return saleforce_count.fetch_sf_count(object_name, last_update_datetime_from, last_update_datetime_to)
except ConnectTimeout as e:
if count_contime_counter < CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT:
count_contime_counter += 1
logger.warn(f'W-FETCH-01 CRMの接続処理がタイムアウトしため、リトライします[{CRM_AUTH_TIMEOUT}] エラー内容:[{e}]')
raise e
except ReadTimeout as e:
if count_readtime_counter < CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT:
count_readtime_counter += 1
logger.warn(
f'W-FETCH-02 [{object_name}] の件数取得処理がタイムアウトしたため、リトライします:[{CRM_GET_RECORD_COUNT_TIMEOUT}] エラー内容:[{e}]')
raise e
except Exception as e:
if count_counter < CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT:
count_counter += 1
logger.warn(
f'W-FETCH-03 [{object_name}] の件数取得に失敗したため、リトライします エラー内容:[{e}]')
raise e
@retry(wait=wait_exponential(multiplier=CRM_FETCH_RECORD_RETRY_INTERVAL, min=CRM_FETCH_RECORD_RETRY_MIN_INTERVAL, max=CRM_FETCH_RECORD_RETRY_MAX_INTERVAL), stop=stop_after_attempt(CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT))
def fetch_sf_data_retry(columns, object_name, last_update_datetime_from, last_update_datetime_to):
try:
global data_contime_counter, data_readtime_counter, data_counter
saleforce_data = SalesForceData()
return saleforce_data.fetch_sf_data(columns, object_name, last_update_datetime_from, last_update_datetime_to)
except ConnectTimeout as e:
if data_contime_counter < CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT:
data_contime_counter += 1
logger.warn(f'W-FETCH-04 CRMの接続処理がタイムアウトしため、リトライします[{CRM_AUTH_TIMEOUT}] エラー内容:[{e}]')
raise e
except ReadTimeout as e:
if data_readtime_counter < CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT:
data_readtime_counter += 1
logger.warn(
f'W-FETCH-05 [{object_name}] のレコード取得処理がタイムアウトしたため、リトライします:[{CRM_FETCH_RECORD_TIMEOUT}] エラー内容:[{e}]')
raise e
except Exception as e:
if data_counter < CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT:
data_counter += 1
logger.warn(
f'W-FETCH-06 [{object_name}] のレコード取得に失敗したため、リトライします エラー内容:[{e}]')
raise e

View File

@ -1,5 +1,5 @@
from datetime import datetime from datetime import datetime
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.constants import( from src.constants import(
PRE_JP_NAME, PRE_JP_NAME,
YYYYMMDDTHHMMSSTZ YYYYMMDDTHHMMSSTZ
@ -18,9 +18,6 @@ from src.parser.json_parse import JsonParser
from src.config.objects import FetchTargetObjects from src.config.objects import FetchTargetObjects
logger = Logger().get_logger()
def prepare_get_data(): def prepare_get_data():
# ① データ取得準備処理の開始ログを出力する # ① データ取得準備処理の開始ログを出力する

View File

@ -8,13 +8,11 @@ from src.csvbk import backup_crm_csvdata # CS
from src.upld import copy_crm_csvdata # CSVアップロード処理 from src.upld import copy_crm_csvdata # CSVアップロード処理
from src.upd import updload_last_fetch_datetime # 前回取得日時ファイル更新 from src.upd import updload_last_fetch_datetime # 前回取得日時ファイル更新
from src.end import updload_result_data # 取得処理実施結果アップロード処理 from src.end import updload_result_data # 取得処理実施結果アップロード処理
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.error.exceptions import( from src.error.exceptions import(
MeDaCaCRMDataFetchException MeDaCaCRMDataFetchException
) )
logger = Logger().get_logger()
def main() -> None: def main() -> None:
try: try:
@ -108,14 +106,14 @@ def main() -> None:
logger.info(f'I-CTRL-16 [{target_object.object_name}] 処理正常終了') logger.info(f'I-CTRL-16 [{target_object.object_name}] 処理正常終了')
except MeDaCaCRMDataFetchException as e: except MeDaCaCRMDataFetchException as e:
logger.error(f'{e.error_id} {e}') logger.info(f'{e.error_id} {e}')
logger.exception( logger.info(
f'I-ERR-03 [{object_info.get("object_name")}] の[{e.func_name}]でエラーが発生しました 次のオブジェクトの処理に移行します') f'I-ERR-03 [{object_info.get("object_name")}] の[{e.func_name}]でエラーが発生しました 次のオブジェクトの処理に移行します', exc_info=True)
continue continue
except Exception as e: except Exception as e:
logger.exception( logger.info(
f'I-ERR-04 [{object_info.get("object_name")}] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します', e) f'I-ERR-04 [{object_info.get("object_name")}] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します', e, exc_info=True)
continue continue
# ④ すべてのオブジェクトの処理が完了したことと、オブジェクト毎の処理結果をログに出力する # ④ すべてのオブジェクトの処理が完了したことと、オブジェクト毎の処理結果をログに出力する
@ -127,22 +125,22 @@ def main() -> None:
# ⑥ 最終結果をチェックし、チェック結果をログに出力 # ⑥ 最終結果をチェックし、チェック結果をログに出力
if not all([v == 'success' for v in process_result.values()]): if not all([v == 'success' for v in process_result.values()]):
logger.error('E-CTRL-01 一部のデータ取得に失敗しています。') logger.error('E-CTRL-01 一部のデータ取得に失敗しています。詳細はログをご確認ください。')
else: else:
logger.info('I-CTRL-18 すべてのデータの取得に成功しました。') logger.info('I-CTRL-20 すべてのデータの取得に成功しました。')
# ⑦ CRMデータ取得処理終了ログを出力する # ⑦ CRMデータ取得処理終了ログを出力する
logger.info('I-CTRL-20 CRMデータ取得処理を終了します') logger.info('I-CTRL-21 CRMデータ取得処理を終了します')
return exit(0) return exit(0)
except MeDaCaCRMDataFetchException as e: except MeDaCaCRMDataFetchException as e:
logger.error(f'{e.error_id} {e}') logger.error(f'E-ERR-01 [{e.func_name}]でエラーが発生したため、処理を終了します')
logger.exception(f'I-ERR-01 [{e.func_name}]でエラーが発生したため、処理を終了します') logger.exception(f'{e.error_id} {e}')
return exit(0) return exit(0)
except Exception as e: except Exception as e:
logger.exception('I-ERR-02 予期せぬエラーが発生したため、処理を終了します', e) logger.exception('E-ERR-02 予期せぬエラーが発生したため、処理を終了します', e)
return exit(0) return exit(0)

View File

@ -1,4 +1,4 @@
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.constants import( from src.constants import(
RESBK_JP_NAME RESBK_JP_NAME
) )
@ -8,9 +8,6 @@ from src.error.exceptions import(
from src.aws.s3 import BackupBucket from src.aws.s3 import BackupBucket
logger = Logger().get_logger()
def backup_crm_data(object_name, sf_object_jsons, date_path): def backup_crm_data(object_name, sf_object_jsons, date_path):
# ① CRM電文データバックアップ処理の開始ログを出力する # ① CRM電文データバックアップ処理の開始ログを出力する
logger.info(f'I-RESBK-01 [{object_name}] のCRM電文データバックアップ処理を開始します') logger.info(f'I-RESBK-01 [{object_name}] のCRM電文データバックアップ処理を開始します')

View File

@ -1,7 +1,4 @@
from tenacity import retry, stop_after_attempt, stop_after_delay
from tenacity.wait import wait_exponential
from simple_salesforce import Salesforce from simple_salesforce import Salesforce
from src.util.async_retry import TimeoutManager, AsyncRetry
from src.environments import( from src.environments import(
CRM_AUTH_DOMAIN, CRM_AUTH_DOMAIN,
CRM_USER_NAME, CRM_USER_NAME,
@ -17,13 +14,14 @@ from src.environments import(
CRM_GET_RECORD_COUNT_RETRY_INTERVAL, CRM_GET_RECORD_COUNT_RETRY_INTERVAL,
CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL, CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL,
CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL, CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL,
CRM_FETCH_RECORD_TIMEOUT, # CRMのレコード取得処理のタイムアウト秒数 CRM_FETCH_RECORD_TIMEOUT,
CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT, CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT,
CRM_FETCH_RECORD_RETRY_INTERVAL, CRM_FETCH_RECORD_RETRY_INTERVAL,
CRM_FETCH_RECORD_RETRY_MIN_INTERVAL, CRM_FETCH_RECORD_RETRY_MIN_INTERVAL,
CRM_FETCH_RECORD_RETRY_MAX_INTERVAL CRM_FETCH_RECORD_RETRY_MAX_INTERVAL
) )
FETCH_SOQL = """SELECT {column_or_expression} FROM {object_name} FETCH_SOQL = """SELECT {column_or_expression} FROM {object_name}
WHERE SystemModStamp > {last_update_datetime_from} WHERE SystemModStamp > {last_update_datetime_from}
AND SystemModStamp <= {last_update_datetime_to} AND SystemModStamp <= {last_update_datetime_to}
@ -57,10 +55,6 @@ class SalesForceCount():
count_soql, conn_timeout=CRM_AUTH_TIMEOUT, read_timeout=CRM_GET_RECORD_COUNT_TIMEOUT) count_soql, conn_timeout=CRM_AUTH_TIMEOUT, read_timeout=CRM_GET_RECORD_COUNT_TIMEOUT)
return count_res.get('records')[0].get('expr0') return count_res.get('records')[0].get('expr0')
@retry(wait=wait_exponential(multiplier=CRM_GET_RECORD_COUNT_RETRY_INTERVAL, min=CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL, max=CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL), stop=stop_after_attempt(CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT) | stop_after_delay(CRM_GET_RECORD_COUNT_TIMEOUT))
def fetch_sf_count_retry(self, object_name, last_update_datetime_from, last_update_datetime_to):
return self.fetch_sf_count(object_name, last_update_datetime_from, last_update_datetime_to)
class SalesForceData(): class SalesForceData():
def fetch_sf_data(self, columns, object_name, last_update_datetime_from, last_update_datetime_to): def fetch_sf_data(self, columns, object_name, last_update_datetime_from, last_update_datetime_to):
@ -72,7 +66,3 @@ class SalesForceData():
) )
self.__sf = SalesfoeceApi() self.__sf = SalesfoeceApi()
return self.__sf.sf_query_all_iter(soql, conn_timeout=CRM_AUTH_TIMEOUT, read_timeout=CRM_FETCH_RECORD_TIMEOUT) return self.__sf.sf_query_all_iter(soql, conn_timeout=CRM_AUTH_TIMEOUT, read_timeout=CRM_FETCH_RECORD_TIMEOUT)
@retry(wait=wait_exponential(multiplier=CRM_FETCH_RECORD_RETRY_INTERVAL, min=CRM_FETCH_RECORD_RETRY_MIN_INTERVAL, max=CRM_FETCH_RECORD_RETRY_MAX_INTERVAL), stop=stop_after_attempt(CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT) | stop_after_delay(CRM_FETCH_RECORD_TIMEOUT))
def fetch_sf_data_retry(self, columns, object_name, last_update_datetime_from, last_update_datetime_to):
return self.fetch_sf_data(columns, object_name, last_update_datetime_from, last_update_datetime_to)

View File

@ -1,5 +1,5 @@
import json import json
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.aws.s3 import ConfigBucket from src.aws.s3 import ConfigBucket
from src.constants import ( from src.constants import (
UPD_JP_NAME UPD_JP_NAME
@ -9,9 +9,6 @@ from src.error.exceptions import(
) )
logger = Logger().get_logger()
def updload_last_fetch_datetime(target_object, last_fetch_datetime): def updload_last_fetch_datetime(target_object, last_fetch_datetime):
# ① 前回取得日時ファイル更新処理の開始ログを出力する # ① 前回取得日時ファイル更新処理の開始ログを出力する
logger.info( logger.info(

View File

@ -1,4 +1,4 @@
from src.util.logger import Logger from src.util.logger import logger_instance as logger
from src.constants import ( from src.constants import (
UPLD_JP_NAME UPLD_JP_NAME
) )
@ -14,9 +14,6 @@ from src.error.exceptions import(
from src.aws.s3 import S3ResourceNonBucket from src.aws.s3 import S3ResourceNonBucket
logger = Logger().get_logger()
def copy_crm_csvdata(target_object, date_path): def copy_crm_csvdata(target_object, date_path):
# ① CSVデータアップロード処理の開始ログを出力する # ① CSVデータアップロード処理の開始ログを出力する
logger.info( logger.info(

View File

@ -1,6 +1,9 @@
import logging import logging
from src.environments import LOG_LEVEL from src.environments import LOG_LEVEL
for name in ["boto3", "botocore", "s3transfer", "urllib3"]:
logging.getLogger(name).setLevel(logging.WARNING)
class Logger(): class Logger():
__logger: logging.Logger __logger: logging.Logger
@ -27,3 +30,6 @@ class Logger():
def get_logger(self) -> logging.Logger: def get_logger(self) -> logging.Logger:
return self.__logger return self.__logger
logger_instance = Logger().get_logger()