batch_test.py 1.98 KB
Newer Older
김진영's avatar
김진영 committed
1
2
from datetime import datetime, timedelta
from textwrap import dedent
김진영's avatar
김진영 committed
3
import pendulum
김진영's avatar
김진영 committed
4
from airflow.operators.bash import BashOperator
김진영's avatar
김진영 committed
5
from airflow import DAG
김진영's avatar
김진영 committed
6
from data.gasan_data import gasanData   # import cj-gasan data
김진영's avatar
김진영 committed
7

김진영's avatar
김진영 committed
8
# set timezone
김진영's avatar
김진영 committed
9
10
local_tz = pendulum.timezone("Asia/Seoul")

김진영's avatar
김진영 committed
11
12
13
14
15
16
17
def fail_alert(context):
    alert = BashOperator(
        task_id='fail_alert',
        bash_command="curl -d \'{\"@context\":\"https://schema.org/extensions\",\"@type\":\"MessageCard\",\"themeColor\":\"0072C6\",\"title\":\"Batch Job Error\",\"text\":\"[health_check] Error Task\"}\' -H \"Content-Type: Application/JSON\" -X POST https://lottegroup.webhook.office.com/webhookb2/2ed9f7fc-4c60-4d2d-a61c-aa50c0075564@dc742f86-8941-4de1-8d2c-d2dfef93cfe8/IncomingWebhook/1047eeaf7bde45a08e5ccb4d6c80f08d/d7352368-8126-4827-aab7-4a62b0b5abc2"
    )
    return alert.execute(context)

김진영's avatar
김진영 committed
18
19
20
21
with DAG(
    'batch_test',
    default_args={
        'depends_on_past': False,
김진영's avatar
김진영 committed
22
        'email': 'kim-jy@lotte.net',
김진영's avatar
김진영 committed
23
24
    },
    description='Test Batch Job',
김진영's avatar
김진영 committed
25
    schedule_interval='*/1 * * * *',
김진영's avatar
김진영 committed
26
    start_date=datetime(2022, 5, 13, tzinfo=local_tz),
김진영's avatar
김진영 committed
27
    tags=['test'],
김진영's avatar
김진영 committed
28
    catchup=False,
김진영's avatar
김진영 committed
29
) as dag:
김진영's avatar
김진영 committed
30
31
32
    # (Task1) 헬스체크
    health_check = BashOperator(
        task_id='health_check',
김진영's avatar
김진영 committed
33
34
        bash_command="curl -X GET -v http://10.231.238.224:30999/api/v1/core/health \'-H accept: application/json\'",
        on_failure_callback: fail_alert
김진영's avatar
김진영 committed
35
    )
김진영's avatar
김진영 committed
36

김진영's avatar
김진영 committed
37
    # (Task2) gasan 작업 병렬처리
김진영's avatar
김진영 committed
38
    post_gasan_tasks = []
김진영's avatar
김진영 committed
39

김진영's avatar
김진영 committed
40
41
42
43
44
    for i, data in enumerate(gasanData):
        post_gasan_task = BashOperator(
            task_id='post_gasan'+str(i+1),
            bash_command="curl -X \'POST\' \'http://10.231.238.224:30999/api/v1/camera/writeimage\' -H \'Content-Type: application/json\' -d \'{\"id\": \"test\", \"pw\": \"test\", \"ip\": \"%s\", \"serialNum\": \"%s\", \"camName\": \"%s\"}\'" %(data["ip"], data["serialNum"], data["camName"]),
        )
김진영's avatar
김진영 committed
45

김진영's avatar
김진영 committed
46
        post_gasan_tasks.append(post_gasan_task)
김진영's avatar
김진영 committed
47

김진영's avatar
김진영 committed
48
    # 작업 순서 정의
김진영's avatar
김진영 committed
49
    health_check >> post_gasan_tasks