|
@@ -1,4 +1,7 @@
|
|
|
+import datetime
|
|
|
import json
|
|
|
+import time
|
|
|
+from collections import defaultdict
|
|
|
|
|
|
import requests
|
|
|
from fastapi import APIRouter, Depends
|
|
@@ -135,13 +138,46 @@ def add_notification(item: Item):
|
|
|
print(f'receive sigal: {item.data} ')
|
|
|
|
|
|
|
|
|
-@router_af_run.get("/{job_id}/{af_run_id}")
|
|
|
+@router_af_run.get("/tasks_status/{job_id}/{af_run_id}")
|
|
|
@web_try()
|
|
|
@sxtimeit
|
|
|
def get_airflow_dagrun(job_id: int, af_run_id: str, db: Session = Depends(get_db)):
|
|
|
- ret = call_airflow_api(method='get',uri=f'dags/dag_{job_id}/dagRuns/{af_run_id}/taskInstances',args_dict={})
|
|
|
+ ret = call_airflow_api(method='get', uri=f'dags/dag_{job_id}/dagRuns/{af_run_id}/taskInstances', args_dict={})
|
|
|
+ details = defaultdict(dict)
|
|
|
+
|
|
|
for task in ret.json()['task_instances']:
|
|
|
- print(f"{task['task_id']}:{task['duration']}")
|
|
|
- # task_info =
|
|
|
- # pass
|
|
|
- # return paginate(crud.get_airflow_tasks(db), params)
|
|
|
+ details['tasks'][task['task_id']] = {
|
|
|
+ # "log": logs,
|
|
|
+ "start_time": datetime.datetime.strptime(task['start_date'], '%Y-%m-%dT%H:%M:%S.%f%z').timestamp(),
|
|
|
+ "end_time": datetime.datetime.strptime(task['end_date'], '%Y-%m-%dT%H:%M:%S.%f%z').timestamp(),
|
|
|
+ "status": task['state']
|
|
|
+ }
|
|
|
+ # print(f"{task['task_id']}:{task['duration']}")
|
|
|
+ return details
|
|
|
+
|
|
|
+
|
|
|
+@router_af_run.get("/job_status/{job_id}/{af_run_id}")
|
|
|
+@web_try()
|
|
|
+@sxtimeit
|
|
|
+def get_airflow_dagrun_job_info(job_id: int, af_run_id: str, db: Session = Depends(get_db)):
|
|
|
+ ret = call_airflow_api(method='get', uri=f'dags/dag_{job_id}/dagRuns/{af_run_id}/taskInstances', args_dict={})
|
|
|
+ details = defaultdict(dict)
|
|
|
+
|
|
|
+ for task in ret.json()['task_instances']:
|
|
|
+ details['tasks'][task['task_id']] = {
|
|
|
+ # "log": logs,
|
|
|
+ "start_time": datetime.datetime.strptime(task['start_date'], '%Y-%m-%dT%H:%M:%S.%f%z').timestamp(),
|
|
|
+ "end_time": datetime.datetime.strptime(task['end_date'], '%Y-%m-%dT%H:%M:%S.%f%z').timestamp(),
|
|
|
+ "status": task['state']
|
|
|
+ }
|
|
|
+ # print(f"{task['task_id']}:{task['duration']}")
|
|
|
+ return details
|
|
|
+
|
|
|
+
|
|
|
+@router_af_run.get("/task_log/{job_id}/{af_run_id}/{task_id}")
|
|
|
+@web_try()
|
|
|
+@sxtimeit
|
|
|
+def get_airflow_dagrun_task_log(job_id: int, af_run_id: str, task_id: str):
|
|
|
+ ret = call_airflow_api(method='get', uri=f'dags/dag_{job_id}/dagRuns/{af_run_id}/taskInstances/{task_id}/logs/1',
|
|
|
+ args_dict={})
|
|
|
+ return {"log": ret.text}
|