Azure持久功能:获取执行时间

问题描述

我正在构建一个天蓝色的持久功能,该功能具有可能被称为作业执行一部分的活动/天蓝色功能

我需要查看完成业务流程实例所需的总执行时间。有什么方法可以读取运行持久功能编排实例所需的总执行时间?

解决方法

您可以通过调用首次创建持久函数时返回的 statusQueryGetUri 来计算编排的总执行时间。调用 URI 应如下所示:

http://<functionappname>.azurewebsites.net/runtime/webhooks/durabletask/instances/<instanceId>?taskHub=<taskHub>&connection=<connectionName>&code=<systemKey>&showHistory=true

响应应如下所示:

{
  "createdTime": "2018-02-28T05:18:49Z","historyEvents": [
      ...
  ],"input": null,"customStatus": { "nextActions": ["A","B","C"],"foo": 2 },"lastUpdatedTime": "2018-02-28T05:18:54Z","output": [
      ...
  ],"runtimeStatus": "Completed"
}

可以通过轮询状态 URI 来确定持续时间,直到 runtimeStatus 达到任何终止状态(失败、取消、终止或完成),然后减去 createdTime 来自 lastUpdatedTime

以下 Typescript 片段显示了如何处理上述 JSON 响应(解析为状态变量)以将持续时间显示为 hh:mm:ss:

  formatDuration(status: DurableFunctionJob): string {
    const diff:number = (new Date(status.lastUpdatedTime).getTime() 
                         - new Date(status.createdTime).getTime());
    return new Date(diff).toISOString().substr(11,8);
  }

对于示例响应,此函数输出 00:00:05