Skip to content

Commit

Permalink
Expose count_workflow_executions on the temporal client (coinbase#272)
Browse files Browse the repository at this point in the history
* Expose count_workflow_executions on the temporal client

* Return a wrapped type for count_workflows response

* Add integration tests

* Remove debug log lines

* Update lib/temporal/client.rb

Fix a typo with the new return type.

Co-authored-by: jazev-stripe <128553781+jazev-stripe@users.noreply.github.com>

* Return the count value of count_workflow_executions instead of wrapping it

* Remove the example integration spec for count_workflows. ES isn't setup in github actions and while this test is nice to have, it isn't critical to have an integration spec for it because it relies on timing due to the async visibility store

---------

Co-authored-by: jazev-stripe <128553781+jazev-stripe@users.noreply.github.com>
  • Loading branch information
2 people authored and jeffschoner committed Nov 25, 2023
1 parent 0ea08e6 commit 3393e36
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/temporal.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ module Temporal
:list_open_workflow_executions,
:list_closed_workflow_executions,
:query_workflow_executions,
:count_workflow_executions,
:add_custom_search_attributes,
:list_custom_search_attributes,
:remove_custom_search_attributes,
Expand Down
11 changes: 11 additions & 0 deletions lib/temporal/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,17 @@ def query_workflow_executions(namespace, query, filter: {}, next_page_token: nil
Temporal::Workflow::Executions.new(connection: connection, status: :all, request_options: { namespace: namespace, query: query, next_page_token: next_page_token, max_page_size: max_page_size }.merge(filter))
end

# Count the number of workflows matching the provided query
#
# @param namespace [String]
# @param query [String]
#
# @return [Integer] an integer count of workflows matching the query
def count_workflow_executions(namespace, query: nil)
response = connection.count_workflow_executions(namespace: namespace, query: query)
response.count
end

# @param attributes [Hash[String, Symbol]] name to symbol for type, see INDEXED_VALUE_TYPE above
# @param namespace String, required for SQL enhanced visibility, ignored for elastic search
def add_custom_search_attributes(attributes, namespace: nil)
Expand Down
24 changes: 24 additions & 0 deletions spec/unit/lib/temporal/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1102,4 +1102,28 @@ class NamespacedWorkflow < Temporal::Workflow
end
end
end

describe '#count_workflow_executions' do
let(:response) do
Temporalio::Api::WorkflowService::V1::CountWorkflowExecutionsResponse.new(
count: 5
)
end

before do
allow(connection)
.to receive(:count_workflow_executions)
.and_return(response)
end

it 'returns the count' do
resp = subject.count_workflow_executions(namespace, query: 'ExecutionStatus="Running"')

expect(connection)
.to have_received(:count_workflow_executions)
.with(namespace: namespace, query: 'ExecutionStatus="Running"')

expect(resp).to eq(5)
end
end
end

0 comments on commit 3393e36

Please sign in to comment.