示例#1
0
        public async Task <int> UpdateGitHubActionRunsInStorage(string clientId, string clientSecret, TableStorageConfiguration tableStorageConfig,
                                                                string owner, string repo, string branch, string workflowName, string workflowId,
                                                                int numberOfDays, int maxNumberOfItems)
        {
            GitHubAPIAccess api   = new GitHubAPIAccess();
            JArray          items = await api.GetGitHubActionRunsJArray(clientId, clientSecret, owner, repo, workflowId);

            Debug.WriteLine($"{items.Count} builds found for {owner}/{repo}/{workflowName}");

            int itemsAdded = 0;
            TableStorageCommonDA tableBuildDA             = new TableStorageCommonDA(tableStorageConfig, tableStorageConfig.TableGitHubRuns);
            TableStorageCommonDA tableChangeFailureRateDA = new TableStorageCommonDA(tableStorageConfig, tableStorageConfig.TableChangeFailureRate);

            //Check each build to see if it's in storage, adding the items not in storage
            foreach (JToken item in items)
            {
                GitHubActionsRun build = JsonConvert.DeserializeObject <GitHubActionsRun>(item.ToString());

                //Save the build information for builds
                if (build.status == "completed")
                {
                    string partitionKey            = PartitionKeys.CreateBuildWorkflowPartitionKey(owner, repo, workflowName);
                    string rowKey                  = build.run_number;
                    AzureStorageTableModel newItem = new AzureStorageTableModel(partitionKey, rowKey, item.ToString());
                    if (await tableBuildDA.AddItem(newItem) == true)
                    {
                        itemsAdded++;
                    }
                    //Debug.WriteLine($"Processing build {build.run_number} with items adding={itemsAdded}");

                    //Save the build information for change failure rate
                    ChangeFailureRateBuild newBuild = new ChangeFailureRateBuild
                    {
                        Id                   = build.run_number,
                        Branch               = build.head_branch,
                        BuildNumber          = build.run_number,
                        StartTime            = build.created_at,
                        EndTime              = build.updated_at,
                        BuildDurationPercent = build.buildDurationPercent,
                        Status               = build.status,
                        Url                  = build.html_url
                    };
                    itemsAdded += await UpdateChangeFailureRate(tableChangeFailureRateDA, newBuild, PartitionKeys.CreateBuildWorkflowPartitionKey(owner, repo, workflowName));

                    //Debug.WriteLine($"UpdateChangeFailureRate for build {build.run_number} with items adding={itemsAdded}");
                }
            }
            Debug.WriteLine($"{items.Count} builds updated for {owner}/{repo}/{workflowName}");
            return(itemsAdded);
        }
示例#2
0
        public async Task <int> UpdateAzureDevOpsBuilds(string patToken, TableStorageAuth tableStorageAuth,
                                                        string organization, string project, string branch, string buildName, string buildId,
                                                        int numberOfDays, int maxNumberOfItems)
        {
            AzureDevOpsAPIAccess api = new AzureDevOpsAPIAccess();
            JArray items             = await api.GetAzureDevOpsBuildsJArray(patToken, organization, project);

            int itemsAdded = 0;
            TableStorageCommonDA tableBuildsDA            = new TableStorageCommonDA(tableStorageAuth, tableStorageAuth.TableAzureDevOpsBuilds);
            TableStorageCommonDA tableChangeFailureRateDA = new TableStorageCommonDA(tableStorageAuth, tableStorageAuth.TableChangeFailureRate);

            //Check each build to see if it's in storage, adding the items not in storage
            foreach (JToken item in items)
            {
                AzureDevOpsBuild build = JsonConvert.DeserializeObject <AzureDevOpsBuild>(item.ToString());

                //Save the build information for builds
                if (build.status == "completed")
                {
                    string partitionKey            = CreateBuildWorkflowPartitionKey(organization, project, buildName);
                    string rowKey                  = build.buildNumber;
                    AzureStorageTableModel newItem = new AzureStorageTableModel(partitionKey, rowKey, item.ToString());
                    if (await tableBuildsDA.AddItem(newItem) == true)
                    {
                        itemsAdded++;
                    }

                    //Save the build information for change failure rate
                    ChangeFailureRateBuild newBuild = new ChangeFailureRateBuild
                    {
                        Id                   = build.id,
                        Branch               = build.sourceBranch,
                        BuildNumber          = build.buildNumber,
                        StartTime            = build.queueTime,
                        EndTime              = build.finishTime,
                        BuildDurationPercent = build.buildDurationPercent,
                        Status               = build.status,
                        Url                  = build.url
                    };
                    itemsAdded += await UpdateChangeFailureRate(tableChangeFailureRateDA, newBuild, CreateBuildWorkflowPartitionKey(organization, project, buildName));
                }
            }

            return(itemsAdded);
        }
