Example #1
0
 public void ActivityRuns_QueryByPipelineRun()
 {
     RunTest("ActivityRuns_QueryByPipelineRun", (example, client, responseCode) =>
     {
         RunFilterParameters filterParams   = GetTypedParameter <RunFilterParameters>(example, client, "filterParameters");
         ActivityRunsQueryResponse response = client.ActivityRuns.QueryByPipelineRun(RGN(example), FN(example), GetTypedParameter <string>(example, client, "runId"), filterParams);
         CheckResponseBody(example, client, responseCode, response);
     });
 }
Example #2
0
        public static void MonitorActivityStatus(DataFactoryManagementClient client, CreateRunResponse runResponse, PipelineRun pipelineRun)
        {
            Console.WriteLine("Checking copy activity run details...");

            RunFilterParameters filterParams = new RunFilterParameters(
                DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddMinutes(10));
            ActivityRunsQueryResponse queryResponse = client.ActivityRuns.QueryByPipelineRun(
                Constants.resourceGroup, Constants.dataFactoryName, runResponse.RunId, filterParams);

            if (pipelineRun.Status == "Succeeded")
            {
                Console.WriteLine(queryResponse.Value.First().Output);
            }
            else
            {
                Console.WriteLine(queryResponse.Value.First().Error);
            }
            Console.WriteLine("\nPress any key to exit...");
            Console.ReadKey();
        }
Example #3
0
        static void printPipelines(DataFactoryManagementClient client, PipelineRunsQueryResponse pipelineRuns)
        {
            var    enumerator = pipelineRuns.Value.GetEnumerator();
            string runId;

            PipelineRun pipelineRun;

            while (enumerator.MoveNext())
            {
                pipelineRun = enumerator.Current;
                if (pipelineRun.PipelineName == pipelineName)
                {
                    Console.BackgroundColor = ConsoleColor.White;
                    Console.ForegroundColor = ConsoleColor.Black;

                    runId = pipelineRun.RunId;
                    Console.Write("Start:{1}, End:{2}, Duration(ms):{3}, RunID : {0} - ", runId.ToString(), pipelineRun.RunStart.ToString(), pipelineRun.RunEnd.ToString(), pipelineRun.DurationInMs);
                    if (pipelineRun.Status != "Succeeded")
                    {
                        Console.BackgroundColor = ConsoleColor.Yellow;
                        Console.ForegroundColor = ConsoleColor.Red;
                    }
                    Console.WriteLine("{0}", pipelineRun.Status);

                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.White;

                    Console.WriteLine("Folder Name :{0}", pipelineRun.Parameters.Count == 0? "N/A" : pipelineRun.Parameters["sourcefolder"].ToString());
                    Console.WriteLine("File Name :{0}", pipelineRun.Parameters.Count == 0 ? "N/A" : pipelineRun.Parameters["sourcefile"].ToString());

                    ActivityRunsQueryResponse activities = client.ActivityRuns.QueryByPipelineRun(resourceGroupName, dataFactoryName, runId, new RunFilterParameters(startAfter, endAfter));
                    printActivities(client, activities);

                    while (activities.ContinuationToken != null)
                    {
                        activities = client.ActivityRuns.QueryByPipelineRun(resourceGroupName, dataFactoryName, runId, new RunFilterParameters(startAfter, endAfter, activities.ContinuationToken));
                        printActivities(client, activities);
                    }
                }
            }
        }
