Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Unified Diff: master/public_html/skia_tools.js

Issue 648353002: Remove Skia's forked buildbot code (Closed) Base URL: https://skia.googlesource.com/buildbot.git@master
Patch Set: Address comment Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « master/public_html/robots.txt ('k') | master/skia_master_scripts/__init__.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: master/public_html/skia_tools.js
diff --git a/master/public_html/skia_tools.js b/master/public_html/skia_tools.js
deleted file mode 100644
index 5c81a1ee8125f9e1dc269918baae5c97d1bad766..0000000000000000000000000000000000000000
--- a/master/public_html/skia_tools.js
+++ /dev/null
@@ -1,767 +0,0 @@
-/**
- * @license Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/**
- * @fileoverview Tools used by the Skia buildbot dashboards, including
- * facilities for retrieving data from the buildbot master.
- */
-
-"use strict";
-
-var skiaTools = {
-
-globalVariables: null,
-googlesourceURL: "https://skia.googlesource.com",
-
-masterHostSuffix: "_master_host",
-masterPortSuffix: "_external_port",
-
-
-/**
- * Retrieve the Git log for the Skia repository.
- *
- * @param {string} startHash
- * @param {string} endHash
- * @param {function(Array.<Object>)} callback Call this function with the
- * decoded JSON from the Git log when the data has loaded.
- */
-gitLog: function(startHash, endHash, callback) {
- var url = this.googlesourceURL + "/skia/+log/" + startHash + ".." + endHash +
- "?format=JSON";
- try {
- var request = new XMLHttpRequest();
- } catch (error) {
- alert(error);
- }
- request.open("GET", url, true);
- request.onreadystatechange = function() {
- if (request.readyState != 4) { return; }
- // Remove the first line, which is garbage.
- var responseLines = request.responseText.split('\n');
- responseLines.splice(0, 1);
-
- callback(JSON.parse(responseLines.join('\n'))["log"]);
- };
- request.send();
-},
-
-/**
- * Object used for managing Git history.
- */
-GitHistory: function() {
- this.gotRev = {};
- this.allRevisions = [];
- this.lastFetchedRev = "HEAD";
-
- /**
- * loadCommits
- *
- * @param {string} oldestCommit Load this commit and all newer commits.
- * @param {function} callback Call this function when finished.
- */
- this.loadCommits = function(oldestCommit, callback) {
- var thisInstance = this;
- skiaTools.gitLog(oldestCommit + "~1", this.lastFetchedRev, function(newCommits) {
- for (var i = 0; i < newCommits.length; ++i) {
- var commitHash = newCommits[i].commit;
- thisInstance.allRevisions.push(commitHash);
- thisInstance.gotRev[commitHash] = true;
- }
- thisInstance.lastFetchedRev = newCommits[newCommits.length - 1].commit;
- callback();
- });
- }
-
- /**
- * getRevList
- *
- * @return {Array.<string>} Array of commit hashes in chronological order.
- */
- this.getRevList = function() {
- var revList = Array.prototype.slice.call(this.allRevisions);
- revList.reverse(); // Sort newest to oldest.
- return revList;
- }
-
- /**
- * ensureLoaded
- *
- * @param {Array.<string>} commitList Load commits from history until all
- * commits in commitList have been loaded. This will be significantly
- * faster if the list is in chronological order.
- * @param {function} callback Call this function when finished.
- */
- this.ensureLoaded = function(commitList, callback) {
- var thisInstance = this;
- var areAllLoaded = function() {
- for (var i = 0; i < commitList.length; i++) {
- var commit = commitList[i];
- if (!thisInstance.gotRev[commit]) {
- thisInstance.loadCommits(commit, areAllLoaded);
- return;
- }
- }
- callback();
- };
- areAllLoaded();
- }
-},
-
-/**
- * Convenience function for populating a ComboBox or ListBox with a list of
- * items. Existing items will be cleared.
- *
- * @param {string} menuId ID of the menu to populate.
- * @param {Array.<string>} items A list of strings to insert into the menu.
- */
-populateMenu: function(menuId, items) {
- var menu = document.getElementById(menuId);
- menu.options.length = 0;
- for (var itemIdx = 0; itemIdx < items.length; itemIdx++) {
- var item = items[itemIdx];
- var newOption = document.createElement("option");
- newOption.text = item;
- newOption.value = item;
- menu.options.add(newOption);
- }
-},
-
-/**
- * Load the global_variables.json file.
- *
- * @param {function} callback Call this function when finished.
- */
-loadGlobalVariables: function(callback) {
- var thisInstance = this;
- var url = this.googlesourceURL + "/buildbot/+/master/site_config/" +
- "global_variables.json?format=TEXT";
- try {
- var request = new XMLHttpRequest();
- } catch (error) {
- alert(error);
- }
- request.open("GET", url, true);
- request.onreadystatechange = function() {
- if (request.readyState != 4) { return; }
- thisInstance.globalVariables = JSON.parse(atob(request.responseText));
- callback();
- }
- request.send();
-},
-
-/**
- * Retrieve the given variable.
- *
- * @param {function(string)} callback Call this function with the value of the
- * requested variable, as defined in the global variables file, or
- * undefined if it is not found.
- */
-getVariable: function(varName, callback) {
- var thisInstance = this;
- var readGlobalVariable = function() {
- if (!thisInstance.globalVariables[varName]) {
- callback(undefined);
- }
- callback(thisInstance.globalVariables[varName].value);
- };
- if (!this.globalVariables) {
- this.loadGlobalVariables(readGlobalVariable);
- } else {
- readGlobalVariable();
- }
-},
-
-/**
- * Information about a single build.
- */
-Build: function(builder, number, revision, result, startTime, endTime, steps) {
- this.builder = builder;
- this.number = number;
- this.revision = revision;
- this.result = result;
- this.startTime = startTime;
- this.endTime = endTime;
- this.elapsedTime = endTime - startTime;
- this.steps = steps;
-
- /**
- * getBuilder
- *
- * @return {string} The name of the builder who owns this build.
- */
- this.getBuilder = function() { return this.builder; }
-
- /**
- * getNumber
- *
- * @return {number} The build number.
- */
- this.getNumber = function() { return this.number; }
-
- /**
- * getResult
- *
- * @return {number} The result of the build. Will be 0 iff the build
- * succeeded.
- */
- this.getResult = function() { return this.result; }
-
- /**
- * getRevision
- *
- * @return {number} The revision number of this build.
- */
- this.getRevision = function() { return this.revision; }
-
- /**
- * getStartTime
- *
- * @return {number} Start time of the build in UNIX seconds from epoch.
- */
- this.getStartTime = function() { return this.startTime; }
-
- /**
- * getEndTime
- *
- * @return {number} End time of the build in UNIX seconds from epoch.
- */
- this.getEndTime = function() { return this.endTime; }
-
- /**
- * getElapsedTime
- *
- * @return {number} Elapsed time of the build in seconds.
- */
- this.getElapsedTime = function() { return this.elapsedTime; }
-
- /**
- * getStartTime
- *
- * @return {Array.<BuildStep>} Information about the steps of this build.
- */
- this.getSteps = function() { return this.steps; }
-},
-
-/**
- * Information about a single build step.
- */
-BuildStep: function(name, elapsedTime, result, stdio) {
- this.name = name;
- this.elapsedTime = elapsedTime;
- this.result = result;
- this.stdio = stdio;
-
- /**
- * getName
- *
- * @return {string} The name of the build step.
- */
- this.getName = function() { return this.name; }
-
- /**
- * getElapsedTime
- *
- * @return {number} Elapsed time of the build step in seconds.
- */
- this.getElapsedTime = function() { return this.elapsedTime; }
-
- /**
- * getResult
- *
- * @return {number} The result of the build. Will be 0 iff the build step
- * succeeded.
- */
- this.getResult = function() { return this.result; }
-
- /**
- * getStdio
- *
- * @return {string} URL to the log output for this build step.
- */
- this.getStdio = function() { return this.stdio; }
-},
-
-/**
- * Information about a builder.
- */
-Builder: function(name, master, basedir, cachedBuilds, category, currentBuilds,
- slaves, state) {
- this.name = name;
- this.master = master;
- this.basedir = basedir;
- // alreadyLoadedBuilds differs from the passed-in cachedBuilds; the passed-in
- // parameter refers to the builds which the build master has cached. This
- // property is a set of builds which have been loaded from the build master
- // and stored here for future use.
- this.alreadyLoadedBuilds = {};
- this.category = category;
- this.currentBuilds = currentBuilds;
- this.lastBuild = cachedBuilds[cachedBuilds.length - 1];
- this.slaves = slaves;
- this.state = state;
-
- /**
- * getName
- *
- * @return {string} The name of the builder.
- */
- this.getName = function() { return this.name; }
-
- /**
- * getBaseDir
- *
- * @return {string} Directory on the build slave machine in which build
- * information is stored. This is typically the same as the builder name.
- */
- this.getBaseDir = function() { return this.basedir; }
-
- /**
- * getCategory
- *
- * @return {string} Category of this builder. This is the heading under
- * which the builder is placed on the buildbot web page.
- */
- this.getCategory = function() { return this.category; }
-
- /**
- * getCurrentBuilds
- *
- * @return {Array.<number>} List of currently-running builds for this
- * builder.
- */
- this.getCurrentBuilds = function() { return this.currentBuilds; }
-
- /**
- * getLastBuild
- *
- * @return {number} The build number of the last completed build for this
- * builder.
- */
- this.getLastBuild = function() { return this.lastBuild; }
-
- /**
- * getSlaves
- *
- * @return {Array.<string>} List of known build slaves which are capable of
- * running builds for this builder.
- */
- this.getSlaves = function() { return this.slaves; }
-
- /**
- * getState
- *
- * @return {string} Current status of the builder. Either "building" or
- * "idle."
- */
- this.getState = function() { return this.state; }
-
- /**
- * Obtain information about a single build from the buildbot master.
- *
- * @param {number} build The number of the build which should be retrieved.
- * @param {boolean} loadUnfinished Whether or not to load data for unfinished
- * builds.
- * @param {boolean} loadUnknownRevs Whether or not to load data for builds
- * which do not have an associated revision number. This occurs when the
- * source checkout step fails.
- * @param {function(string, number, Build|null)} callback Call this function
- * with a builder name, build number, and a Build instance containing
- * information about the requested build when loaded.
- */
- this.loadDataForBuild = function(build, loadUnfinished, loadUnknownRevs,
- callback) {
- var thisInstance = this;
- var buildURL = "builders/" + this.getName() + "/builds/" + build + "/steps";
- this.master.loadData(buildURL, function(buildData) {
- // Build step results.
- var SUCCESS = 0;
- var FAILURE = 2;
- var SKIPPED = 3;
-
- var steps = [];
- var result = 0;
- var startTime = 0;
- var endTime = 0;
- var revision = undefined;
- var gotRevisionStr = "got_revision: ";
- for (var step in buildData) {
- var stepData = buildData[step];
- if (stepData["isStarted"] && !stepData["isFinished"] &&
- !loadUnfinished) {
- // If the build isn't finished, ignore it
- callback(thisInstance.getName(), build, null);
- }
- if (!stepData["isStarted"]) {
- continue;
- }
- if (stepData["name"] == "Update") {
- // The buildbot's JSON interface stores results as an array in which
- // the first element is an integer indicating success or failure.
- if (stepData["isStarted"] && stepData["isFinished"] &&
- stepData["results"][0] == 0) {
- // The "text" field is an array containing extra information about
- // the build step. In the case of the Update step, its second
- // element is a string indicating the revision obtained for the
- // current build.
- revision = stepData["text"][1].substring(gotRevisionStr.length);
- } else if (!loadUnknownRevs) {
- // If the Update step failed, we can't attach a revision, so we have
- // to ignore this build.
- console.log("Warning: Can't get a revision for build #" + build +
- ". Skipping.");
- callback(thisInstance.getName(), build, null);
- }
- }
- var times = stepData["times"];
- var stepTime = times[1] - times[0];
- if (startTime == 0) {
- startTime = times[0];
- }
- endTime = times[1];
- var stdout = null;
- try {
- stdout = stepData["logs"][0][1];
- } catch(e) {
- stdout = "None";
- }
-
- var buildStep = new skiaTools.BuildStep(stepData["name"], stepTime,
- stepData["results"][0], stdout);
- steps.push(buildStep);
-
- if (buildStep.getResult() != SUCCESS &&
- buildStep.getResult() != SKIPPED) {
- result = FAILURE;
- }
- }
- if (revision == undefined) {
- console.log("Warning: could not find a revision for build #" + build);
- }
-
- callback(thisInstance.getName(), build, new skiaTools.Build(
- thisInstance.getName(), build, revision, result, startTime, endTime,
- steps));
- });
- }
-
- /**
- * Obtain information about the builds for a single builder. Works backward
- * from the last known build, loading builds until the requested number of
- * builds has been fulfilled or all of the builder's builds have been loaded.
- *
- * @param {number} numBuilds The number of builds to load.
- * @param {function(string, Object)} callback Call this function with the
- * builder name and a dictionary of instances of Build for the builder,
- * indexed by revision.
- */
- this.loadBuilds = function(numBuilds, callback) {
- var lastBuild = this.getLastBuild();
- var loading = [];
- var thisInstance = this;
- var doneLoading = function() {
- var data = {};
- for (var buildNum = lastBuild; buildNum >= lastBuild - numBuilds && buildNum >= 0; buildNum--) {
- var build = thisInstance.alreadyLoadedBuilds[buildNum];
- if (build) {
- data[buildNum] = build;
- }
- }
- callback(thisInstance.getName(), data);
- };
- for (var buildNum = lastBuild; buildNum >= lastBuild - numBuilds && buildNum >= 0; buildNum--) {
- var build = this.alreadyLoadedBuilds[buildNum];
- if (!build) {
- loading.push(buildNum);
- this.loadDataForBuild(buildNum, false, false, function(builder, buildNum, build) {
- loading.splice(loading.indexOf(buildNum), 1);
- thisInstance.alreadyLoadedBuilds[buildNum] = build;
- if (loading.length == 0) {
- doneLoading();
- }
- });
- } else {
- data[buildNum] = build;
- if (loading.length == 0) {
- doneLoading();
- }
- }
- }
- }
-},
-
-/**
- * Information about a build slave.
- */
-BuildSlave: function(admin, builders, connected, currentBuilds, host, name,
- master, version) {
- this.admin = admin;
- this.builders = builders;
- this.connected = connected;
- this.currentBuilds = currentBuilds;
- this.host = host;
- this.name = name;
- this.master = master;
- this.version = version;
-
- /**
- * getAdmin
- *
- * @return {string} Usernames of buildbot maintainers.
- */
- this.getAdmin = function() { return this.admin; }
-
- /**
- * getBuilders
- *
- * @return {Object} Dictionary whose keys are builder names and values are
- * lists of build numbers indicating which builds for which builders this
- * slave has performed.
- */
- this.getBuilders = function() { return this.builders; }
-
- /**
- * isConnected
- *
- * @return {boolean} Whether or not the build slave is currently connected
- * to the build master.
- */
- this.isConnected = function() { return this.connected; }
-
- /**
- * getCurrentBuilds
- *
- * @return {Array.<Object>} List of dictionaries containing information about
- * currently-running builds on this slave.
- */
- this.getCurrentBuilds = function() { return this.currentBuilds; }
-
- /**
- * getHost
- *
- * @return {string} Hostname of this build slave.
- */
- this.getHost = function() { return this.host; }
-
- /**
- * getName
- *
- * @return {string} The name of this build slave.
- */
- this.getName = function() { return this.name; }
-
- /**
- * getVersion
- *
- * @return {string} Version of BuildBot which this build slave is running.
- */
- this.getVersion = function() { return this.version; }
-
- /**
- * Obtain information about recent builds for a build slave.
- *
- * @param {number} rangeMin Builds before this time will not be loaded.
- * @param {number} currentTime The time at which {@code slaveDict} was
- * obtained from the build master. This value is passed in rather than
- * obtaining the current time at the call of this function in case the
- * state of the build slave has changed since {@code slaveDict} was
- * obtained.
- * @param {function(Array.<Build>)} callback Call this function with a list
- * of Build objects when loaded.
- */
- this.loadBuilds = function(rangeMin, currentTime, callback) {
- var builders = this.getBuilders();
- var buildList = [];
- var thisInstance = this;
- var getRunningBuilds = function() {
- var runningBuilds = thisInstance.getCurrentBuilds();
- for (var buildIdx = 0; buildIdx < runningBuilds.length; buildIdx++) {
- var buildData = runningBuilds[buildIdx];
- buildList.push(new thisInstance.Build(buildData["builderName"],
- buildData["number"],
- -1, 0, buildData["times"][0],
- currentTime + 1, []));
- }
- buildList.sort(function(a, b) {
- return a.getStartTime() - b.getStartTime();
- });
- callback(buildList);
- };
-
- var loadingBuilders = {};
-
- var gotBuild = function(builder, buildNum, build) {
- buildList.push(build);
- if (build != null &&
- (build.getEndTime() < rangeMin ||
- build.getStartTime() < rangeMin ||
- build.getNumber() == 0)) {
- delete loadingBuilders[builder];
- if (Object.keys(loadingBuilders).length == 0) {
- getRunningBuilds();
- }
- } else {
- var builderObj = loadingBuilders[builder];
- builderObj.loadDataForBuild(buildNum - 1, true, true, gotBuild);
- }
- }
-
- for (var builder in builders) {
- var builderObj = new skiaTools.Builder(builder,
- this.master,
- null,
- [-1],
- null,
- null,
- null,
- null);
- var builds = builders[builder];
- if (builds.length > 0) {
- loadingBuilders[builder] = builderObj;
- builderObj.loadDataForBuild(builds[0], true, true, gotBuild);
- }
- }
- }
-},
-
-loadMasterList: function(callback) {
- var masters = [];
- var thisInstance = this;
- var gotVariables = function() {
- for (var key in thisInstance.globalVariables) {
- var suffixIndex = key.indexOf(
- skiaTools.masterHostSuffix,
- key.length - skiaTools.masterHostSuffix.length);
- if (suffixIndex !== -1) {
- masters.push(key.substring(0, suffixIndex));
- }
- }
- callback(masters);
- }
- if (!thisInstance.globalVariables) {
- this.loadGlobalVariables(gotVariables);
- } else {
- gotVariables();
- }
-},
-
-Master: function(name) {
- this.name = name;
-
- var thisInstance = this;
- skiaTools.getVariable(name + skiaTools.masterHostSuffix, function(host) {
- thisInstance.host = host;
- });
- skiaTools.getVariable(name + skiaTools.masterPortSuffix, function(port) {
- thisInstance.port = port;
- });
-
- /**
- * getName
- *
- * @return {string} Name of this build master.
- */
- this.getName = function() { return this.name; }
-
- /**
- * getHost
- *
- * @return {string} Hostname of this build master.
- */
- this.getHost = function() { return this.host; }
-
- /**
- * getPort
- *
- * @return {string} Port number of this build master.
- */
- this.getPort = function() { return this.port; }
-
- /**
- * loadData
- *
- * Sends an {@code XMLHttpRequest} to the buildbot master, parses the JSON in
- * the response, and returns a dictionary.
- *
- * @param {string} subdir Subdirectory of the buildbot master's JSON
- * interface to query.
- * @param {function(Object)} callback Call this function with the decoded
- * JSON data when loaded.
- */
- this.loadData = function(subdir, callback) {
- try {
- var request = new XMLHttpRequest();
- } catch (error) {
- alert(error);
- }
- var url = "http://" + this.getHost() + ":" + this.getPort() + "/json/" +
- subdir;
- request.open("GET", url, true);
- request.onreadystatechange = function() {
- if (request.readyState != 4) { return; }
- callback(JSON.parse(request.responseText));
- }
- request.send(null);
- }
-
- /**
- * Obtain high-level information about known builders.
- *
- * @param {Array.<Builder>} callback Call this function with a list of
- * Builder objects when loaded.
- */
- this.loadBuilders = function(callback) {
- var thisInstance = this;
- this.loadData("builders", function(buildersData) {
- var builders = [];
- for (var builderName in buildersData) {
- var builderData = buildersData[builderName];
- var builder = new skiaTools.Builder(builderName,
- thisInstance,
- builderData["basedir"],
- builderData["cachedBuilds"],
- builderData["category"],
- builderData["currentBuilds"],
- builderData["slaves"],
- builderData["state"]);
- builders.push(builder);
- }
- callback(builders);
- });
- }
-
- /**
- * Obtain high-level information about known build slaves.
- *
- * @param {function(Array.<BuildSlave>)} callback Call this function with a
- * list of BuildSlave objects when loaded.
- */
- this.loadSlaves = function(callback) {
- var slaves = [];
- var thisInstance = this;
- this.loadData("slaves", function(slavesData) {
- for (var slave in slavesData) {
- var slaveData = slavesData[slave];
- var currentBuilds = slaveData["currentBuilds"];
- if (currentBuilds == undefined) {
- currentBuilds = [];
- }
- slaves.push(new skiaTools.BuildSlave(slaveData["admin"],
- slaveData["builders"],
- slaveData["connected"],
- currentBuilds,
- slaveData["host"],
- slaveData["name"],
- thisInstance,
- slaveData["version"]));
- }
- callback(slaves);
- });
- }
-
-},
-
-};
« no previous file with comments | « master/public_html/robots.txt ('k') | master/skia_master_scripts/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698