AppVeyor Console Timestamp

Displays line timestamps in the job console

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name         AppVeyor Console Timestamp
// @version      0.7
// @description  Displays line timestamps in the job console
// @license      https://creativecommons.org/licenses/by-sa/4.0/
// @namespace    http://github.com/tony19
// @match        https://ci.appveyor.com/*/build/*
// @grant        GM_addStyle
// @run-at       document-idle
// @author       [email protected]
// ==/UserScript==
/* global GM_addStyle */
/* jshint esnext:true, unused:true */
(() => {
  'use strict';

  GM_addStyle(`
    div[title] a:first-child {
      width: 140px !important;
      background-color: black;
    }
    div[title] span:first-child {
      padding-left: 100px !important;
    }
    .job-console {
      background-color: black;
    }
    a.late {
      color: red;
    }
  `);

  // number of seconds between timestamps that indicate excessive time spent
  const HIGH_WATERMARK = 3;
  let lastTime = '';

  const timerId = setInterval(() => {
    const divs = $('div[title]:has(a):not([data-ts])');
    if (!divs || !divs.length) { return; }

    divs.each((index, div) => {
      const timestamp = div.getAttribute('title');
      const anchor = $(div).find('a:first-child').append(` - ${timestamp}`);
      processLine(anchor, timestamp);
    });
    divs.attr('data-ts', '');
  }, 2000);

  function processLine(anchor, timestamp) {
    const seconds = toSeconds(timestamp);
    if (seconds - lastTime >= HIGH_WATERMARK) {
      $(anchor).addClass('late');
    }
    lastTime = seconds;
  }

  function toSeconds(hms) {
    const a = hms.split(':');
    const seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);
    return seconds;
  }
})();