47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
import os
|
|
import requests
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
from django.utils.timezone import now
|
|
from .models import Message
|
|
from django.db import transaction
|
|
|
|
def send_scheduled_messages():
|
|
mm_url = os.getenv("MM_URL")
|
|
# debug
|
|
# print(mm_url)
|
|
headers = {"Content-Type": "application/json"}
|
|
# 트랜잭션 시작
|
|
with transaction.atomic():
|
|
# 현재 시간 이전의 메시지 중 is_sent가 False인 메시지를 잠금
|
|
messages = Message.objects.filter(
|
|
send_time__lte=now(), is_sent=False
|
|
).select_for_update()
|
|
|
|
for message in messages:
|
|
try:
|
|
# 메시지 전송
|
|
data = {"text": f"{message.title}\n{message.text}"}
|
|
response = requests.post(mm_url, json=data, headers=headers)
|
|
|
|
# 성공적으로 전송되면 is_sent를 True로 업데이트
|
|
if response.status_code == 200:
|
|
message.is_sent = True
|
|
message.save()
|
|
print(
|
|
f"Sent message: {message.title}, Response: {response.status_code}"
|
|
)
|
|
else:
|
|
print(
|
|
f"Failed to send message: {message.title}, Response: {response.status_code}"
|
|
)
|
|
|
|
except Exception as e:
|
|
print(f"Error sending message: {message.title}, Error: {e}")
|
|
|
|
|
|
scheduler = BackgroundScheduler()
|
|
# scheduler.add_job(send_scheduled_messages, 'interval', minutes=1) # 1분마다 실행
|
|
scheduler.add_job(send_scheduled_messages, "interval", seconds=30) # 30초마다 실행
|
|
|
|
scheduler.start()
|