问题描述
我正在构建一个天蓝色的持久功能,该功能具有可能被称为作业执行一部分的活动/天蓝色功能。
我需要查看完成业务流程实例所需的总执行时间。有什么方法可以读取运行持久功能编排实例所需的总执行时间?
解决方法
您可以通过调用首次创建持久函数时返回的 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。