Example #4
0
        static void Main(string[] args)
        {
            // Set variables
            string tenantID          = "<your tenant ID>";
            string applicationId     = "<your application ID>";
            string authenticationKey = "<your authentication key for the application>";
            string subscriptionId    = "<your subscription ID where the data factory resides>";
            string resourceGroup     = "<your resource group where the data factory resides>";
            string region            = "<the location of your resource group>";
            string dataFactoryName   =
                "<specify the name of data factory to create. It must be globally unique.>";
            string storageAccount = "<your storage account name to copy data>";
            string storageKey     = "<your storage account key>";
            // specify the container and input folder from which all files
            // need to be copied to the output folder.
            string inputBlobPath =
                "<path to existing blob(s) to copy data from, e.g. containername/inputdir>";
            //specify the contains and output folder where the files are copied
            string outputBlobPath =
                "<the blob path to copy data to, e.g. containername/outputdir>";

            // name of the Azure Storage linked service, blob dataset, and the pipeline
            string storageLinkedServiceName = "AzureStorageLinkedService";
            string blobDatasetName          = "BlobDataset";
            string pipelineName             = "Adfv2QuickStartPipeline";


            // Authenticate and create a data factory management client
            var context                 = new AuthenticationContext("https://login.microsoftonline.com/" + tenantID);
            ClientCredential     cc     = new ClientCredential(applicationId, authenticationKey);
            AuthenticationResult result = context.AcquireTokenAsync(
                "https://management.azure.com/", cc).Result;
            ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
            var client = new DataFactoryManagementClient(cred)
            {
                SubscriptionId = subscriptionId
            };

            // Create a data factory
            Console.WriteLine("Creating data factory " + dataFactoryName + "...");
            Factory dataFactory = new Factory
            {
                Location = region,
                Identity = new FactoryIdentity()
            };

            client.Factories.CreateOrUpdate(resourceGroup, dataFactoryName, dataFactory);
            Console.WriteLine(
                SafeJsonConvert.SerializeObject(dataFactory, client.SerializationSettings));

            while (client.Factories.Get(resourceGroup, dataFactoryName).ProvisioningState ==
                   "PendingCreation")
            {
                System.Threading.Thread.Sleep(1000);
            }

            // Create an Azure Storage linked service
            Console.WriteLine("Creating linked service " + storageLinkedServiceName + "...");

            LinkedServiceResource storageLinkedService = new LinkedServiceResource(
                new AzureStorageLinkedService
            {
                ConnectionString = new SecureString(
                    "DefaultEndpointsProtocol=https;AccountName=" + storageAccount +
                    ";AccountKey=" + storageKey)
            }
                );

            client.LinkedServices.CreateOrUpdate(
                resourceGroup, dataFactoryName, storageLinkedServiceName, storageLinkedService);
            Console.WriteLine(SafeJsonConvert.SerializeObject(
                                  storageLinkedService, client.SerializationSettings));


            // Create an Azure Blob dataset
            Console.WriteLine("Creating dataset " + blobDatasetName + "...");
            DatasetResource blobDataset = new DatasetResource(
                new AzureBlobDataset
            {
                LinkedServiceName = new LinkedServiceReference
                {
                    ReferenceName = storageLinkedServiceName
                },
                FolderPath = new Expression {
                    Value = "@{dataset().path}"
                },
                Parameters = new Dictionary <string, ParameterSpecification>
                {
                    { "path", new ParameterSpecification {
                          Type = ParameterType.String
                      } }
                }
            }
                );

            client.Datasets.CreateOrUpdate(
                resourceGroup, dataFactoryName, blobDatasetName, blobDataset);
            Console.WriteLine(
                SafeJsonConvert.SerializeObject(blobDataset, client.SerializationSettings));

            // Create a pipeline with a copy activity
            Console.WriteLine("Creating pipeline " + pipelineName + "...");
            PipelineResource pipeline = new PipelineResource
            {
                Parameters = new Dictionary <string, ParameterSpecification>
                {
                    { "inputPath", new ParameterSpecification {
                          Type = ParameterType.String
                      } },
                    { "outputPath", new ParameterSpecification {
                          Type = ParameterType.String
                      } }
                },
                Activities = new List <Activity>
                {
                    new CopyActivity
                    {
                        Name   = "CopyFromBlobToBlob",
                        Inputs = new List <DatasetReference>
                        {
                            new DatasetReference()
                            {
                                ReferenceName = blobDatasetName,
                                Parameters    = new Dictionary <string, object>
                                {
                                    { "path", "@pipeline().parameters.inputPath" }
                                }
                            }
                        },
                        Outputs = new List <DatasetReference>
                        {
                            new DatasetReference
                            {
                                ReferenceName = blobDatasetName,
                                Parameters    = new Dictionary <string, object>
                                {
                                    { "path", "@pipeline().parameters.outputPath" }
                                }
                            }
                        },
                        Source = new BlobSource {
                        },
                        Sink   = new BlobSink {
                        }
                    }
                }
            };

            client.Pipelines.CreateOrUpdate(resourceGroup, dataFactoryName, pipelineName, pipeline);
            Console.WriteLine(SafeJsonConvert.SerializeObject(pipeline, client.SerializationSettings));

            // Create a pipeline run
            Console.WriteLine("Creating pipeline run...");
            Dictionary <string, object> parameters = new Dictionary <string, object>
            {
                { "inputPath", inputBlobPath },
                { "outputPath", outputBlobPath }
            };
            CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
                resourceGroup, dataFactoryName, pipelineName, parameters: parameters
                ).Result.Body;

            Console.WriteLine("Pipeline run ID: " + runResponse.RunId);

            // Monitor the pipeline run
            Console.WriteLine("Checking pipeline run status...");
            PipelineRun pipelineRun;

            while (true)
            {
                pipelineRun = client.PipelineRuns.Get(
                    resourceGroup, dataFactoryName, runResponse.RunId);
                Console.WriteLine("Status: " + pipelineRun.Status);
                if (pipelineRun.Status == "InProgress" || pipelineRun.Status == "Queued")
                {
                    System.Threading.Thread.Sleep(15000);
                }
                else
                {
                    break;
                }
            }

            // Check the copy activity run details
            Console.WriteLine("Checking copy activity run details...");

            RunFilterParameters filterParams = new RunFilterParameters(
                DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddMinutes(10));
            ActivityRunsQueryResponse queryResponse = client.ActivityRuns.QueryByPipelineRun(
                resourceGroup, dataFactoryName, runResponse.RunId, filterParams);

            if (pipelineRun.Status == "Succeeded")
            {
                Console.WriteLine(queryResponse.Value.First().Output);
            }
            else
            {
                Console.WriteLine(queryResponse.Value.First().Error);
            }
            Console.WriteLine("\nPress any key to exit...");
            Console.ReadKey();
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string  requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic inputData   = JsonConvert.DeserializeObject(requestBody);

            string tenantId          = inputData?.tenantId;
            string applicationId     = inputData?.applicationId;
            string authenticationKey = inputData?.authenticationKey;
            string subscriptionId    = inputData?.subscriptionId;
            string resourceGroup     = inputData?.resourceGroup;
            string factoryName       = inputData?.factoryName;
            string pipelineName      = inputData?.pipelineName;
            string runId             = inputData?.runId;

            //Check body for values
            if (
                tenantId == null ||
                applicationId == null ||
                authenticationKey == null ||
                subscriptionId == null ||
                resourceGroup == null ||
                factoryName == null ||
                pipelineName == null ||
                runId == null
                )
            {
                return(new BadRequestObjectResult("Invalid request body, value missing."));
            }

            //Create a data factory management client
            var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
            ClientCredential         cc     = new ClientCredential(applicationId, authenticationKey);
            AuthenticationResult     result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result;
            ServiceClientCredentials cred   = new TokenCredentials(result.AccessToken);
            var client = new DataFactoryManagementClient(cred)
            {
                SubscriptionId = subscriptionId
            };

            //Get pipeline details
            int      daysOfRuns = 7; //max duration for mandatory RunFilterParameters
            DateTime today      = DateTime.Now;
            DateTime lastWeek   = DateTime.Now.AddDays(-daysOfRuns);

            PipelineRun pipelineRun;

            pipelineRun = client.PipelineRuns.Get(resourceGroup, factoryName, runId);

            RunFilterParameters       filterParams  = new RunFilterParameters(lastWeek, today);
            ActivityRunsQueryResponse queryResponse = client.ActivityRuns.QueryByPipelineRun(
                resourceGroup, factoryName, runId, filterParams);

            //Create initial output content
            dynamic outputValues = new JObject();

            outputValues.PipelineName       = pipelineName;
            outputValues.PipelineStatus     = pipelineRun.Status;
            outputValues.RunId              = runId;
            outputValues.ResponseCount      = queryResponse.Value.Count;
            outputValues.ResponseErrorCount = 0;
            outputValues.Errors             = new JArray();
            JObject errorDetails;

            log.LogInformation("Pipeline status: " + pipelineRun.Status);
            log.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString());

            //Loop over activities in pipeline run
            foreach (var activity in queryResponse.Value)
            {
                if (String.IsNullOrEmpty(activity.Error.ToString()))
                {
                    continue; //just incase
                }

                //Parse error output to customise output
                dynamic outputData = JsonConvert.DeserializeObject(activity.Error.ToString());

                string errorCode    = outputData?.errorCode;
                string errorType    = outputData?.failureType;
                string errorMessage = outputData?.message;

                //Get output details
                if (!String.IsNullOrEmpty(errorCode))
                {
                    log.LogInformation("Activity name: " + activity.ActivityName);
                    log.LogInformation("Activity type: " + activity.ActivityType);
                    log.LogInformation("Error message: " + errorMessage);

                    outputValues.ResponseErrorCount += 1;

                    //Construct custom error information block
                    errorDetails = JObject.Parse("{ \"ActivityName\": \"" + activity.ActivityName +
                                                 "\", \"ActivityType\": \"" + activity.ActivityType +
                                                 "\", \"ErrorCode\": \"" + errorCode +
                                                 "\", \"ErrorType\": \"" + errorType +
                                                 "\", \"ErrorMessage\": \"" + errorMessage +
                                                 "\" }");

                    outputValues.Errors.Add(errorDetails);
                }
            }
            return(new OkObjectResult(outputValues));
        }
        public static void QueryActivityRuns(string subscriptionId, string resourceGroup, string factoryName, string runId, string parentRunId, RunFilterParameters filterParameterActivityRuns, Logging logging, ref DataTable dt)
        {
            #region QueryActivityRuns

            logging.LogInformation(String.Format("QueryActivityRuns - RunId {0}", runId));
            string outputString = string.Empty;



            using (var client = DataFactoryClient.CreateDataFactoryClient(subscriptionId))
            {
                //Get pipeline status with provided run id



                logging.LogInformation(String.Format("QueryActivityRuns - RunId {0} - API QueryByPipelineRun Start", runId));
                ActivityRunsQueryResponse activityRunsQueryResponse = client.ActivityRuns.QueryByPipelineRun(resourceGroup, factoryName, runId, filterParameterActivityRuns);
                logging.LogInformation(String.Format("QueryActivityRuns - RunId {0} - API QueryByPipelineRun End", runId));
                var         enumeratorActivity = activityRunsQueryResponse.Value.GetEnumerator();
                ActivityRun activityRun;

                for (bool hasMoreActivityRuns = enumeratorActivity.MoveNext(); hasMoreActivityRuns;)
                {
                    activityRun         = enumeratorActivity.Current;
                    hasMoreActivityRuns = enumeratorActivity.MoveNext();

                    DataRow dr = dt.NewRow();
                    dr["ActivityName"]     = activityRun.ActivityName ?? (object)DBNull.Value;
                    dr["RunId"]            = parentRunId;
                    dr["ActivityRunStart"] = activityRun.ActivityRunStart ?? (object)DBNull.Value;
                    dr["ActivityRunEnd"]   = activityRun.ActivityRunEnd ?? (object)DBNull.Value;
                    dr["ActivityRunId"]    = activityRun.ActivityRunId ?? (object)DBNull.Value;
                    dr["ActivityType"]     = activityRun.ActivityType ?? (object)DBNull.Value;
                    //dr["AdditionalProperties"] = activityRun.AdditionalProperties ?? (object)DBNull.Value;
                    dr["DurationInMs"] = activityRun.DurationInMs ?? (object)DBNull.Value;
                    //dr["Error"] = activityRun.Error ?? (object)DBNull.Value;
                    //dr["Input"] = activityRun.Input ?? (object)DBNull.Value;
                    //dr["LinkedServiceName"] = activityRun.LinkedServiceName ?? (object)DBNull.Value;
                    dr["OutPut"]        = activityRun.Output ?? (object)DBNull.Value;
                    dr["PipelineName"]  = activityRun.PipelineName ?? (object)DBNull.Value;
                    dr["PipelineRunId"] = activityRun.PipelineRunId ?? (object)DBNull.Value;
                    dr["Status"]        = activityRun.Status ?? (object)DBNull.Value;
                    dt.Rows.Add(dr);

                    if (activityRun.ActivityType == "ExecutePipeline")
                    {
                        string _runId = Shared.JsonHelpers.GetStringValueFromJSON(logging, "pipelineRunId", (JObject)activityRun.Output, null, true);
                        if (!String.IsNullOrEmpty(_runId))
                        {
                            QueryActivityRuns(subscriptionId, resourceGroup, factoryName, _runId, parentRunId, filterParameterActivityRuns, logging, ref dt);
                        }
                        else
                        {
                            logging.LogInformation(String.Format("QueryActivityRuns - RunId Is null  for {0} ", (JObject)activityRun.Output));
                        }
                    }
                }
            }

            #endregion
        }
