Can you access the workflow/event history out of an activity?

Hello,

I am trying to figure out if I can implement some type of flexible rate limiting in Temporal IO. For that I would like to find out, what workflows of a certain type including a certain parameter value have executed successfully during the last x minutes. Is there a possibility to do this? I would like to do that out of an activity. I am using the Go SDK

Thanks in advance!

Hi @major.hph

find out, what workflows of a certain type including a certain parameter value have executed successfully during the last x minutes

You could use visibility to query workflow executions, something like

ExecutionTime BETWEEN "2023-10-26T00:00:00+01:00" AND "2023-10-26T00:00:00+01:00" AND WorkflowType="YourType" AND ExecutionStatus="Completed"

a certain parameter value

and create a custom search attribute to add to the query

Note that visibility store is eventually consistent

some type of flexible rate limiting

can you provide more info about the use-case?

Temporal allows you to rate-limit the number of activities started per second, per taskqueue, along with other configuration

See TaskQueueActivitiesPerSecond internal package - go.temporal.io/sdk/internal - Go Packages

Antonio

Hey Antonio,

With flexible rate limiting, I mean that the time frame and the amount can be given flexibly. So I am not bound to “x per second” but can say “x per timeframe y”, like “4000 per 6 hours”. By querying the amount of executions in the last timeframe y I think I could implement it, if it is performant enough.

Thanks for the answer, I’ll check out the visibility feature!

I have a question to the visibility. If I have two namespaces, will I only receive results of executions in that namespace?

Hey Antonio,

I am also facing another difficulty. When starting 20 Executions back to back I also want to find out how many executions are running already. Therefore I changed ExecutionStatus='Completed' to (ExecutionStatus='Completed' OR ExecutionStatus='Running'). But for example for the first 15 executions it gives me 0. Is there a way to fix this, that actually the first one shows zero, the second one 1, etc? The executions are not started simultaneously but just right after each other in a for loop, but I can still observe this behaviour.

With kind regards