blob: 562e7bdcb6e3ad29de992f1fef2fc100f85d08bb [file] [log] [blame]
/**
* Utility javascript functions used across the different CT FE pages.
*/
this.ctfe = this.ctfe || function() {
"use strict";
var ctfe = {};
/**
* Converts the timestamp used in CTFE DB into a user friendly string.
**/
ctfe.getFormattedTimestamp = function(timestamp) {
if (timestamp == 0) {
return "<pending>";
}
return ctfe.getTimestamp(timestamp).toLocaleString();
}
/**
* Converts the timestamp used in CTFE DB into a Javascript timestamp.
*/
ctfe.getTimestamp = function(timestamp) {
if (timestamp == 0) {
return timestamp;
}
var pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/;
return new Date(String(timestamp).replace(pattern,'$1-$2-$3T$4:$5:$6'));
}
/**
* Convert from Javascript Date to timestamp recognized by CTFE DB.
*/
ctfe.getCtDbTimestamp = function(d) {
var timestamp = String(d.getUTCFullYear()) + sk.human.pad(d.getUTCMonth()+1, 2) +
sk.human.pad(d.getUTCDate(), 2) + sk.human.pad(d.getUTCHours(), 2) +
sk.human.pad(d.getUTCMinutes(), 2) + sk.human.pad(d.getUTCSeconds(), 2);
return timestamp
}
/**
* Get user friendly string for repeat after days.
*/
ctfe.formatRepeatAfterDays = function(num) {
if (num == 0) {
return "N/A";
} else if (num == 1) {
return "Daily";
} else if (num == 7) {
return "Weekly";
} else {
return "Every " + num + " days";
}
}
/**
* Functions to work with information about page sets.
*/
ctfe.pageSets = {};
/**
* Returns a Promise that resolves to an array of defined page sets.
**/
ctfe.pageSets.getPageSets = function() {
return sk.post("/_/page_sets/")
.then(JSON.parse);
}
/**
* Returns an identifier for the given page set.
**/
ctfe.pageSets.getKey = function(pageSet) {
return pageSet.key;
}
/**
* Returns a short description for the given page set.
**/
ctfe.pageSets.getDescription = function(pageSet) {
return pageSet.description;
}
/**
* Functions to work with information about Chromium builds.
*/
ctfe.chromiumBuild = {};
/**
* Returns a Promise that resolves to an array of completed builds.
**/
ctfe.chromiumBuild.getBuilds = function() {
var queryParams = {
"size": 20,
"successful": true,
}
var queryStr = "?" + sk.query.fromObject(queryParams);
return sk.post("/_/get_chromium_build_tasks" + queryStr)
.then(JSON.parse)
.then(function (json) {
return json.data;
});
}
/**
* Returns a more human-readable GIT commit hash.
*/
ctfe.chromiumBuild.shortHash = function(commitHash) {
return commitHash.substr(0, 7);
}
/**
* Returns a short description for the given build.
**/
ctfe.chromiumBuild.getDescription = function(build) {
return ctfe.chromiumBuild.shortHash(build.ChromiumRev) + "-" +
ctfe.chromiumBuild.shortHash(build.SkiaRev) + " (Chromium rev created on " +
ctfe.getFormattedTimestamp(build.ChromiumRevTs) + ")";
}
/**
* Returns a URL with details about the given Chromium commit hash.
**/
ctfe.chromiumBuild.chromiumCommitUrl = function(commitHash) {
return "https://chromium.googlesource.com/chromium/src.git/+show/" + commitHash;
}
/**
* Returns a URL with details about the given Skia commit hash.
**/
ctfe.chromiumBuild.skiaCommitUrl = function(commitHash) {
return "https://skia.googlesource.com/skia/+show/" + commitHash;
}
/**
* Functions to work with information about SKP repositories.
*/
ctfe.skpRepositories = {};
/**
* Returns a Promise that resolves to an array of defined SKP repositories.
**/
ctfe.skpRepositories.getRepositories = function() {
var queryParams = {
"size": 20,
"successful": true,
}
var queryStr = "?" + sk.query.fromObject(queryParams);
return sk.post("/_/get_capture_skp_tasks" + queryStr)
.then(JSON.parse)
.then(function (json) {
return json.data;
});
}
/**
* Returns a short description for the given SKP repository.
**/
ctfe.skpRepositories.getDescription = function(repository) {
return repository.PageSets + " captured with " +
ctfe.chromiumBuild.shortHash(repository.ChromiumRev) + "-" +
ctfe.chromiumBuild.shortHash(repository.SkiaRev) + " (Desc: " +
repository.Description + ")";
}
/**
* Returns true and displays an error if user has more than 3 active tasks.
*/
ctfe.moreThanThreeActiveTasks = function(sizeOfUserQueue) {
if (sizeOfUserQueue > 3) {
sk.errorMessage("You have " + sizeOfUserQueue + " currently running tasks. Please wait " +
"for them to complete before scheduling more CT tasks.");
}
return sizeOfUserQueue > 3;
}
ctfe.missingLiveSitesWithCustomWebpages = function(customWebpages, benchmarkArgs) {
if (customWebpages && !benchmarkArgs.includes("--use-live-sites")) {
sk.errorMessage("Please specify --use-live-sites in benchmark arguments " +
"when using custom web pages.");
return true;
}
return false;
}
ctfe.getPlaceholderTextForCustomWebpages = function() {
return "Eg: webpage1,webpage2,webpage3\n\nCommas in webpages should be URL encoded";
}
/**
* Returns a link to the specified google storage path.
*/
ctfe.getGSLink = function(gsPath) {
return "https://ct.skia.org/results/cluster-telemetry/" + gsPath;
}
/**
* Returns true if gsPath is not set or if the patch's SHA1 digest in the specified
* google storage path is for an empty string.
*/
ctfe.isEmptyPatch = function(gsPath) {
// Compare against empty string and against the SHA1 digest of an empty string.
return gsPath === "" || gsPath === "patches/da39a3ee5e6b4b0d3255bfef95601890afd80709.patch";
}
/**
* Returns a string that describes the specified CLs.
**/
ctfe.getDescriptionOfCls = function(chromiumClDesc, skiaClDesc, v8ClDesc, catapultClDesc, chromiumBaseBuildClDesc) {
if (!chromiumClDesc && !skiaClDesc && !v8ClDesc && !catapultClDesc && !chromiumBaseBuildClDesc) {
return "";
}
var str = "Testing ";
var prev = false;
if (chromiumClDesc) {
str += chromiumClDesc;
prev = true;
}
if (skiaClDesc) {
if (prev) {
str += " and ";
}
str += skiaClDesc;
prev = true;
}
if (v8ClDesc) {
if (prev) {
str += " and ";
}
str += v8ClDesc;
prev = true;
}
if (catapultClDesc) {
if (prev) {
str += " and ";
}
str += catapultClDesc;
prev = true;
}
if (chromiumBaseBuildClDesc) {
if (prev) {
str += " and ";
}
str += chromiumBaseBuildClDesc;
prev = true;
}
return str;
}
return ctfe;
}();