Example #7
0
        static void printActivities(DataFactoryManagementClient client, ActivityRunsQueryResponse activity)
        {
            var         activityEnumerator = activity.Value.GetEnumerator();
            ActivityRun activityRun;

            while (activityEnumerator.MoveNext())
            {
                activityRun = activityEnumerator.Current;

                //Console.WriteLine("Activity Name:{0}, Start:{1}, End:{2}, Duration(ms):{3}, Status:{4}", activityRun.ActivityName, activityRun.ActivityRunStart.ToString(), activityRun.ActivityRunEnd.ToString(), activityRun.DurationInMs.ToString(), activityRun.Status);
                Console.Write("     {0} : {1} ~ {2}({3} ms) - ", activityRun.ActivityName, activityRun.ActivityRunStart.ToString(), activityRun.ActivityRunEnd.ToString(), activityRun.DurationInMs.ToString());

                if (activityRun.Status != "Succeeded")
                {
                    Console.BackgroundColor = ConsoleColor.Yellow;
                    Console.ForegroundColor = ConsoleColor.Red;
                }
                Console.WriteLine("{0}", activityRun.Status);
                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.White;

                if (activityRun.Output != null)
                {
                    JObject jObject = JObject.Parse(activityRun.Output.ToString());
                    Console.WriteLine("         Data Read : {0}", jObject.SelectToken("dateRead"));
                    Console.WriteLine("         Files read : {0}", jObject.SelectToken("filesRead"));
                    Console.WriteLine("         Files written : {0}", jObject.SelectToken("filesWritten"));
                    Console.WriteLine("         Copy duration : {0}(s)", jObject.SelectToken("copyDuration"));

                    if (jObject.SelectToken("errors") != null)
                    {
                        if (jObject.SelectToken("errors").Count() > 0)
                        {
                            JArray jErrorArray = JArray.Parse(jObject.SelectToken("errors").ToString());
                            foreach (JObject jError in jErrorArray)
                            {
                                JObject jErrorObject = JObject.Parse(jError.ToString());

                                Console.ForegroundColor = ConsoleColor.Red;
                                Console.WriteLine("Error Code: {0}, Error Message : {1}", jErrorObject.SelectToken("Code").ToString(), jErrorObject.SelectToken("Message").ToString());
                                Console.ForegroundColor = ConsoleColor.White;
                            }
                        }
                    }

                    /*jObject.SelectToken("dateRead");
                     * dataWritten
                     * filesRead
                     * filesWritten
                     * sourcePeakConnections
                     * sinkPeakConnections
                     * copyDuration
                     * throughput
                     * errors
                     * effectiveIntegrationRuntime
                     * usedDataIntegrationUnits
                     * usedParallelCopies
                     */

                    //Execution Details
                    JArray executionDetails = (JArray)jObject.SelectToken("executionDetails");
                    if (executionDetails != null)
                    {
                        foreach (JToken executionDetail in executionDetails)
                        {
                            Console.WriteLine("             Source Type : {0}", executionDetail.SelectToken("source").SelectToken("type"));
                            Console.WriteLine("             Sink Type : {0}", executionDetail.SelectToken("sink").SelectToken("type"));
                            Console.WriteLine("             Status : {0}", executionDetail.SelectToken("status"));
                            Console.WriteLine("             Duration : {0}", executionDetail.SelectToken("duration"));
                            Console.WriteLine("             UsedParallelCopies : {0}", executionDetail.SelectToken("usedParallelCopies"));

                            /*
                             * Console.WriteLine(executionDetail.SelectToken("sink").SelectToken("type"));
                             * Console.WriteLine(executionDetail.SelectToken("status"));
                             * sink.type
                             * start
                             * duration
                             * usedDataIntegrationUnits
                             * usedParallelCopies
                             * detailedDurations.queuingDuration
                             * detailedDurations.transferDuration
                             */
                        }
                    }
                }
            }
        }
Example #8
0
        //static void Main(string[] args)
        static async System.Threading.Tasks.Task Main(string[] args)
        {
            // Set variables
            string tenantID          = "microsoft.onmicrosoft.com";
            string User              = "******";
            string applicationId     = "<your application ID>";
            string authenticationKey = "<your authentication key for the application>";
            string subscriptionId    = "b67993e8-0937-4812-af89-520a495da302";
            string resourceGroup     = "vchmeha";
            string region            = "West Central US";
            string dataFactoryName   = "ADFv2HaHu";
            string storageAccount    = "fromblob";
            string storageKey        = "gREZ3TbADUcfWJ+ryfxOH7FKrlCKobMHrpS7Z2PPS/gQIsH02LHAGedlqYVpxm/PeWHDJsU/wkBmNz1Q20Rwyg==";
            // specify the container and input folder from which all files
            // need to be copied to the output folder.
            string inputBlobPath = "adftutorial/input";
            //specify the contains and output folder where the files are copied
            string outputBlobPath = "adftutorial/output";

            // name of the Azure Storage linked service, blob dataset, and the pipeline
            string storageLinkedServiceName = "AzureStorageLinkedService";
            string blobDatasetName          = "BlobDataset";
            string pipelineName             = "Adfv2QuickStartPipeline";

            // Authenticate and create a data factory management client
            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var token = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/");

            var cred   = new TokenCredentials(token);
            var client = new DataFactoryManagementClient(cred)
            {
                SubscriptionId = subscriptionId
            };

            // Create a data factory
            Console.WriteLine("Creating data factory " + dataFactoryName + "...");
            Factory dataFactory = new Factory
            {
                Location = region,
                Identity = new FactoryIdentity()
            };

            client.Factories.CreateOrUpdate(resourceGroup, dataFactoryName, dataFactory);
            Console.WriteLine(
                SafeJsonConvert.SerializeObject(dataFactory, client.SerializationSettings));

            while (client.Factories.Get(resourceGroup, dataFactoryName).ProvisioningState ==
                   "PendingCreation")
            {
                System.Threading.Thread.Sleep(1000);
            }


            // Create an Azure Storage linked service
            Console.WriteLine("Creating linked service " + storageLinkedServiceName + "...");

            LinkedServiceResource storageLinkedService = new LinkedServiceResource(
                new AzureStorageLinkedService
            {
                ConnectionString = new SecureString(
                    "DefaultEndpointsProtocol=https;AccountName=" + storageAccount +
                    ";AccountKey=" + storageKey)
            }
                );

            client.LinkedServices.CreateOrUpdate(
                resourceGroup, dataFactoryName, storageLinkedServiceName, storageLinkedService);
            Console.WriteLine(SafeJsonConvert.SerializeObject(
                                  storageLinkedService, client.SerializationSettings));

            // Create an Azure Blob dataset
            Console.WriteLine("Creating dataset " + blobDatasetName + "...");
            DatasetResource blobDataset = new DatasetResource(
                new AzureBlobDataset
            {
                LinkedServiceName = new LinkedServiceReference
                {
                    ReferenceName = storageLinkedServiceName
                },
                FolderPath = new Expression {
                    Value = "@{dataset().path}"
                },
                Parameters = new Dictionary <string, ParameterSpecification>
                {
                    { "path", new ParameterSpecification {
                          Type = ParameterType.String
                      } }
                }
            }
                );

            client.Datasets.CreateOrUpdate(
                resourceGroup, dataFactoryName, blobDatasetName, blobDataset);
            Console.WriteLine(
                SafeJsonConvert.SerializeObject(blobDataset, client.SerializationSettings));

            // Create a pipeline with a copy activity
            Console.WriteLine("Creating pipeline " + pipelineName + "...");
            PipelineResource pipeline = new PipelineResource
            {
                Parameters = new Dictionary <string, ParameterSpecification>
                {
                    { "inputPath", new ParameterSpecification {
                          Type = ParameterType.String
                      } },
                    { "outputPath", new ParameterSpecification {
                          Type = ParameterType.String
                      } }
                },
                Activities = new List <Activity>
                {
                    new CopyActivity
                    {
                        Name   = "CopyFromBlobToBlob",
                        Inputs = new List <DatasetReference>
                        {
                            new DatasetReference()
                            {
                                ReferenceName = blobDatasetName,
                                Parameters    = new Dictionary <string, object>
                                {
                                    { "path", "@pipeline().parameters.inputPath" }
                                }
                            }
                        },
                        Outputs = new List <DatasetReference>
                        {
                            new DatasetReference
                            {
                                ReferenceName = blobDatasetName,
                                Parameters    = new Dictionary <string, object>
                                {
                                    { "path", "@pipeline().parameters.outputPath" }
                                }
                            }
                        },
                        Source = new BlobSource {
                        },
                        Sink   = new BlobSink {
                        }
                    }
                }
            };

            client.Pipelines.CreateOrUpdate(resourceGroup, dataFactoryName, pipelineName, pipeline);
            Console.WriteLine(SafeJsonConvert.SerializeObject(pipeline, client.SerializationSettings));

            // Create a pipeline run
            Console.WriteLine("Creating pipeline run...");
            Dictionary <string, object> parameters = new Dictionary <string, object>
            {
                { "inputPath", inputBlobPath },
                { "outputPath", outputBlobPath }
            };
            CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
                resourceGroup, dataFactoryName, pipelineName, parameters: parameters
                ).Result.Body;

            Console.WriteLine("Pipeline run ID: " + runResponse.RunId);

            // Monitor the pipeline run
            Console.WriteLine("Checking pipeline run status...");
            PipelineRun pipelineRun;

            while (true)
            {
                pipelineRun = client.PipelineRuns.Get(
                    resourceGroup, dataFactoryName, runResponse.RunId);
                Console.WriteLine("Status: " + pipelineRun.Status);
                if (pipelineRun.Status == "InProgress" || pipelineRun.Status == "Queued")
                {
                    System.Threading.Thread.Sleep(15000);
                }
                else
                {
                    break;
                }
            }

            // Check the copy activity run details
            Console.WriteLine("Checking copy activity run details...");

            RunFilterParameters filterParams = new RunFilterParameters(
                DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddMinutes(10));
            ActivityRunsQueryResponse queryResponse = client.ActivityRuns.QueryByPipelineRun(
                resourceGroup, dataFactoryName, runResponse.RunId, filterParams);

            if (pipelineRun.Status == "Succeeded")
            {
                Console.WriteLine(queryResponse.Value.First().Output);
            }
            else
            {
                Console.WriteLine(queryResponse.Value.First().Error);
            }
            Console.WriteLine("\nPress any key to exit...");
            Console.ReadKey();
        }
        public virtual List <PSActivityRun> ListActivityRuns(ActivityRunFilterOptions activityRunFilter)
        {
            List <PSActivityRun> activityRuns = new List <PSActivityRun>();
            var runFilters = new RunFilterParameters()
            {
                LastUpdatedAfter  = activityRunFilter.RunStartedAfter,
                LastUpdatedBefore = activityRunFilter.RunStartedBefore,
                Filters           = new List <RunQueryFilter>(),
                OrderBy           = new List <RunQueryOrderBy>(),
            };

            if (activityRunFilter.ActivityName != null)
            {
                runFilters.Filters.Add(
                    new RunQueryFilter()
                {
                    Operand          = RunQueryFilterOperand.ActivityName,
                    OperatorProperty = RunQueryFilterOperator.Equals,
                    Values           = new List <string>()
                    {
                        activityRunFilter.ActivityName
                    }
                });
            }
            if (activityRunFilter.Status != null)
            {
                runFilters.Filters.Add(
                    new RunQueryFilter()
                {
                    Operand          = RunQueryFilterOperand.Status,
                    OperatorProperty = RunQueryFilterOperator.Equals,
                    Values           = new List <string>()
                    {
                        activityRunFilter.Status
                    }
                });
            }
            ActivityRunsQueryResponse response = this.DataFactoryManagementClient.ActivityRuns.QueryByPipelineRun(
                activityRunFilter.ResourceGroupName,
                activityRunFilter.DataFactoryName,
                activityRunFilter.PipelineRunId,
                runFilters);

            activityRuns.AddRange(response.Value.Select(ar =>
                                                        new PSActivityRun(ar, activityRunFilter.ResourceGroupName, activityRunFilter.DataFactoryName)));

            string continuationToken = response.ContinuationToken;

            while (!string.IsNullOrWhiteSpace(continuationToken))
            {
                runFilters.ContinuationToken = continuationToken;
                response = this.DataFactoryManagementClient.ActivityRuns.QueryByPipelineRun(activityRunFilter.ResourceGroupName,
                                                                                            activityRunFilter.DataFactoryName, activityRunFilter.PipelineRunId, runFilters);

                activityRuns.AddRange(response.Value.Select(ar =>
                                                            new PSActivityRun(ar, activityRunFilter.ResourceGroupName, activityRunFilter.DataFactoryName)));

                continuationToken = response.ContinuationToken;
            }
            return(activityRuns);
        }
        public override PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request)
        {
            PipelineRun pipelineRun = _adfManagementClient.PipelineRuns.Get
                                      (
                request.ResourceGroupName,
                request.OrchestratorName,
                request.RunId
                                      );

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            _logger.LogInformation("Create pipeline Activity Runs query filters.");
            RunFilterParameters filterParams = new RunFilterParameters
                                               (
                request.ActivityQueryStart,
                request.ActivityQueryEnd
                                               );

            _logger.LogInformation("Querying ADF pipeline for Activity Runs.");
            ActivityRunsQueryResponse queryResponse = _adfManagementClient.ActivityRuns.QueryByPipelineRun
                                                      (
                request.ResourceGroupName,
                request.OrchestratorName,
                request.RunId,
                filterParams
                                                      );

            //Create initial output content
            PipelineErrorDetail output = new PipelineErrorDetail()
            {
                PipelineName  = request.PipelineName,
                ActualStatus  = pipelineRun.Status,
                RunId         = request.RunId,
                ResponseCount = queryResponse.Value.Count
            };

            _logger.LogInformation("Pipeline status: " + pipelineRun.Status);
            _logger.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString());

            //Loop over activities in pipeline run
            foreach (ActivityRun activity in queryResponse.Value)
            {
                if (activity.Error == null)
                {
                    continue; //only want errors
                }

                //Parse error output to customise output
                dynamic outputBlockInner = JsonConvert.DeserializeObject(activity.Error.ToString());
                string  errorCode        = outputBlockInner?.errorCode;
                string  errorType        = outputBlockInner?.failureType;
                string  errorMessage     = outputBlockInner?.message;

                _logger.LogInformation("Activity run id: " + activity.ActivityRunId);
                _logger.LogInformation("Activity name: " + activity.ActivityName);
                _logger.LogInformation("Activity type: " + activity.ActivityType);
                _logger.LogInformation("Error message: " + errorMessage);

                output.Errors.Add(new FailedActivity()
                {
                    ActivityRunId = activity.ActivityRunId,
                    ActivityName  = activity.ActivityName,
                    ActivityType  = activity.ActivityType,
                    ErrorCode     = errorCode,
                    ErrorType     = errorType,
                    ErrorMessage  = errorMessage
                });
            }
            return(output);
        }
Example #11
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("GetActivityErrors Function triggered by HTTP request.");

            #region ParseRequestBody
            log.LogInformation("Parsing body from request.");

            string  requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic inputData   = JsonConvert.DeserializeObject(requestBody);

            string tenantId          = inputData?.tenantId;
            string applicationId     = inputData?.applicationId;
            string authenticationKey = inputData?.authenticationKey;
            string subscriptionId    = inputData?.subscriptionId;
            string resourceGroup     = inputData?.resourceGroup;
            string factoryName       = inputData?.factoryName;
            string pipelineName      = inputData?.pipelineName;
            string runId             = inputData?.runId;

            //Check body for values
            if (
                tenantId == null ||
                applicationId == null ||
                authenticationKey == null ||
                subscriptionId == null ||
                resourceGroup == null ||
                factoryName == null ||
                pipelineName == null ||
                runId == null
                )
            {
                log.LogInformation("Invalid body.");
                return(new BadRequestObjectResult("Invalid request body, value(s) missing."));
            }

            #endregion

            //Query and output support variables
            int      daysOfRuns  = 7; //max duration for mandatory RunFilterParameters
            DateTime today       = DateTime.Now;
            DateTime lastWeek    = DateTime.Now.AddDays(-daysOfRuns);
            dynamic  outputBlock = new JObject();
            dynamic  outputBlockInner;

            //Create a data factory management client
            log.LogInformation("Creating ADF connectivity client.");

            using (var client = DataFactoryClient.CreateDataFactoryClient(tenantId, applicationId, authenticationKey, subscriptionId))
            {
                #region SetPipelineRunDetails

                //Get pipeline details
                PipelineRun pipelineRun;
                pipelineRun = client.PipelineRuns.Get(resourceGroup, factoryName, runId);

                log.LogInformation("Querying ADF pipeline for Activity Runs.");

                RunFilterParameters       filterParams  = new RunFilterParameters(lastWeek, today);
                ActivityRunsQueryResponse queryResponse = client.ActivityRuns.QueryByPipelineRun(resourceGroup, factoryName, runId, filterParams);

                //Create initial output content
                outputBlock.PipelineName       = pipelineName;
                outputBlock.PipelineStatus     = pipelineRun.Status;
                outputBlock.RunId              = runId;
                outputBlock.ResponseCount      = queryResponse.Value.Count;
                outputBlock.ResponseErrorCount = 0;
                outputBlock.Errors             = new JArray();
                JObject errorDetails;

                #endregion

                log.LogInformation("Pipeline status: " + pipelineRun.Status);
                log.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString());

                #region GetActivityDetails

                //Loop over activities in pipeline run
                foreach (var activity in queryResponse.Value)
                {
                    if (string.IsNullOrEmpty(activity.Error.ToString()))
                    {
                        continue; //just incase
                    }

                    //Parse error output to customise output
                    outputBlockInner = JsonConvert.DeserializeObject(activity.Error.ToString());

                    string errorCode    = outputBlockInner?.errorCode;
                    string errorType    = outputBlockInner?.failureType;
                    string errorMessage = outputBlockInner?.message;

                    //Get output details
                    if (!string.IsNullOrEmpty(errorCode))
                    {
                        log.LogInformation("Activity run id: " + activity.ActivityRunId);
                        log.LogInformation("Activity name: " + activity.ActivityName);
                        log.LogInformation("Activity type: " + activity.ActivityType);
                        log.LogInformation("Error message: " + errorMessage);

                        outputBlock.ResponseErrorCount += 1;

                        //Construct custom error information block
                        errorDetails = JObject.Parse("{ \"ActivityRunId\": \"" + activity.ActivityRunId +
                                                     "\", \"ActivityName\": \"" + activity.ActivityName +
                                                     "\", \"ActivityType\": \"" + activity.ActivityType +
                                                     "\", \"ErrorCode\": \"" + errorCode +
                                                     "\", \"ErrorType\": \"" + errorType +
                                                     "\", \"ErrorMessage\": \"" + errorMessage +
                                                     "\" }");

                        outputBlock.Errors.Add(errorDetails);
                    }
                }
                #endregion
            }
            log.LogInformation("GetActivityErrors Function complete.");

            return(new OkObjectResult(outputBlock));
        }
Example #12
0
 public PSActivityRunsQueryResponse(ActivityRunsQueryResponse response)
 {
     this.Value             = response?.Value?.Select(element => new PSActivityRun(element)).ToList();
     this.ContinuationToken = response?.ContinuationToken;
 }
Example #13
0
        public override PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request)
        {
            PipelineRun pipelineRun = _pipelineRunClient.GetPipelineRun
                                      (
                request.RunId
                                      );

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            _logger.LogInformation("Create pipeline Activity Runs query filters.");
            RunFilterParameters filterParams = new RunFilterParameters
                                               (
                request.ActivityQueryStart,
                request.ActivityQueryEnd
                                               );

            _logger.LogInformation("Querying SYN pipeline for Activity Runs.");
            ActivityRunsQueryResponse queryResponse = _pipelineRunClient.QueryActivityRuns
                                                      (
                request.PipelineName,
                request.RunId,
                filterParams
                                                      );

            //Create initial output content
            PipelineErrorDetail output = new PipelineErrorDetail()
            {
                PipelineName  = request.PipelineName,
                ActualStatus  = pipelineRun.Status,
                RunId         = request.RunId,
                ResponseCount = queryResponse.Value.Count
            };

            _logger.LogInformation("Pipeline status: " + pipelineRun.Status);
            _logger.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString());

            //Loop over activities in pipeline run
            foreach (ActivityRun activity in queryResponse.Value)
            {
                if (activity.Error == null)
                {
                    continue; //only want errors
                }

                //Parse error output to customise output
                var json = JsonConvert.SerializeObject(activity.Error);
                Dictionary <string, object> errorContent = JsonConvert.DeserializeObject <Dictionary <string, object> >(json);

                _logger.LogInformation("Activity run id: " + activity.ActivityRunId);
                _logger.LogInformation("Activity name: " + activity.ActivityName);
                _logger.LogInformation("Activity type: " + activity.ActivityType);
                _logger.LogInformation("Error message: " + errorContent["message"].ToString());

                output.Errors.Add(new FailedActivity()
                {
                    ActivityRunId = activity.ActivityRunId,
                    ActivityName  = activity.ActivityName,
                    ActivityType  = activity.ActivityType,
                    ErrorCode     = errorContent["errorCode"].ToString(),
                    ErrorType     = errorContent["failureType"].ToString(),
                    ErrorMessage  = errorContent["message"].ToString()
                });
            }
            return(output);
        }