|
@@ -1,24 +1,41 @@
|
|
|
from airflow import DAG
|
|
|
from datetime import datetime
|
|
|
-from airflow.operators.bash import BashOperator
|
|
|
+from airflow.operators.empty import EmptyOperator
|
|
|
from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator
|
|
|
from airflow.configuration import conf
|
|
|
from airflow.utils.task_group import TaskGroup
|
|
|
import requests
|
|
|
|
|
|
-def task_success_alert(context):
|
|
|
+job_id = {{ job_id }}
|
|
|
+
|
|
|
+def task_finish_alert(context):
|
|
|
+ print('############### task begin callback!###################')
|
|
|
url = 'http://192.168.199.109:18082/jpt/af_run/notification'
|
|
|
- print('enter callback run!')
|
|
|
- task_instance_key_str = context['task_instance_key_str']
|
|
|
- infos = task_instance_key_str.split('__')
|
|
|
- print(type(context))
|
|
|
- requests.post(url,json={"data":{'dag_id':infos[0],
|
|
|
- 'task_id':infos[1],
|
|
|
- 'run_ts':context['ts_nodash'],
|
|
|
- 'task_start':type(context),
|
|
|
- 'run_id': 123
|
|
|
- }
|
|
|
- })
|
|
|
+ ti = context['ti']
|
|
|
+ requests.post(url, json={"data": {
|
|
|
+ "job_id": job_id,
|
|
|
+ "dag_id": ti.dag_id,
|
|
|
+ "task_id": ti.task.task_id,
|
|
|
+ "run_ts": ti.execution_date.strftime('%Y%m%dT%H%M%S'),
|
|
|
+ "start_time": ti.start_date.timestamp(),
|
|
|
+ "end_time": ti.end_date.timestamp(),
|
|
|
+ "status": ti.current_state()
|
|
|
+ }})
|
|
|
+
|
|
|
+
|
|
|
+def dag_begin_alert(context):
|
|
|
+ print('############### dag begin callback!###################')
|
|
|
+ url = 'http://192.168.199.109:18082/jpt/af_run'
|
|
|
+ ti = context['ti']
|
|
|
+ requests.post(url, json={"data": {
|
|
|
+ "job_id": job_id,
|
|
|
+ "dag_id": ti.dag_id,
|
|
|
+ "task_id": ti.task.task_id,
|
|
|
+ "run_ts": ti.execution_date.strftime('%Y%m%dT%H%M%S'),
|
|
|
+ "start_time": ti.start_date.timestamp(),
|
|
|
+ "end_time": ti.end_date.timestamp(),
|
|
|
+ "status": ti.current_state()
|
|
|
+ }})
|
|
|
|
|
|
print('enter dag run!')
|
|
|
namespace = conf.get("kubernetes", "NAMESPACE")
|
|
@@ -29,8 +46,10 @@ name = "dag_user{{ user_name }}"
|
|
|
|
|
|
# instantiate the DAG
|
|
|
with DAG(start_date=datetime(2022,6,1),catchup=False,schedule_interval='@daily',dag_id="{{ dag_id }}") as dag:
|
|
|
+ op_start = EmptyOperator(task_id='start', on_success_callback=dag_begin_alert)
|
|
|
+
|
|
|
{% for spark_node in spark_nodes %}
|
|
|
- with TaskGroup("{{ spark_node['name'] }}", tooltip="{{ spark_node['desc'] }}") as op_{{ spark_node['id'] }}:
|
|
|
+ with TaskGroup("{{ spark_node['name'] }}", prefix_group_id=False, tooltip="{{ spark_node['desc'] }}") as op_{{ spark_node['id'] }}:
|
|
|
{% for spark_sub_node in spark_node['sub_nodes'] %}
|
|
|
op_{{ spark_sub_node['id'] }} = KubernetesPodOperator(
|
|
|
task_id="{{ spark_sub_node["id"] }}",
|
|
@@ -46,7 +65,8 @@ with DAG(start_date=datetime(2022,6,1),catchup=False,schedule_interval='@daily',
|
|
|
log_events_on_failure=True,
|
|
|
cmds={{ spark_sub_node['cmds'] }},
|
|
|
env_vars={{ spark_sub_node['env'] }},
|
|
|
- on_success_callback=task_success_alert
|
|
|
+ on_success_callback=task_finish_alert,
|
|
|
+{# on_failure_callback=task_finish_alert#}
|
|
|
)
|
|
|
{% endfor %}
|
|
|
{% for edge in spark_node['edges'] %}
|
|
@@ -71,9 +91,14 @@ with DAG(start_date=datetime(2022,6,1),catchup=False,schedule_interval='@daily',
|
|
|
log_events_on_failure=True,
|
|
|
cmds={{ node['cmds'] }},
|
|
|
env_vars={{ node['env'] }},
|
|
|
- on_success_callback=task_success_alert
|
|
|
+ on_success_callback=task_finish_alert,
|
|
|
+{# on_failure_callback=task_finish_alert#}
|
|
|
)
|
|
|
+ op_start >> {{ node['operator_name'] }}
|
|
|
{% endfor %}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
{% for edge in edges%}
|
|
|
{{ edge['source_operator_name'] }} >> {{ edge['target_operator_name'] }}
|
|
|
{% endfor %}
|