Fix: #61
This commit is contained in:
parent
605d9f32c8
commit
bceb842cad
@ -2,8 +2,9 @@ FROM python:3.9-slim
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY script.py .
|
COPY run.py .
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y install curl
|
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
71
api-cronjob/run.py
Normal 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)
|
@ -30,7 +30,7 @@ update_data = {
|
|||||||
"report_overview_duration"
|
"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=["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}
|
headers = {'Authorization': login_token}
|
||||||
for dur in report_overview_duration:
|
for dur in report_overview_duration:
|
||||||
for sub in subsidiary:
|
for sub in subsidiary:
|
||||||
|
@ -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:${tag}
|
||||||
# docker push public.ecr.aws/sdsrv/sidp/cope2n-fe-fi-sbt:production
|
# 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
|
cp ./docker-compose-prod.yml ./docker-compose_${tag}.yml
|
||||||
sed -i "s/{{tag}}/$tag/g" ./docker-compose_${tag}.yml
|
sed -i "s/{{tag}}/$tag/g" ./docker-compose_${tag}.yml
|
||||||
cp .env_prod .env_${tag}
|
cp .env_prod .env_${tag}
|
@ -72,6 +72,11 @@ services:
|
|||||||
- S3_SECRET_KEY=${S3_SECRET_KEY}
|
- S3_SECRET_KEY=${S3_SECRET_KEY}
|
||||||
- S3_BUCKET_NAME=${S3_BUCKET_NAME}
|
- S3_BUCKET_NAME=${S3_BUCKET_NAME}
|
||||||
restart: always
|
restart: always
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "curl --fail http://localhost:9000/api/ctel/healthcheck || exit 1"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 50
|
||||||
ports:
|
ports:
|
||||||
- 9000:9000
|
- 9000:9000
|
||||||
networks:
|
networks:
|
||||||
@ -228,6 +233,23 @@ services:
|
|||||||
- BE_static:/backend-static
|
- BE_static:/backend-static
|
||||||
networks:
|
networks:
|
||||||
- ctel-sbt
|
- 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:
|
volumes:
|
||||||
db_data:
|
db_data:
|
||||||
|
@ -53,6 +53,11 @@ services:
|
|||||||
- S3_SECRET_KEY=${S3_SECRET_KEY}
|
- S3_SECRET_KEY=${S3_SECRET_KEY}
|
||||||
- S3_BUCKET_NAME=${S3_BUCKET_NAME}
|
- S3_BUCKET_NAME=${S3_BUCKET_NAME}
|
||||||
restart: always
|
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
|
privileged: true # for chmod
|
||||||
mem_limit: 10gb
|
mem_limit: 10gb
|
||||||
image: public.ecr.aws/v4n9y6r8/sidp/cope2n-be-fi-sbt:{{tag}}
|
image: public.ecr.aws/v4n9y6r8/sidp/cope2n-be-fi-sbt:{{tag}}
|
||||||
@ -189,6 +194,22 @@ services:
|
|||||||
- BE_static:/backend-static
|
- BE_static:/backend-static
|
||||||
networks:
|
networks:
|
||||||
- ctel-sbt
|
- 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:
|
volumes:
|
||||||
db_data:
|
db_data:
|
||||||
|
@ -10,9 +10,9 @@ from dotenv import load_dotenv
|
|||||||
|
|
||||||
load_dotenv("../.env_prod")
|
load_dotenv("../.env_prod")
|
||||||
|
|
||||||
OUTPUT_NAME = "all_0219_0226"
|
OUTPUT_NAME = "all_0226_0304"
|
||||||
START_DATE = datetime(2024, 2, 19, tzinfo=timezone('Asia/Ho_Chi_Minh'))
|
START_DATE = datetime(2024, 2, 26, tzinfo=timezone('Asia/Ho_Chi_Minh'))
|
||||||
END_DATE = datetime(2024, 2, 27, tzinfo=timezone('Asia/Ho_Chi_Minh'))
|
END_DATE = datetime(2024, 3, 4, tzinfo=timezone('Asia/Ho_Chi_Minh'))
|
||||||
|
|
||||||
# Database connection details
|
# Database connection details
|
||||||
db_host = os.environ.get('DB_HOST', "")
|
db_host = os.environ.get('DB_HOST', "")
|
||||||
|
Loading…
Reference in New Issue
Block a user