This commit is contained in:
dx-tan 2024-03-04 15:38:38 +07:00
parent 605d9f32c8
commit bceb842cad
7 changed files with 126 additions and 6 deletions

View File

@ -2,8 +2,9 @@ FROM python:3.9-slim
WORKDIR /app
COPY script.py .
COPY run.py .
RUN apt-get update && apt-get -y install curl
RUN pip install requests
CMD [ "python", "script.py" ]
CMD [ "python", "-u", "run.py" ]

71
api-cronjob/run.py Normal file
View File

@ -0,0 +1,71 @@
import os
import time
import requests
from datetime import datetime
# Get the proxy URL from the environment variable
interval = 60*60*1 # 1 minute
update_cost = int(60*2)
proxy_url = os.getenv('PROXY', "localhost")
user = os.getenv('ADMIN_USER_NAME', "")
password = os.getenv('ADMIN_PASSWORD', "")
# Define the login API URL
login_url = f'{proxy_url}/api/ctel/login/'
login_token = None
# Define the login credentials
login_credentials = {
'username': user,
'password': password
}
# Define the command to call the update API
update_url = f'{proxy_url}/api/ctel/make_report/'
update_data = {
'is_daily_report': True,
'report_overview_duration': '',
'subsidiary': None
}
"report_overview_duration"
# def update_report(login_token, report_overview_duration=["30d", "7d"], subsidiary=["all", "SEAU", "SESP", "SME", "SEPCO", "TSE", "SEIN"]):
def update_report(login_token, report_overview_duration=["7d", "30d"], subsidiary=["SEAO", "SEAU", "SESP", "SME", "SEPCO", "TSE", "SEIN"]):
headers = {'Authorization': login_token}
for dur in report_overview_duration:
for sub in subsidiary:
update_data["report_overview_duration"] = dur
update_data["subsidiary"] = sub
update_response = requests.post(update_url, data=update_data, headers=headers)
print("[INFO]: update_response at {} by {} - {} with status {}".format(datetime.now(), dur, sub, update_response.status_code))
update_response.raise_for_status()
time.sleep(update_cost)
# Define the interval in seconds between API calls
# time.sleep(60)
while True:
# Call the login API and retrieve the login token
if not login_token:
login_response = requests.post(login_url, data=login_credentials)
# login_response.raise_for_status()
if login_response.status_code == 200:
login_token = login_response.json()['token']
print("[INFO] relogged in at {}".format(datetime.now()))
# Call the update API
try:
update_report(login_token)
except Exception as e:
print(f"[ERROR]: {e}")
print(f"[ERROR]: Failed to update_response, retrying...")
login_response = requests.post(login_url, data=login_credentials)
# login_response.raise_for_status()
if login_response.status_code == 200:
login_token = login_response.json()['token']
print("[INFO] relogged in at {}".format(datetime.now()))
update_report(login_token)
# Wait for the specified interval
time.sleep(interval)

View File

@ -30,7 +30,7 @@ update_data = {
"report_overview_duration"
# def update_report(login_token, report_overview_duration=["30d", "7d"], subsidiary=["all", "SEAU", "SESP", "SME", "SEPCO", "TSE", "SEIN"]):
def update_report(login_token, report_overview_duration=["7d", "30d"], subsidiary=["SEAO", "SEAU", "SESP", "SME", "SEPCO", "TSE", "SEIN"]):
def update_report(login_token, report_overview_duration=["30d", "7d"], subsidiary=["SEAO", "SEAU", "SESP", "SME", "SEPCO", "TSE", "SEIN"]):
headers = {'Authorization': login_token}
for dur in report_overview_duration:
for sub in subsidiary:

View File

@ -30,6 +30,11 @@ docker tag sidp/cope2n-fe-fi-sbt:latest public.ecr.aws/sdsrv/sidp/cope2n-fe-fi-s
docker push public.ecr.aws/sdsrv/sidp/cope2n-fe-fi-sbt:${tag}
# docker push public.ecr.aws/sdsrv/sidp/cope2n-fe-fi-sbt:production
echo "[INFO] Pushing API caller image with tag: $tag..."
docker compose -f docker-compose-dev.yml build dashboard_refresh
docker tag sidp/api-caller-sbt:latest public.ecr.aws/sdsrv/sidp/api-caller-sbt:${tag}
docker push public.ecr.aws/sdsrv/sidp/api-caller-sbt:${tag}
cp ./docker-compose-prod.yml ./docker-compose_${tag}.yml
sed -i "s/{{tag}}/$tag/g" ./docker-compose_${tag}.yml
cp .env_prod .env_${tag}

View File

@ -72,6 +72,11 @@ services:
- S3_SECRET_KEY=${S3_SECRET_KEY}
- S3_BUCKET_NAME=${S3_BUCKET_NAME}
restart: always
healthcheck:
test: ["CMD-SHELL", "curl --fail http://localhost:9000/api/ctel/healthcheck || exit 1"]
interval: 10s
timeout: 5s
retries: 50
ports:
- 9000:9000
networks:
@ -228,6 +233,23 @@ services:
- BE_static:/backend-static
networks:
- ctel-sbt
dashboard_refresh:
build:
context: api-cronjob
dockerfile: Dockerfile
image: sidp/api-caller-sbt:latest
environment:
- PROXY=http://be-ctel-sbt:9000
- ADMIN_USER_NAME=${ADMIN_USER_NAME}
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
depends_on:
be-ctel-sbt:
condition: service_healthy
restart: always
networks:
- ctel-sbt
volumes:
db_data:

View File

@ -53,6 +53,11 @@ services:
- S3_SECRET_KEY=${S3_SECRET_KEY}
- S3_BUCKET_NAME=${S3_BUCKET_NAME}
restart: always
healthcheck:
test: ["CMD-SHELL", "curl --fail http://localhost:9000/api/ctel/healthcheck || exit 1"]
interval: 10s
timeout: 5s
retries: 50
privileged: true # for chmod
mem_limit: 10gb
image: public.ecr.aws/v4n9y6r8/sidp/cope2n-be-fi-sbt:{{tag}}
@ -189,6 +194,22 @@ services:
- BE_static:/backend-static
networks:
- ctel-sbt
dashboard_refresh:
build:
context: api-cronjob
dockerfile: Dockerfile
image: sidp/api-caller-sbt:{{tag}}
environment:
- PROXY=http://be-ctel-sbt:9000
- ADMIN_USER_NAME=${ADMIN_USER_NAME}
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
depends_on:
be-ctel-sbt:
condition: service_healthy
restart: always
networks:
- ctel-sbt
volumes:
db_data:

View File

@ -10,9 +10,9 @@ from dotenv import load_dotenv
load_dotenv("../.env_prod")
OUTPUT_NAME = "all_0219_0226"
START_DATE = datetime(2024, 2, 19, tzinfo=timezone('Asia/Ho_Chi_Minh'))
END_DATE = datetime(2024, 2, 27, tzinfo=timezone('Asia/Ho_Chi_Minh'))
OUTPUT_NAME = "all_0226_0304"
START_DATE = datetime(2024, 2, 26, tzinfo=timezone('Asia/Ho_Chi_Minh'))
END_DATE = datetime(2024, 3, 4, tzinfo=timezone('Asia/Ho_Chi_Minh'))
# Database connection details
db_host = os.environ.get('DB_HOST', "")