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); }
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); }
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); }
//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); }