diff --git a/src/Client/Workflow/WorkflowExecutionDescription.php b/src/Client/Workflow/WorkflowExecutionDescription.php new file mode 100644 index 00000000..8e1e7242 --- /dev/null +++ b/src/Client/Workflow/WorkflowExecutionDescription.php @@ -0,0 +1,22 @@ +workflowExecution, + $namespace ?? $this->namespace, + ); + } +} diff --git a/src/Interceptor/WorkflowClientCallsInterceptor.php b/src/Interceptor/WorkflowClientCallsInterceptor.php index 5a0a7e68..e09059a9 100644 --- a/src/Interceptor/WorkflowClientCallsInterceptor.php +++ b/src/Interceptor/WorkflowClientCallsInterceptor.php @@ -11,9 +11,11 @@ namespace Temporal\Interceptor; +use Temporal\Client\Workflow\WorkflowExecutionDescription; use Temporal\DataConverter\ValuesInterface; use Temporal\Interceptor\Trait\WorkflowClientCallsInterceptorTrait; use Temporal\Interceptor\WorkflowClient\CancelInput; +use Temporal\Interceptor\WorkflowClient\DescribeInput; use Temporal\Interceptor\WorkflowClient\GetResultInput; use Temporal\Interceptor\WorkflowClient\QueryInput; use Temporal\Interceptor\WorkflowClient\SignalInput; @@ -110,4 +112,12 @@ public function cancel(CancelInput $input, callable $next): void; * @return void */ public function terminate(TerminateInput $input, callable $next): void; + + /** + * @param DescribeInput $input + * @param callable(DescribeInput): void $next + * + * @return WorkflowExecutionDescription + */ + public function describe(DescribeInput $input, callable $next): WorkflowExecutionDescription; } diff --git a/src/Internal/Client/WorkflowRun.php b/src/Internal/Client/WorkflowRun.php index 63676010..ff54ebb2 100644 --- a/src/Internal/Client/WorkflowRun.php +++ b/src/Internal/Client/WorkflowRun.php @@ -11,6 +11,7 @@ namespace Temporal\Internal\Client; +use Temporal\Client\Workflow\WorkflowExecutionDescription; use Temporal\Client\WorkflowStubInterface; use Temporal\DataConverter\Type; use Temporal\Workflow\WorkflowExecution; @@ -43,4 +44,9 @@ public function getResult($type = null, int $timeout = null): mixed { return $this->stub->getResult($type ?? $this->returnType, $timeout); } + + public function describe(): WorkflowExecutionDescription + { + return $this->stub->describe(); + } } diff --git a/src/Internal/Client/WorkflowStub.php b/src/Internal/Client/WorkflowStub.php index 3f25e3cf..d6fb041f 100644 --- a/src/Internal/Client/WorkflowStub.php +++ b/src/Internal/Client/WorkflowStub.php @@ -20,6 +20,7 @@ use Temporal\Api\History\V1\HistoryEvent; use Temporal\Api\Query\V1\WorkflowQuery; use Temporal\Api\Update\V1\Request as UpdateRequestMessage; +use Temporal\Api\Workflowservice\V1\DescribeWorkflowExecutionRequest; use Temporal\Api\Workflowservice\V1\GetWorkflowExecutionHistoryRequest; use Temporal\Api\Workflowservice\V1\QueryWorkflowRequest; use Temporal\Api\Workflowservice\V1\RequestCancelWorkflowExecutionRequest; @@ -34,6 +35,7 @@ use Temporal\Client\Update\UpdateHandle; use Temporal\Client\Update\UpdateOptions; use Temporal\Client\Update\WaitPolicy; +use Temporal\Client\Workflow\WorkflowExecutionDescription; use Temporal\Client\WorkflowOptions; use Temporal\Client\WorkflowStubInterface; use Temporal\Common\Uuid; @@ -58,6 +60,7 @@ use Temporal\Interceptor\Header; use Temporal\Interceptor\HeaderInterface; use Temporal\Interceptor\WorkflowClient\CancelInput; +use Temporal\Interceptor\WorkflowClient\DescribeInput; use Temporal\Interceptor\WorkflowClient\GetResultInput; use Temporal\Interceptor\WorkflowClient\QueryInput; use Temporal\Interceptor\WorkflowClient\SignalInput; @@ -68,6 +71,7 @@ use Temporal\Interceptor\WorkflowClientCallsInterceptor; use Temporal\Internal\Interceptor\HeaderCarrier; use Temporal\Internal\Interceptor\Pipeline; +use Temporal\Internal\Mapper\WorkflowExecutionInfoMapper; use Temporal\Workflow\WorkflowExecution; final class WorkflowStub implements WorkflowStubInterface, HeaderCarrier @@ -496,6 +500,31 @@ function (GetResultInput $input): ?EncodedValues { return $result->getValue(0, $type); } + public function describe(): WorkflowExecutionDescription + { + $this->assertStarted(__FUNCTION__); + + return $this->interceptors->with( + function (DescribeInput $input): WorkflowExecutionDescription { + $request = new DescribeWorkflowExecutionRequest(); + $request->setNamespace($input->namespace); + $request->setExecution($input->workflowExecution->toProtoWorkflowExecution()); + + $response = $this->serviceClient->DescribeWorkflowExecution($request); + $mapper = new WorkflowExecutionInfoMapper($this->converter); + + return new WorkflowExecutionDescription( + info: $mapper->fromMessage($response->getWorkflowExecutionInfo()), + ); + }, + /** @see WorkflowClientCallsInterceptor::describe() */ + 'describe', + )(new DescribeInput( + $this->execution, + $this->clientOptions->namespace, + )); + } + /** * @param string $method * @psalm-assert !null $this->execution diff --git a/src/Workflow/WorkflowRunInterface.php b/src/Workflow/WorkflowRunInterface.php index 27e7d0c1..610f1bec 100644 --- a/src/Workflow/WorkflowRunInterface.php +++ b/src/Workflow/WorkflowRunInterface.php @@ -11,6 +11,7 @@ namespace Temporal\Workflow; +use Temporal\Client\Workflow\WorkflowExecutionDescription; use Temporal\DataConverter\Type; use Temporal\Exception\Client\WorkflowFailedException; @@ -47,4 +48,6 @@ public function getExecution(): WorkflowExecution; * @see DateInterval */ public function getResult($type = null, int $timeout = null): mixed; + + public function describe(): WorkflowExecutionDescription; }