从Azure功能访问管道活动状态

时间:2017-04-19 15:35:03

标签: azure azure-functions azure-data-factory

我有一个触发管道的Azure功能,我可以轮询管道状态以检查它何时完成使用:Pipeline.Properties.RuntimeInfo.PipelineState

我的管道使用了几个并行的复制活动,我希望能够在失败的情况下访问这些活动的状态。 Azure文档描述了如何访问管道活动,但是您只能获取名称和描述等静态属性,而不能获取状态等动态属性(就像通过其RuntimeInfo属性可以获得管道一样)。

为了完整起见,我使用以下方式访问了活动列表:

IList<Microsoft.Azure.Management.DataFactories.Models.Activity> activityList = plHandle.Pipeline.Properties.Activities;

是否可以通过编程方式检查个人活动状态?

2 个答案:

答案 0 :(得分:1)

当然可能。

我使用Azure模块中的ADF PowerShell cmdlet来监视我们的数据工厂。

使用 Get-AzureRmDataFactoryActivityWindow 命令,可能会执行以下操作,以满足您的需求。

例如:

$ActivityWindows = Get-AzureRmDataFactoryActivityWindow `
    -DataFactoryName $ADFName.DataFactoryName `
    -ResourceGroupName $ResourceGroup `
    | ? {$_.WindowStart -ge $Now} `
    | SELECT ActivityName, ActivityType, WindowState, RunStart, InputDatasets, OutputDatasets `
    | Sort-Object ActivityName

这将为您提供活动级别详细信息,包括状态。为:

  • 就绪
  • 正在进行中
  • 等待
  • 失败

...我列出它们是因为它们与您在门户网站刀片中看到的略有不同。

如果您有特定活动的多个输入和输出,则数据集也是数组。

此处提供了更多ADF cmdlet:https://docs.microsoft.com/en-gb/powershell/module/azurerm.datafactories/?view=azurermps-3.8.0

希望这有帮助

答案 1 :(得分:0)

我设法通过访问管道的DataSliceRuns(即活动)来解决此问题,如下所示:

var datasets = client.Datasets.ListAsync(<resourceGroupName>, <DataFactoryName>).Result;

    foreach (var dataset in datasets.Datasets)
    {
        // Check the activity statuses for the pipelines activities.
        var datasliceRunlistResponse = client.DataSliceRuns.List(<resourceGroupName>, <dataFactoryName>,<DataSetName>, new DataSliceRunListParameters()
                                                                        {
                                                                            DataSliceStartTime = PipelineStartTime.ConvertToISO8601DateTimeString()
                                                                        });

        foreach (DataSliceRun run in datasliceRunlistResponse.DataSliceRuns)
        {
            // Do stuff...
        }
    }