Skip to content

Instantly share code, notes, and snippets.

@jaredpar
Created August 12, 2021 15:21
Show Gist options
  • Select an option

  • Save jaredpar/01205516a47e7ff11293bf23cff5fd7a to your computer and use it in GitHub Desktop.

Select an option

Save jaredpar/01205516a47e7ff11293bf23cff5fd7a to your computer and use it in GitHub Desktop.
internal async Task FindLongMacBuild(string project, int definition)
{
bool IsMacName(string name) =>
name.Contains("mac", StringComparison.OrdinalIgnoreCase) ||
name.Contains("osx", StringComparison.OrdinalIgnoreCase) ||
name.Contains("ios", StringComparison.OrdinalIgnoreCase);
var map = new Dictionary<string, List<JobInfo>>();
var maxCount = 100;
var count = 0;
await foreach (var build in DevOpsServer.EnumerateBuildsAsync(project, definitions: new[] { definition }, statusFilter: BuildStatus.Completed))
{
count++;
if (count == maxCount)
{
break;
}
var buildInfo = build.GetBuildInfo();
try
{
Console.WriteLine($"Logging {buildInfo.BuildUri}");
var timeline = await DevOpsServer.GetTimelineAsync(build);
if (timeline is null)
{
continue;
}
var tree = TimelineTree.Create(timeline);
foreach (var job in tree.JobNodes)
{
if (IsMacName(job.Name))
{
if (!map.TryGetValue(job.Name, out var list))
{
list = new();
map[job.Name] = list;
}
list.Add(new JobInfo(buildInfo, job.TimelineRecord));
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
foreach (var pair in map)
{
Console.WriteLine($"Job {pair.Key}");
var average = pair
.Value
.Where(x => x.TimelineRecord.Result == TaskResult.Succeeded)
.Select(x => x.TimelineRecord.GetDuration()?.TotalMinutes)
.SelectNullableValue()
.Average();
Console.WriteLine($"Average minutes when succeeded {(int)average}");
var limit = average * 1.50;
foreach (var item in pair.Value.Where(x => x.TimelineRecord.GetDuration()?.TotalMinutes > limit))
{
var minutes = item.TimelineRecord.GetDuration()!.Value.TotalMinutes; ;
Console.WriteLine($"{item.BuildInfo.BuildUri} {minutes} minutes");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment