Python 如何在成功后向airflow发送的电子邮件添加内容

Python 如何在成功后向airflow发送的电子邮件添加内容,python,airflow,Python,Airflow,我希望发送一封电子邮件,其中包含成功时气流DAG输出的信息。我的两种方法是:第一种是从主DAG执行函数(我不能这样做,因为DAG似乎无法访问它运行的输出,我认为这是合乎逻辑的),第二种方法更有希望,将其配置为发送DAG运行的日志。我在《气流》中按照这个想法创建了它,但是当它发送电子邮件时,它们是空白的。我尝试查找日志并创建一个列表作为消息传递,如下所示: def task_success_callback(context): outer_task_success_callback(con

我希望发送一封电子邮件,其中包含成功时气流DAG输出的信息。我的两种方法是:第一种是从主DAG执行函数(我不能这样做,因为DAG似乎无法访问它运行的输出,我认为这是合乎逻辑的),第二种方法更有希望,将其配置为发送DAG运行的日志。我在《气流》中按照这个想法创建了它,但是当它发送电子邮件时,它们是空白的。我尝试查找日志并创建一个列表作为消息传递,如下所示:

def task_success_callback(context):
    outer_task_success_callback(context, email='a1u1k6u3f0v1t0r8@justeat.slack.com')


def outer_task_success_callback(context, email):
    lines = []
    for file in glob.glob("AIRFLOW_HOME/*.log"):
        with open(file) as f:
            lines = [line for line in f.readlines()]
            print(lines)

    mensaje = lines 
    subject = "[Airflow] DAG {0} - Task {1}: Success".format(
        context['task_instance_key_str'].split('__')[0],
        context['task_instance_key_str'].split('__')[1]
        )
    html_content = """
    DAG: {0}<br>
    Task: {1}<br>
        Log: {2}<br>


    """.format(
        context['task_instance_key_str'].split('__')[0],
        context['task_instance_key_str'].split('__')[1],
        mensaje     
        )
def task_success_回调(上下文):
外部任务成功回调(上下文、电子邮件)a1u1k6u3f0v1t0r8@justeat.slack.com')
def外部任务成功回调(上下文、电子邮件):
行=[]
对于glob.glob(“AIRFLOW_HOME/*.log”)中的文件:
打开(文件)为f时:
lines=[f.readlines()中的行对应行]
打印(行)
mensaje=线条
subject=“[Airflow]DAG{0}-任务{1}:成功”。格式(
上下文['task\u instance\u key\u str'].split('uuuu')[0],
上下文['task\u instance\u key\u str'].split('uuuu')[1]
)
html_content=“”
DAG:{0}
任务:{1}
日志:{2}
“”格式( 上下文['task\u instance\u key\u str'].split('uuuu')[0], 上下文['task\u instance\u key\u str'].split('uuuu')[1], 门萨耶 )

它似乎没有产生任何效果。我甚至没有返回一个错误。更奇怪的是,现在在气流日志中,它甚至没有提到它曾经做过的“电子邮件发送”事件:首先:传递消息 要发送有关DAG运行信息的邮件,您需要两个核心气流组件来支持您。 它们是XCOM和Python操作符=>provide\u context

  • XCOM:用于任务之间的信息交换。消息可以从Xcom进行推拉
  • 这是一个微妙但非常重要的观点:一般来说,如果 操作员需要共享信息,如文件名或少量信息 在数据中,应该考虑将它们组合成单个运算符。如果 这是绝对无法避免的,气流确实有一个功能 中所述的称为XCom的操作员交叉通信 第XComs节

  • 提供上下文(bool)
  • –如果设置为true,气流将传递一组关键字参数 可以在您的函数中使用。这组KWARG与 您可以在jinja模板中使用的内容。要想让它起作用,你需要 在函数头中定义**KWARG

    第二:在任务成功后运行电子邮件任务。 有很多方法。一个取决于DAG级别。另一个取决于任务级别。你可以仔细检查你的逻辑