TFS Build light with jQuery

We use TFS for our builds. These include release builds, continuous integration builds and regression test build. We want to have a simple build light to keep an eye on the status of all definitions. This is why we use the REST APIs and a simple jquery enabled html page to show the status: Green (all is fine) – Blue (build in progress) – Red (drop everything we need to fix this)

The code below is all there is. We host this on our development webserver.

<html>
  <head>
    <!— https://stackoverflow.com/a/35439531 —>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- Javascript libraries -->
    <script src=“https://code.jquery.com/jquery-2.2.4.min.js"></script>
  </head>

  <body>
    <script type="text/javascript">
      /* Put the scripts here */
    </script>
  </body>
</html>
 /* Get the build status for the last build of the definition */
 function GetBuildStatus(id) {
  $.ajax({
    type: 'GET',
    url: 'http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/build/builds/?definitions='+id+'&$top=1&api-version=2.0',
    headers: { 'Authorization': 'Basic YOUR_BASE64_ENCRYPTED_TOKEN'},
    success: function (status) {
      if (status.value[0].result == 'succeeded') {
        console.log('green - ' + status.value[0].result + ' - ' + status.value[0].buildNumber);
      }
      else if (status.value[0].status == 'inProgress') {
        console.log('blue - ' + status.value[0].status + ' - ' + status.value[0].buildNumber);
        $(document).data('status', status.value[0].status);
      }
      else {
        console.log('red - ' + status.value[0].result + ' - ' + status.value[0].buildNumber);
        $(document).data('status', status.value[0].result);
      }
     },
    error: function (response, status, error) {
      console.log(error);
      status = 'error';
    }
   });
}

/* Get the build status for definition 199,200,201 */
function GetBuildSatussen() {
  $(document).data('status','succeeded');
  GetBuildStatus(199);
  GetBuildStatus(200);
  GetBuildStatus(201);
}

/* Change the body color based on the status */
function CheckBuildStatussen() {
  var status = $(document).data('status');
  if (status == 'succeeded')
$('body').css('background-color', 'green !important');
  else if (status == 'inProgress')
$('body').css('background-color', 'blue !important');
  else
$('body').css('background-color', 'red !important');
}

$(document).ready(function () {
  GetBuildSatussen();
  /* Get the build status every minute */
  setInterval(GetBuildSatussen, 60000);
  /* Set the body color every 2 seconds */
  setInterval(CheckBuildStatussen, 2000);
  console.log('ready');
});

Replace the fabrikam url with your TFS and the basic header with your base64 encoded token. You can get the build definition id’s from /_apis/build/builds?api-version=2.0. See references for details.

When the HTML document is loaded the buildstatus is fetched for initial color of the page. On interval of one minute the buildstatus is fetched and on interval of 2 seconds the body color is set to the corresponding statuscolor.

References

Posted in Development, Tooling | Tagged , , , , | Leave a comment

Cordova, AngularJs, WebApi and CORS

We have a simple website with some data stored in Azure Table Storage. From a Cordova app we request the data from the webapi we have added to the website. This works great when running on the device, but not when testing locally: Cross-Origin Resource Sharing (CORS) won’t let us.

Google sugested creating a proxy and setting it during build. But we went a different route. The webapi was ours, we should simply allow CORS. This is done with a nuget package: Microsoft.AspNet.WebApi.Cors and some configuration.

using System.Web.Http.Cors;
public static class WebApiConfig {
   public static void Register(HttpConfiguration config) {
      // Web API configuration and services
      var cors = new EnableCorsAttribute("*", "*", "*");
      config.EnableCors(cors);
      // .. more config ...
   }
}
Posted in Development | Tagged , | 3 Comments

EPPlus – create excel speadsheets

Image courtesy of ddpavumba / FreeDigitalPhotos.net
Image courtesy of ddpavumba / FreeDigitalPhotos.net

https://www.nuget.org/packages/EPPlus/

EEPlus provides the lightweight library for creating real Excel files. It uses office open xml (ooxml) and provides all features I could think of when export-to-excel is available on a website.

SaveSave

Posted in Development | Tagged , , , , | Leave a comment

Syncfusion – advanced web controls

Image courtesy of iprostocks / FreeDigitalPhotos.net
Image courtesy of iprostocks / FreeDigitalPhotos.net

https://www.nuget.org/packages/Syncfusion.AspNet.Mvc5/

Control libraries are available in all shapes and sizes. The library from syncfusion has

  • the best license – flat yearly license fee, unlimited developers within the same company,
  • the best features – export to excel, advanced sort and inline editing for the grid and
  • the best support.

We only have used the Grid in our project but plan to apply the complete suite where needed. See their demo site to get excited.

SaveSave

Posted in Development | Tagged , , , , | Leave a comment

SignalR – realtime communication between server and client

Image courtesy of spacex / unsplash.com

Image courtesy of spacex / unsplash.com

https://www.nuget.org/packages/Microsoft.AspNet.SignalR/

Get real time communication between the client and the server. We use it to monitor jobs. SignalR supports Web Sockets, and falls back to other compatible techniques for older browsers.

Posted in Development, Tooling | Tagged , , | Leave a comment