diff --git a/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflow.java b/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflow.java index deae954950..6ae892c38c 100644 --- a/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflow.java +++ b/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflow.java @@ -29,6 +29,7 @@ public class DemoWorkflow extends Workflow { public void run(WorkflowContext ctx) { ctx.getLogger().info("Starting Workflow: " + ctx.getName()); ctx.getLogger().info("Instance ID: " + ctx.getInstanceId()); + ctx.getLogger().info("Current Orchestration Time: " + ctx.getCurrentInstant()); ctx.getLogger().info("Waiting for event: 'myEvent'..."); try { ctx.waitForExternalEvent("myEvent", Duration.ofSeconds(10)).await(); diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DaprWorkflowContextImpl.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DaprWorkflowContextImpl.java index e81359c565..8bd4467d30 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DaprWorkflowContextImpl.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DaprWorkflowContextImpl.java @@ -19,6 +19,7 @@ import org.slf4j.LoggerFactory; import org.slf4j.helpers.NOPLogger; import java.time.Duration; +import java.time.Instant; /** * Dapr workflow context implementation. @@ -82,6 +83,13 @@ public String getInstanceId() { return this.innerContext.getInstanceId(); } + /** + * {@inheritDoc} + */ + public Instant getCurrentInstant() { + return this.innerContext.getCurrentInstant(); + } + /** * {@inheritDoc} */ diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowContext.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowContext.java index b13a2660b0..57f2454347 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowContext.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowContext.java @@ -18,6 +18,7 @@ import java.io.PrintStream; import java.time.Duration; +import java.time.Instant; /** * Context object used by workflow implementations to perform actions such as scheduling activities, @@ -49,6 +50,12 @@ public interface WorkflowContext { */ String getInstanceId(); + /** + * Gets the current orchestration time in UTC. + * @return the current orchestration time in UTC + */ + Instant getCurrentInstant(); + /** * Completes the current workflow. * diff --git a/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DaprWorkflowContextImplTest.java b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DaprWorkflowContextImplTest.java index b5278599d3..3ea0da88e7 100644 --- a/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DaprWorkflowContextImplTest.java +++ b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DaprWorkflowContextImplTest.java @@ -45,6 +45,12 @@ public void getInstanceIdTest() { verify(mockInnerContext, times(1)).getInstanceId(); } + @Test + public void getCurrentInstantTest() { + context.getCurrentInstant(); + verify(mockInnerContext, times(1)).getCurrentInstant(); + } + @Test public void waitForExternalEventTest() { String expectedEvent = "TestEvent";