기본 구조 완성. 파일 정리하면 끝. 일단 배포 완료
todo - tf 파일의 slack_url 환경변수 등으로 정리 - 배포하는 스크립트? 필요할 것 같기도 함
This commit is contained in:
parent
91e986b475
commit
1b8b580554
6 changed files with 230 additions and 82 deletions
53
main.py
53
main.py
|
|
@ -1,13 +1,12 @@
|
|||
from datetime import datetime
|
||||
import json
|
||||
from typing import Dict, Any, Final, List, Optional
|
||||
import requests
|
||||
from typing import Dict, Any, Final, Optional
|
||||
import os
|
||||
import time
|
||||
from dataclasses import dataclass
|
||||
|
||||
import menu
|
||||
import schedule
|
||||
import slack
|
||||
|
||||
|
||||
# Load environment variables (recommended for sensitive data)
|
||||
|
|
@ -37,43 +36,35 @@ def __parse_param(evt: Dict[str, Any]) -> Optional[Param]:
|
|||
return Param(str(evt.get('slack_url')), date, cnt + 1)
|
||||
|
||||
def retry(p: Param, lambda_arn: str, schedule_role_arn: str) -> Dict[str, str]:
|
||||
schedule.one_time_schedule(lambda_arn, schedule_role_arn, RETRY_INTERVAL, p)
|
||||
schedule.one_time_schedule(lambda_arn, schedule_role_arn, RETRY_INTERVAL, p.slack_url, p.date, p.count)
|
||||
return {'statusCode': '200', 'body': f'retry {p.count}'}
|
||||
|
||||
def wrap_return(ret: bool) -> Dict[str, str]:
|
||||
return {
|
||||
'statusCode': '200',
|
||||
'body': 'success' if ret else 'fail'
|
||||
}
|
||||
|
||||
def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, str]:
|
||||
os.environ['TZ'] = 'Asia/Seoul'
|
||||
time.tzset()
|
||||
lambda_arn = os.environ['LAMBDA_ARN']
|
||||
if context.invoked_function_arn is None:
|
||||
raise Exception('None???')
|
||||
lambda_arn = str(context.invoked_function_arn)
|
||||
schedule_role_arn = os.environ['SCHEDULE_ROLE_ARN']
|
||||
bucket_name = os.environ['S3_BUCKET_NAME']
|
||||
param = __parse_param(event)
|
||||
if param is None:
|
||||
return PARAM_ERROR
|
||||
menus = menu.menu(param.date)
|
||||
menus_without_img = [ x for x in menus if x.menu_image is None ]
|
||||
if param.count < MAX_RETRY and (len(menus) == 0 or len(menus_without_img) > 0):
|
||||
print('menus', menus)
|
||||
print('menus_without_img', menus_without_img)
|
||||
print('param', param)
|
||||
if param.count <= MAX_RETRY and (len(menus) == 0 or len(menus_without_img) > 0):
|
||||
return retry(param, lambda_arn, schedule_role_arn)
|
||||
if len(menus) == 0:
|
||||
# 슬랙 메시지 전송( 오늘의 메뉴 존재 X )
|
||||
return retry(param, lambda_arn, schedule_role_arn)
|
||||
# Extract relevant data for your Slack message (adjust as needed)
|
||||
message_content: str = f"*Important Data from External API*\n"
|
||||
message_content += f"`\n{json.dumps(api_data, indent=4)}\n`"
|
||||
# Construct payload for the Slack webhook
|
||||
slack_payload: Dict[str, Any] = {
|
||||
"text": message_content,
|
||||
"blocks": [
|
||||
{"type": "section", "text": {"type": "mrkdwn", "text": message_content}}
|
||||
]
|
||||
}
|
||||
# Send the message to Slack
|
||||
slack_response: requests.Response = requests.post(
|
||||
'',
|
||||
#SLACK_WEBHOOK_URL,
|
||||
data=json.dumps(slack_payload),
|
||||
headers={'Content-Type': 'application/json'}
|
||||
)
|
||||
slack_response.raise_for_status()
|
||||
return {
|
||||
'statusCode': '200',
|
||||
'body': json.dumps('Data successfully sent to Slack.')
|
||||
}
|
||||
|
||||
for each in menus:
|
||||
each.resize_image(bucket_name, param.date)
|
||||
return wrap_return(slack.send(param.slack_url, param.date, menus))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue