2016-05-24 2 views
2

Я хотел бы знать, как узнать/записать общее время выполнения для любого потока в Apache Nifi. Есть ли способ сделать это и добавить его в список атрибутов, чтобы одно и то же было передано через PutEmail?apache nifi полное время выполнения

ответ

4

Я считаю, что вам нужно добавить собственное свойство timestamp при получении потока файла, выполнить основную часть вашей обработки, а затем рассчитать атрибут прошедшего времени для включения в письмо. Вы можете сделать это с помощью двух процессоров UpdateAttribute.

  1. UpdateAttribute, получил = ${now():toNumber()}

  2. (сделать обработку)

  3. UpdateAttribute, истекшее = ${now():toNumber():minus(${received}):format("HH:mm:ss")}

Это формат истекшее время как " 00: 04: 1 6 "(4 минуты, 16 секунд). Вы можете использовать это как ${elapsed} в своем сообщении сообщения PutEmail.

Но это немного уродливое и дает приблизительное время обработки. Профинансирующая система NiFi поддерживает «Продолжительность Lineage», которая описывает истекшее время с момента ввода файла NiFi. Это гораздо более авторитетный номер. Но я не верю, что вы можете запросить длину линии из языка выражения. Вам придется отдельно запрашивать и анализировать данные о происхождении.

enter image description here

+0

Спасибо. Я пробовал этот подход, и это сработало. Мне удалось захватить время выполнения. –

4

Джеймс предоставил превосходное объяснение выше. Еще одно замечание, однако, является то, что вместо того, чтобы добавить атрибут для временной метки, когда было получено данных, вы можете просто ссылаться на lineageStartDate атрибут:

${now():toNumber():minus(${lineageStartDate}):format("HH:mm:‌​ss")} 

Это то же самое значение, которое используется для определения Lineage Продолжительность в Происхождения.

+0

Чтобы быть понятным, вы хотите сказать, что вместо того, чтобы делать: (текущее время - время начала), как было предложено @James выше, я мог бы напрямую использовать атрибут LineageStartDate, который дал бы мне продолжительность процесса? –

+0

Должно ли это быть '$ {now(): toNumber(): минус ($ {lineageStartDate}): format (" HH: mm: ss ")}'? Удивительно, я не знал, что было доступно, +1! – James

+0

Wow sorry - да, это должно быть '$ {now(): toNumber(): минус ($ {lineageStartDate}): format (" HH: mm: ss ")}'. Хороший улов на моей опечатке :) –

Смежные вопросы