示例#3
0
        public async Task <int> UpdateChangeFailureRate(TableStorageCommonDA tableChangeFailureRateDA, ChangeFailureRateBuild newBuild, string partitionKey, bool forceUpdate = false)
        {
            int    itemsAdded = 0;
            string rowKey     = newBuild.Id;
            string json       = JsonConvert.SerializeObject(newBuild);
            AzureStorageTableModel newItem = new AzureStorageTableModel(partitionKey, rowKey, json);

            if (await tableChangeFailureRateDA.AddItem(newItem, forceUpdate) == true)
            {
                itemsAdded++;
            }
            return(itemsAdded);
        }
示例#4
0
        //Return a sample dataset to help with testing
        private List <ChangeFailureRateBuild> GetSampleBuilds()
        {
            List <ChangeFailureRateBuild> results = new List <ChangeFailureRateBuild>();
            ChangeFailureRateBuild        item1   = new ChangeFailureRateBuild
            {
                StartTime            = DateTime.Now.AddDays(-7).AddMinutes(-4),
                EndTime              = DateTime.Now.AddDays(-7).AddMinutes(0),
                BuildDurationPercent = 70,
                BuildNumber          = "1",
                Branch = "master",
                Status = "completed",
                Url    = "https://dev.azure.com/samsmithnz/samlearnsazure/1",
                DeploymentWasSuccessful = true
            };

            results.Add(item1);
            results.Add(item1);
            results.Add(item1);
            results.Add(item1);
            ChangeFailureRateBuild item2 = new ChangeFailureRateBuild
            {
                StartTime            = DateTime.Now.AddDays(-5).AddMinutes(-5),
                EndTime              = DateTime.Now.AddDays(-5).AddMinutes(0),
                BuildDurationPercent = 40,
                BuildNumber          = "2",
                Branch = "master",
                Status = "completed",
                Url    = "https://dev.azure.com/samsmithnz/samlearnsazure/2",
                DeploymentWasSuccessful = true
            };

            results.Add(item2);
            results.Add(item2);
            results.Add(item2);
            results.Add(item2);
            ChangeFailureRateBuild item3 = new ChangeFailureRateBuild
            {
                StartTime            = DateTime.Now.AddDays(-4).AddMinutes(-1),
                EndTime              = DateTime.Now.AddDays(-4).AddMinutes(0),
                BuildDurationPercent = 20,
                BuildNumber          = "3",
                Branch = "master",
                Status = "failed",
                Url    = "https://dev.azure.com/samsmithnz/samlearnsazure/3",
                DeploymentWasSuccessful = false
            };

            results.Add(item3);
            results.Add(item3);
            ChangeFailureRateBuild item4 = new ChangeFailureRateBuild
            {
                StartTime            = DateTime.Now.AddDays(-3).AddMinutes(-4),
                EndTime              = DateTime.Now.AddDays(-3).AddMinutes(0),
                BuildDurationPercent = 50,
                BuildNumber          = "4",
                Branch = "master",
                Status = "completed",
                Url    = "https://dev.azure.com/samsmithnz/samlearnsazure/4",
                DeploymentWasSuccessful = true
            };

            results.Add(item4);
            results.Add(item4);
            results.Add(item4);
            results.Add(item4);
            ChangeFailureRateBuild item5 = new ChangeFailureRateBuild
            {
                StartTime            = DateTime.Now.AddDays(-2).AddMinutes(-7),
                EndTime              = DateTime.Now.AddDays(-2).AddMinutes(0),
                BuildDurationPercent = 60,
                BuildNumber          = "5",
                Branch = "master",
                Status = "completed",
                Url    = "https://dev.azure.com/samsmithnz/samlearnsazure/5",
                DeploymentWasSuccessful = true
            };

            results.Add(item5);
            results.Add(item5);
            results.Add(item5);
            results.Add(item5);
            ChangeFailureRateBuild item6 = new ChangeFailureRateBuild
            {
                StartTime            = DateTime.Now.AddDays(-1).AddMinutes(-5),
                EndTime              = DateTime.Now.AddDays(-1).AddMinutes(0),
                BuildDurationPercent = 70,
                BuildNumber          = "6",
                Branch = "master",
                Status = "inProgress",
                Url    = "https://dev.azure.com/samsmithnz/samlearnsazure/6",
                DeploymentWasSuccessful = false
            };

            results.Add(item6);
            results.Add(item6);
            results.Add(item6);

            return(results);
        }