feat:ログ出力や、Salesforceの接続リトライを主とした機能修正
This commit is contained in:
parent
a7426900b7
commit
3b5b0dc33c
19
.vscode/launch.json
vendored
Normal file
19
.vscode/launch.json
vendored
Normal 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"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -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))
|
||||||
|
|||||||
@ -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 オブジェクト情報形式チェック処理を開始します')
|
||||||
|
|||||||
0
ecs/crm-datafetch/src/config/__init__.py
Normal file
0
ecs/crm-datafetch/src/config/__init__.py
Normal 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を表す。ミリ秒までの考慮は不要なので固定で指定
|
||||||
|
|||||||
@ -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変換処理を開始します')
|
||||||
|
|||||||
0
ecs/crm-datafetch/src/converter/__init__.py
Normal file
0
ecs/crm-datafetch/src/converter/__init__.py
Normal 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}]')
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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から取得し、取込用に変換したデータのバックアップを格納するフォルダ
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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():
|
||||||
|
|
||||||
# ① データ取得準備処理の開始ログを出力する
|
# ① データ取得準備処理の開始ログを出力する
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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電文データバックアップ処理を開始します')
|
||||||
|
|||||||
@ -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)
|
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user