<!DOCTYPE html>
<html>

<head>
  <title>Capacity Stats Demo</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
  <script src="/res/js/status_utils.js"></script>
  <script src="/res/common/js/common.js"></script>
  <script src="/res/imp/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <script src="/res/imp/sinon-1.17.2.js"></script>

  <script type="text/javascript" charset="utf-8">
    // sinon.format = function(object) {return JSON.stringify(object);}
    // sinon.log = function(message) {console.log(message);};

    var server = sinon.fakeServer.create();
    server.autoRespond = true;

    function randomNanos(len) {
      var arr = [];
      for(var i = 0; i < len; i++) {
        var seconds = Math.random() * 2000;
        arr.push({
          task_name: "Foobar",
          task_duration_ns: Math.floor(seconds * 1000000000),
          on_cq_also: Math.random() < .3,
        })
      }
      return arr;
    }

    var data = {
      "abc": {
        dimensions: ["gpu:1002:683d-22.21.18.5939","os:Windows-8.1-SP0","pool:Skia"],
        bots: {
          "win001": true,
          "win002": true,
        },
        tasks: randomNanos(4),
      },
      "def":{
        dimensions: ["device_type:angler","device_os:N12345","os:Android","pool:Skia"],
        bots: {
          "rpi001": true,
          "rpi002": true,
          "rpi003": true,
          "rpi004": true,
          "rpi005": true,
          "rpi006": true,
        },
        tasks: randomNanos(12),
      },
      "ghi":{
        dimensions: ["device:iPad5,1","os:iOS-9.3.1","pool:Skia"],
        bots: {
          "ipad001": true,
        },
        tasks: randomNanos(6),
      },
      "jkl":{
        dimensions: ["gpu:none","os:Ubuntu-14.04","pool:Skia"],
        bots: {
          "linux001": true,
          "linux002": true,
          "linux003": true,
          "linux004": true,
          "linux005": true,
          "linux006": true,
          "linux007": true,
          "linux008": true,
          "linux009": true,
          "linux010": true,
          "linux011": true,
          "linux012": true,
          "linux013": true,
        },
        tasks: randomNanos(76),
      },
    };



    server.respondWith("GET","/capacity/json", JSON.stringify(data));

    var login = {"Email":"test@google.com","LoginURL":"http://www.example.com","IsAGoogler":true};
    server.respondWith("GET","/loginstatus/", JSON.stringify(login));

    var version = {"commit":"3e0fcf9b99baf4256851a6767bc6955266fc2369","date":"2016-02-19T13:57:18-05:00"};
    server.respondWith("GET","/json/version", JSON.stringify(version));
  </script>
  <link rel="import" href="capacity-stats-sk.html">
  </head>
  <body>
    <capacity-stats-sk></capacity-stats-sk>
  </body>

</html>