Skip to main content

Build times for TFS Team Build

After creating an application to monitor builds over multiple Team Projects,  the customer came back with a second request. As they had the feeling that some builds took a long time to complete they asked us to update the application to include build timings.

A colleague took my application and extended it with some extra code. Full code below:

   1:  class Program
   2:  {
   3:     static void Main(string[] args)
   4:     {
   5:        // The url to the tfs server 
   6:        Uri tfsUri = new Uri("<TFS URL>");
   7:        TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri);
   8:        IBuildServer bs = tfs.GetService<IBuildServer>();
   9:        WriteQueuedBuilds(bs);
  10:        Console.ReadLine();
  11:     }
  12:   
  13:     private static void WriteQueuedBuilds(IBuildServer bs)
  14:     {
  15:        IQueuedBuildSpec qbSpec;
  16:        IQueuedBuildQueryResult qbResults;
  17:        qbSpec = bs.CreateBuildQueueSpec("*", "*");
  18:        qbSpec.CompletedWindow = TimeSpan.FromDays(25);
  19:        qbResults = bs.QueryQueuedBuilds(qbSpec);
  20:        
  21:        Console.WriteLine("Queued Builds");
  22:        Debug.WriteLine("Queued Builds");
  23:        
  24:        foreach (IQueuedBuild qb in qbResults.QueuedBuilds.OrderByDescending(a=> a.QueueTime))
  25:        {
  26:           string status = qb.Status.ToString();
  27:           string def; 
  28:           if (qb.BuildDefinition!= null)
  29:              def = qb.TeamProject + @"\" + qb.BuildDefinition.Name;
  30:           else if (qb.Build != null)
  31:              def = qb.TeamProject + @"\" + qb.Build.BuildDefinition.Name;
  32:           else
  33:              def = qb.TeamProject + @"\<unknown>";
  34:           
  35:           string pri = qb.Priority.ToString();
  36:           string datequeued = qb.QueueTime.ToString();
  37:           string requestedBy = qb.RequestedBy;
  38:           string buildDetails = string.Empty;
  39:           string finishTime = string.Empty;
  40:           string starttime = string.Empty;
  41:           if (qb.Build != null)
  42:          {
  43:              if (qb.Build.BuildFinished)
  44:              {
  45:                 buildDetails = "finished " + qb.Build.FinishTime.Subtract(qb.QueueTime).TotalMinutes + " minutes after queue";
  46:                 finishTime = qb.Build.FinishTime.ToString();
  47:              }
  48:              starttime = qb.Build.StartTime.ToString();
  49:           }
  50:           string controller = qb.BuildController.Name;
  51:   
  52:           if (qb.RequestedBy != qb.RequestedFor)
  53:           {
  54:              requestedBy = qb.RequestedBy + " (for " + qb.RequestedFor + ")";
  55:           }
  56:           
  57:           Console.WriteLine("{0} {1} {2} {3} {4} {5} {8}", controller, status, def, pri, datequeued, requestedBy, starttime, finishTime, buildDetails);
  58:           Debug.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}", controller, status, def, pri, datequeued, requestedBy, starttime, finishTime, buildDetails);
  59:        }
  60:     }
  61:  }
  62:   

Popular posts from this blog

Podman– Command execution failed with exit code 125

After updating WSL on one of the developer machines, Podman failed to work. When we took a look through Podman Desktop, we noticed that Podman had stopped running and returned the following error message: Error: Command execution failed with exit code 125 Here are the steps we tried to fix the issue: We started by running podman info to get some extra details on what could be wrong: >podman info OS: windows/amd64 provider: wsl version: 5.3.1 Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM Error: unable to connect to Podman socket: failed to connect: dial tcp 127.0.0.1:2655: connectex: No connection could be made because the target machine actively refused it. That makes sense as the podman VM was not running. Let’s check the VM: >podman machine list NAME         ...

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

VS Code Planning mode

After the introduction of Plan mode in Visual Studio , it now also found its way into VS Code. Planning mode, or as I like to call it 'Hannibal mode', extends GitHub Copilot's Agent Mode capabilities to handle larger, multi-step coding tasks with a structured approach. Instead of jumping straight into code generation, Planning mode creates a detailed execution plan. If you want more details, have a look at my previous post . Putting plan mode into action VS Code takes a different approach compared to Visual Studio when using plan mode. Instead of a configuration setting that you can activate but have limited control over, planning is available as a separate chat mode/agent: I like this approach better than how Visual Studio does it as you have explicit control when plan mode is activated. Instead of immediately diving into execution, the plan agent creates a plan and asks some follow up questions: You can further edit the plan by clicking on ‘Open in Editor’: ...