This [1] blog seems amazingly appropriate and wow do we need these/any such
fields we intend to truly honor in a prominent place in the docs.  Super
useful...

[1] https://jameswing.net/nifi/nifi-internal-fields.html

Thanks

On Thu, Feb 15, 2024 at 8:35 AM Mark Payne <marka...@hotmail.com> wrote:

> Jim,
>
> You can actually reference “lastQueueDate” in Expression Language. It is
> formatted as number of milliseconds since epoch.
>
> So you might have a RouteOnAttribute that has a property named “old” with
> a value of:
> ${lastQueueDate:lt( ${now():minus(10000)} )}
>
> So any FlowFile that has been queued for more than 10 seconds would be
> routed to “old”, anything else to “unmatched”
>
> Thanks
> -Mark
>
>
> On Feb 15, 2024, at 10:18 AM, James McMahon <jsmcmah...@gmail.com> wrote:
>
> That would work - what a good suggestion. I'll do that. I can format the
> resulting number and then RouteOnAttribute by the desired subset of the
> result.
> Something like this to set attribute dt.failure:
>
> ${now():toNumber():toDate("yyyy-MM-ddHH:mm:ss"):format("yyyyMMddHHmmss","EST")}
> Then I can effectively route the files.
> Thank you Jim S.
>
> On Thu, Feb 15, 2024 at 9:55 AM Jim Steinebrey <jrsteineb...@gmail.com>
> wrote:
>
>> You could add an UpdateAttribute processor first in the failure path to
>> add a new attribute which contains the time the error occurred by using the
>> ${now()} or ${now():toNumber()} expression language function.
>>
>> https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#now
>>
>> Then later on in the flow you can compare current time to the saved error
>> time to see how much time has elapsed.
>>
>> — Jim
>>
>>
>> On Feb 15, 2024, at 9:44 AM, James McMahon <jsmcmah...@gmail.com> wrote:
>>
>> As it turns out lineageStartDate and Queued Duration are very different.
>> Without being able to get at Queued Duration as an attribute, it appears we
>> cannot RouteOnAttribute to filter thousands in a queue by anything like
>> hours they have been in queue.
>> Why would this be helpful? Let us say we have an InvokeHttp processor
>> making calls to a REST endpoint. We leave for a weekend and return to find
>> 5000 files in the Failure queue from this processor. It would be most
>> helpful to identify the start time and end time of these 5000 failures. We
>> can't do that reviewing only the first 100 flowfiles in the queue from the
>> UI.
>> One can make an assumption that all of these 5000 flowfiles that failed
>> InvokeHttp share a similar range of lineageStartDate, but that will not
>> necessarily be true depending on flow complexity.
>>
>> On Wed, Feb 14, 2024 at 9:49 AM James McMahon <jsmcmah...@gmail.com>
>> wrote:
>>
>>> What a great workaround, thank you once again Mike. I'll put this in and
>>> use it now.
>>> Jim
>>>
>>> On Tue, Feb 13, 2024 at 4:41 PM Michael Moser <moser...@gmail.com>
>>> wrote:
>>>
>>>> Hello James,
>>>>
>>>> I'm not aware of a way to access Queued Duration using expression
>>>> language, but you can access the Lineage Duration information.  The Getting
>>>> Started Guide mentions both entryDate and lineageStartDate as immutable
>>>> attributes on all flowfiles.  These are numbers of milliseconds since
>>>> epoch.  If you need them in a readable format, you can use the format()
>>>> function.
>>>>
>>>> simple examples:
>>>> ${entryDate} = 1707859943778
>>>> ${lineageStartDate} = 1707859943778
>>>> ${lineageStartDate:format("yyyy-MM-dd HH:mm:ss.SSS")} = 2024-02-13
>>>> 21:32:23.778
>>>>
>>>> -- Mike
>>>>
>>>>
>>>> On Mon, Feb 12, 2024 at 11:38 AM James McMahon <jsmcmah...@gmail.com>
>>>> wrote:
>>>>
>>>>> When we examine the contents of a queue through the UI and select a
>>>>> flowfile from the resulting list, we see FlowFile Details in the Details
>>>>> tab. Are those key/values accessible from nifi expression language? I 
>>>>> would
>>>>> like to access Queued Duration. I have a queue that holds flowfiles with
>>>>> non-successful return codes for calls to REST services, and I want to 
>>>>> route
>>>>> depending on how long these flowfiles have been sitting in my error queue
>>>>> to isolate the window when the REST service was unavailable.
>>>>> Thank you for any examples that show how we can access these keys and
>>>>> values.
>>>>>
>>>>
>>
>

Reply via email to