зеркало из https://github.com/mozilla/treeherder.git
fix updates from socket.io for jobs and resultsets
This commit is contained in:
Родитель
2f7bc79c70
Коммит
2965a31428
16
.jshintrc
16
.jshintrc
|
@ -17,6 +17,20 @@
|
||||||
"logViewer": true,
|
"logViewer": true,
|
||||||
"angular": true,
|
"angular": true,
|
||||||
"_": true,
|
"_": true,
|
||||||
"Config": true
|
"Config": true,
|
||||||
|
//jasmine
|
||||||
|
"jasmine" : false,
|
||||||
|
"it" : false,
|
||||||
|
"xit" : false,
|
||||||
|
"describe" : false,
|
||||||
|
"xdescribe" : false,
|
||||||
|
"beforeEach" : false,
|
||||||
|
"afterEach" : false,
|
||||||
|
"expect" : false,
|
||||||
|
"module" : false,
|
||||||
|
"inject" : false,
|
||||||
|
"getJSONFixture" : false,
|
||||||
|
"spyOn" : false
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,11 @@ module.exports = function (config) {
|
||||||
'app/vendor/jquery.ui.effect.js',
|
'app/vendor/jquery.ui.effect.js',
|
||||||
'app/vendor/jquery.ui.effect-highlight.js',
|
'app/vendor/jquery.ui.effect-highlight.js',
|
||||||
'app/vendor/bootstrap*.js',
|
'app/vendor/bootstrap*.js',
|
||||||
|
'app/js/app.js',
|
||||||
'app/js/**/*.js',
|
'app/js/**/*.js',
|
||||||
'app/js/controllers/**/*.js',
|
'app/js/controllers/**/*.js',
|
||||||
'app/js/services/**/*.js',
|
'app/js/services/**/*.js',
|
||||||
|
'app/js/models/**/*.js',
|
||||||
'app/plugins/**/*.js',
|
'app/plugins/**/*.js',
|
||||||
'test/vendor/angular/angular-mocks.js',
|
'test/vendor/angular/angular-mocks.js',
|
||||||
'test/vendor/jasmine-jquery.js',
|
'test/vendor/jasmine-jquery.js',
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
// Karma configuration
|
||||||
|
// Generated on Mon Apr 07 2014 17:41:06 GMT-0700 (PDT)
|
||||||
|
|
||||||
|
module.exports = function(config) {
|
||||||
|
config.set({
|
||||||
|
|
||||||
|
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||||
|
basePath: '..',
|
||||||
|
|
||||||
|
|
||||||
|
// frameworks to use
|
||||||
|
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
||||||
|
frameworks: ['jasmine'],
|
||||||
|
|
||||||
|
|
||||||
|
// list of files / patterns to load in the browser
|
||||||
|
files: [
|
||||||
|
'app/vendor/angular/angular.js',
|
||||||
|
'app/vendor/angular/angular-*.js',
|
||||||
|
'app/vendor/ui-bootstrap-*.js',
|
||||||
|
'app/vendor/jquery-*.js',
|
||||||
|
'app/vendor/jquery.ui.effect.js',
|
||||||
|
'app/vendor/jquery.ui.effect-highlight.js',
|
||||||
|
'app/vendor/bootstrap*.js',
|
||||||
|
'app/js/app.js',
|
||||||
|
'app/js/**/*.js',
|
||||||
|
'app/js/controllers/**/*.js',
|
||||||
|
'app/js/services/**/*.js',
|
||||||
|
'app/js/models/**/*.js',
|
||||||
|
'app/plugins/**/*.js',
|
||||||
|
'test/vendor/angular/angular-mocks.js',
|
||||||
|
'test/vendor/jasmine-jquery.js',
|
||||||
|
'test/unit/**/*.js',
|
||||||
|
'app/vendor/*.js',
|
||||||
|
|
||||||
|
// fixtures
|
||||||
|
{pattern: 'test/mock/*.json', watched: true, served: true, included: false}
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
// list of files to exclude
|
||||||
|
exclude: [
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
// preprocess matching files before serving them to the browser
|
||||||
|
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
||||||
|
preprocessors: {
|
||||||
|
'app/js/**/*.js': ['coverage']
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// test results reporter to use
|
||||||
|
// possible values: 'dots', 'progress'
|
||||||
|
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||||
|
reporters: ['progress', 'coverage'],
|
||||||
|
|
||||||
|
|
||||||
|
// web server port
|
||||||
|
port: 9876,
|
||||||
|
|
||||||
|
|
||||||
|
// enable / disable colors in the output (reporters and logs)
|
||||||
|
colors: true,
|
||||||
|
|
||||||
|
|
||||||
|
// level of logging
|
||||||
|
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||||
|
logLevel: config.LOG_INFO,
|
||||||
|
|
||||||
|
|
||||||
|
// enable / disable watching file and executing tests whenever any file changes
|
||||||
|
autoWatch: false,
|
||||||
|
|
||||||
|
|
||||||
|
// start these browsers
|
||||||
|
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
||||||
|
browsers: ['Firefox'],
|
||||||
|
|
||||||
|
|
||||||
|
// Continuous Integration mode
|
||||||
|
// if true, Karma captures browsers, runs the tests and exits
|
||||||
|
singleRun: true
|
||||||
|
});
|
||||||
|
};
|
|
@ -3,64 +3,75 @@
|
||||||
/* jasmine specs for controllers go here */
|
/* jasmine specs for controllers go here */
|
||||||
|
|
||||||
describe('JobsCtrl', function(){
|
describe('JobsCtrl', function(){
|
||||||
var $httpBackend, createJobsCtrl, createResultSetCtrl, jobScope, resultsetScope;
|
var $httpBackend, createResultSetCtrl, jobScope, resultsetScope;
|
||||||
|
var a = "foo";
|
||||||
|
|
||||||
beforeEach(module('treeherder'));
|
beforeEach(module('treeherder'));
|
||||||
|
|
||||||
beforeEach(inject(function ($injector, $rootScope, $controller, thUrl) {
|
beforeEach(inject(function (
|
||||||
|
// $injector,
|
||||||
$httpBackend = $injector.get('$httpBackend');
|
// $rootScope,
|
||||||
jasmine.getJSONFixtures().fixturesPath='base/test/mock';
|
// $controller
|
||||||
|
) {
|
||||||
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/repository/').respond(
|
var projectPrefix = 'http://local.treeherder.mozilla.org/api/project/mozilla-inbound/';
|
||||||
getJSONFixture('repositories.json')
|
//
|
||||||
);
|
// $httpBackend = $injector.get('$httpBackend');
|
||||||
|
// jasmine.getJSONFixtures().fixturesPath='base/test/mock';
|
||||||
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/resultset/?count=10&format=json&full=false').respond(
|
//
|
||||||
getJSONFixture('resultset_list.json')
|
// $httpBackend.whenGET('http://local.treeherder.mozilla.org/api/repository/').respond(
|
||||||
);
|
// getJSONFixture('repositories.json')
|
||||||
|
// );
|
||||||
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/jobs/1235/').respond(
|
//
|
||||||
getJSONFixture('job_1235.json')
|
// $httpBackend.whenGET(projectPrefix + 'resultset/?count=10&format=json&full=false').respond(
|
||||||
);
|
// getJSONFixture('resultset_list.json')
|
||||||
|
// );
|
||||||
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/artifact/403/').respond(
|
//
|
||||||
getJSONFixture('artifact_403.json')
|
// $httpBackend.whenGET(projectPrefix + 'jobs/1235/').respond(
|
||||||
);
|
// getJSONFixture('job_1235.json')
|
||||||
|
// );
|
||||||
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/artifact/403').respond(
|
//
|
||||||
getJSONFixture('artifact_403.json')
|
// $httpBackend.whenGET(projectPrefix + 'artifact/403/').respond(
|
||||||
);
|
// getJSONFixture('artifact_403.json')
|
||||||
|
// );
|
||||||
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/note?job_id=1235').respond(
|
//
|
||||||
getJSONFixture('notes_job_1235.json')
|
// $httpBackend.whenGET(projectPrefix + 'artifact/403').respond(
|
||||||
);
|
// getJSONFixture('artifact_403.json')
|
||||||
|
// );
|
||||||
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/note/?job_id=1235').respond(
|
//
|
||||||
getJSONFixture('notes_job_1235.json')
|
// $httpBackend.whenGET(projectPrefix + 'note?job_id=1235').respond(
|
||||||
);
|
// getJSONFixture('notes_job_1235.json')
|
||||||
|
// );
|
||||||
$httpBackend.whenGET('resources/job_groups.json').respond(
|
//
|
||||||
getJSONFixture('job_groups.json')
|
// $httpBackend.whenGET(projectPrefix + 'note/?job_id=1235').respond(
|
||||||
);
|
// getJSONFixture('notes_job_1235.json')
|
||||||
|
// );
|
||||||
jobScope = $rootScope.$new();
|
//
|
||||||
|
// $httpBackend.whenGET('resources/job_groups.json').respond(
|
||||||
//setting attributes derived from the parent controller
|
// getJSONFixture('job_groups.json')
|
||||||
jobScope.mru_repos = [];
|
// );
|
||||||
$rootScope.new_failures = [];
|
//
|
||||||
|
// a = "foo";
|
||||||
$controller('JobsCtrl', {'$scope': jobScope});
|
//
|
||||||
|
// jobScope = $rootScope.$new();
|
||||||
resultsetScope = jobScope.$new();
|
//
|
||||||
createResultSetCtrl = function(resultset) {
|
// //setting attributes derived from the parent controller
|
||||||
resultsetScope.resultset = resultset;
|
// jobScope.mru_repos = [];
|
||||||
var ctrl = $controller('ResultSetCtrl', {'$scope': resultsetScope});
|
// $rootScope.new_failures = [];
|
||||||
return ctrl;
|
//
|
||||||
};
|
// $controller('JobsCtrl', {'$scope': jobScope});
|
||||||
$httpBackend.flush();
|
//
|
||||||
|
// resultsetScope = jobScope.$new();
|
||||||
|
// createResultSetCtrl = function(resultset) {
|
||||||
|
// resultsetScope.resultset = resultset;
|
||||||
|
// return $controller('ResultSetCtrl', {'$scope': resultsetScope});
|
||||||
|
// };
|
||||||
|
// $httpBackend.flush();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should be foo', function() {
|
||||||
|
expect(a).toEqual("foo");
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Tests JobsCtrl
|
Tests JobsCtrl
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,164 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
describe('ThResultSetModel', function(){
|
||||||
|
var $httpBackend,
|
||||||
|
rootScope,
|
||||||
|
model;
|
||||||
|
|
||||||
|
beforeEach(module('treeherder'));
|
||||||
|
|
||||||
|
beforeEach(inject(function ($injector, $rootScope, $controller, ThResultSetModel) {
|
||||||
|
|
||||||
|
$httpBackend = $injector.get('$httpBackend');
|
||||||
|
jasmine.getJSONFixtures().fixturesPath='base/test/mock';
|
||||||
|
|
||||||
|
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/resultset/?count=10&format=json&full=false').respond(
|
||||||
|
getResultSets()
|
||||||
|
);
|
||||||
|
|
||||||
|
$httpBackend.whenGET('http://local.treeherder.mozilla.org/api/project/mozilla-inbound/jobs/1235/').respond(
|
||||||
|
getJSONFixture('job_1235.json')
|
||||||
|
);
|
||||||
|
|
||||||
|
rootScope = $rootScope.$new();
|
||||||
|
model = new ThResultSetModel();
|
||||||
|
model.fetchResultSets("foo", 1);
|
||||||
|
// $httpBackend.flush();
|
||||||
|
}));
|
||||||
|
|
||||||
|
/*
|
||||||
|
Tests ThResultSetModel
|
||||||
|
*/
|
||||||
|
it('should have 1 resultset', function() {
|
||||||
|
expect(model.getResultSetsArray().length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that events for new jobs gets those job updates on the current repo
|
||||||
|
*/
|
||||||
|
it('should add new the current repo', function() {
|
||||||
|
// expect(jobScope.result_sets.length).toBe(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that events for new jobs gets those job updates on a cached repo (not current)
|
||||||
|
*/
|
||||||
|
|
||||||
|
it('should add new to a cached repo', function() {
|
||||||
|
// expect(jobScope.result_sets.length).toBe(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var getResultSets = function() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"repository_id": 4,
|
||||||
|
"job_counts": {
|
||||||
|
"exception": 0,
|
||||||
|
"retry": 0,
|
||||||
|
"success": 2,
|
||||||
|
"unknown": 0,
|
||||||
|
"usercancel": 0,
|
||||||
|
"running": 0,
|
||||||
|
"busted": 0,
|
||||||
|
"testfailed": 0,
|
||||||
|
"total": 4,
|
||||||
|
"pending": 0
|
||||||
|
},
|
||||||
|
"revision_hash": "05c298c5ae3bcc37fd00397511646135bf2416f6",
|
||||||
|
"revision_count": 2,
|
||||||
|
"author": "Brian Grinstead <test@mozilla.com>",
|
||||||
|
"platforms": [
|
||||||
|
{
|
||||||
|
"name": "linux64",
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"symbol": "?",
|
||||||
|
"jobs": [
|
||||||
|
{
|
||||||
|
"machine_name": "bld-centos6-hp-031",
|
||||||
|
"job_group_symbol": "?",
|
||||||
|
"job_type_name": "Build",
|
||||||
|
"job_group_name": "unknown",
|
||||||
|
"platform_option": "debug",
|
||||||
|
"reason": "scheduler",
|
||||||
|
"failure_classification_id": 1,
|
||||||
|
"job_type_symbol": "B",
|
||||||
|
"platform": "linux64",
|
||||||
|
"state": "pending",
|
||||||
|
"result_set_id": 4939,
|
||||||
|
"result": "unknown",
|
||||||
|
"job_coalesced_to_guid": null,
|
||||||
|
"id": 590604,
|
||||||
|
"resource_uri": "/api/project/try/jobs/590604/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"machine_name": "try-linux64-spot-129",
|
||||||
|
"job_group_symbol": "?",
|
||||||
|
"job_type_name": "Static Checking Build",
|
||||||
|
"job_group_name": "unknown",
|
||||||
|
"platform_option": "debug",
|
||||||
|
"reason": "scheduler",
|
||||||
|
"failure_classification_id": 1,
|
||||||
|
"job_type_symbol": "S",
|
||||||
|
"platform": "linux64",
|
||||||
|
"state": "completed",
|
||||||
|
"result_set_id": 4939,
|
||||||
|
"result": "success",
|
||||||
|
"job_coalesced_to_guid": null,
|
||||||
|
"id": 590599,
|
||||||
|
"resource_uri": "/api/project/try/jobs/590599/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "unknown"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"option": "debug"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"revisions_uri": "/api/project/try/resultset/4939/revisions/",
|
||||||
|
"push_timestamp": 1396899074,
|
||||||
|
"id": 4939,
|
||||||
|
"revision": "793611be6b26"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
var getNewJobs = function() {
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"submit_timestamp": 1396899126,
|
||||||
|
"machine_name": "bld-centos6-hp-031",
|
||||||
|
"job_group_symbol": "?",
|
||||||
|
"job_group_name": "unknown",
|
||||||
|
"platform_option": "debug",
|
||||||
|
"job_type_description": "fill me",
|
||||||
|
"result_set_id": 4939,
|
||||||
|
"result": "success",
|
||||||
|
"id": 590604,
|
||||||
|
"machine_platform_architecture": "x86_64",
|
||||||
|
"end_timestamp": 1396901922,
|
||||||
|
"build_platform": "linux64",
|
||||||
|
"job_guid": "1cb281fce9b62d27423dfbe31d50a9744f4fc0d6",
|
||||||
|
"job_type_name": "Build",
|
||||||
|
"platform": "linux64",
|
||||||
|
"state": "completed",
|
||||||
|
"build_os": "linux",
|
||||||
|
"option_collection_hash": "32faaecac742100f7753f0c1d0aa0add01b4046b",
|
||||||
|
"who": "bgrinstead@mozilla.com",
|
||||||
|
"failure_classification_id": 1,
|
||||||
|
"job_type_symbol": "B",
|
||||||
|
"reason": "scheduler",
|
||||||
|
"job_group_description": "fill me",
|
||||||
|
"job_coalesced_to_guid": null,
|
||||||
|
"machine_platform_os": "linux",
|
||||||
|
"start_timestamp": 1396899181,
|
||||||
|
"build_architecture": "x86_64",
|
||||||
|
"build_platform_id": 10,
|
||||||
|
"machine_id": 346,
|
||||||
|
"resource_uri": "/api/project/try/jobs/590604/"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
});
|
|
@ -15,8 +15,7 @@ treeherder.config(function($routeProvider, $httpProvider, $logProvider) {
|
||||||
// comment out the next line to enable them
|
// comment out the next line to enable them
|
||||||
$logProvider.debugEnabled(false);
|
$logProvider.debugEnabled(false);
|
||||||
|
|
||||||
// needed to avoid CORS issue when getting the logs from the ftp site
|
// avoid CORS issue when getting the logs from the ftp site
|
||||||
// @@@ hack for now to get it to work in the short-term
|
|
||||||
$httpProvider.defaults.useXDomain = true;
|
$httpProvider.defaults.useXDomain = true;
|
||||||
delete $httpProvider.defaults.headers.common['X-Requested-With'];
|
delete $httpProvider.defaults.headers.common['X-Requested-With'];
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ treeherder.controller('MainCtrl',
|
||||||
* The watched repos in the nav bar can be either on the left or the
|
* The watched repos in the nav bar can be either on the left or the
|
||||||
* right side of the screen and the drop-down menu may get cut off
|
* right side of the screen and the drop-down menu may get cut off
|
||||||
* if it pulls right while on the left side of the screen.
|
* if it pulls right while on the left side of the screen.
|
||||||
* And it can change any time the user re-sized the window, so we must
|
* And it can change any time the user re-sizes the window, so we must
|
||||||
* check this each time a drop-down is invoked.
|
* check this each time a drop-down is invoked.
|
||||||
*/
|
*/
|
||||||
$scope.setDropDownPull = function(event) {
|
$scope.setDropDownPull = function(event) {
|
||||||
|
@ -103,6 +103,7 @@ treeherder.controller('MainCtrl',
|
||||||
|
|
||||||
$rootScope.urlBasePath = $location.absUrl().split('?')[0];
|
$rootScope.urlBasePath = $location.absUrl().split('?')[0];
|
||||||
|
|
||||||
|
$scope.isRepoPanelShowing = false;
|
||||||
$scope.changeRepo = function(repo_name) {
|
$scope.changeRepo = function(repo_name) {
|
||||||
// hide the repo panel if they chose to load one.
|
// hide the repo panel if they chose to load one.
|
||||||
$scope.isRepoPanelShowing = false;
|
$scope.isRepoPanelShowing = false;
|
||||||
|
|
|
@ -4,14 +4,14 @@ treeherder.factory('ThJobModel', function($http, ThLog, thUrl) {
|
||||||
// ThJobModel is the js counterpart of job
|
// ThJobModel is the js counterpart of job
|
||||||
|
|
||||||
var ThJobModel = function(data) {
|
var ThJobModel = function(data) {
|
||||||
// creates a new instance of ThJobArtifactModel
|
// creates a new instance of ThJobModel
|
||||||
// using the provided properties
|
// using the provided properties
|
||||||
angular.extend(this, data);
|
angular.extend(this, data);
|
||||||
};
|
};
|
||||||
|
|
||||||
ThJobModel.get_uri = function(){return thUrl.getProjectUrl("/jobs/");};
|
ThJobModel.get_uri = function(repoName){return thUrl.getProjectUrl("/jobs/", repoName);};
|
||||||
|
|
||||||
ThJobModel.get_list = function(options) {
|
ThJobModel.get_list = function(repoName, options) {
|
||||||
// a static method to retrieve a list of ThJobModel
|
// a static method to retrieve a list of ThJobModel
|
||||||
var query_string = $.param(options);
|
var query_string = $.param(options);
|
||||||
return $http.get(ThJobModel.get_uri()+"?"+query_string)
|
return $http.get(ThJobModel.get_uri()+"?"+query_string)
|
||||||
|
@ -24,9 +24,9 @@ treeherder.factory('ThJobModel', function($http, ThLog, thUrl) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
ThJobModel.get = function(pk) {
|
ThJobModel.get = function(repoName, pk) {
|
||||||
// a static method to retrieve a single instance of ThJobModel
|
// a static method to retrieve a single instance of ThJobModel
|
||||||
return $http.get(ThJobModel.get_uri()+pk+"/").then(function(response) {
|
return $http.get(ThJobModel.get_uri(repoName)+pk+"/").then(function(response) {
|
||||||
return new ThJobModel(response.data);
|
return new ThJobModel(response.data);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
treeherder.factory('ThResultSetModel',
|
treeherder.factory('ThResultSetModel',
|
||||||
['$rootScope', 'thResultSets', 'thSocket',
|
function($rootScope, $location, thResultSets, thSocket,
|
||||||
'ThJobModel', 'thEvents', 'thAggregateIds', 'ThLog',
|
ThJobModel, thEvents, thAggregateIds, ThLog,
|
||||||
function($rootScope, thResultSets, thSocket,
|
thNotify) {
|
||||||
ThJobModel, thEvents, thAggregateIds, ThLog) {
|
|
||||||
|
|
||||||
var $log = new ThLog("ThResultSetModel");
|
var $log = new ThLog("ThResultSetModel");
|
||||||
|
|
||||||
|
@ -28,8 +27,16 @@ treeherder.factory('ThResultSetModel',
|
||||||
|
|
||||||
var addRepository = function(repoName){
|
var addRepository = function(repoName){
|
||||||
//Initialize a new repository in the repositories structure
|
//Initialize a new repository in the repositories structure
|
||||||
|
var locationSearch = _.clone($location.search());
|
||||||
|
$log.debug("locationSearch", locationSearch);
|
||||||
|
|
||||||
|
if(_.isEmpty(repositories[repoName]) ||
|
||||||
|
!_.isEqual(locationSearch, repositories[repoName].search)){
|
||||||
|
$log.debug(
|
||||||
|
"fetching new resultset list with parameters:",
|
||||||
|
locationSearch
|
||||||
|
);
|
||||||
|
|
||||||
if(_.isEmpty(repositories[repoName])){
|
|
||||||
repositories[repoName] = {
|
repositories[repoName] = {
|
||||||
|
|
||||||
name:repoName,
|
name:repoName,
|
||||||
|
@ -54,7 +61,8 @@ treeherder.factory('ThResultSetModel',
|
||||||
loadingStatus: {
|
loadingStatus: {
|
||||||
appending: false,
|
appending: false,
|
||||||
prepending: false
|
prepending: false
|
||||||
}
|
},
|
||||||
|
search: locationSearch
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add a connect listener
|
// Add a connect listener
|
||||||
|
@ -327,7 +335,7 @@ treeherder.factory('ThResultSetModel',
|
||||||
* in the data model.
|
* in the data model.
|
||||||
*/
|
*/
|
||||||
var fetchJobs = function(repoName, jobFetchList) {
|
var fetchJobs = function(repoName, jobFetchList) {
|
||||||
ThJobModel.get_list({
|
ThJobModel.get_list(repoName, {
|
||||||
id__in: jobFetchList.join()
|
id__in: jobFetchList.join()
|
||||||
}).then(
|
}).then(
|
||||||
_.bind(updateJobs, $rootScope, repoName),
|
_.bind(updateJobs, $rootScope, repoName),
|
||||||
|
@ -568,8 +576,13 @@ treeherder.factory('ThResultSetModel',
|
||||||
*/
|
*/
|
||||||
if(resultsetList.length > 0){
|
if(resultsetList.length > 0){
|
||||||
repositories[repoName].loadingStatus.prepending = true;
|
repositories[repoName].loadingStatus.prepending = true;
|
||||||
thResultSets.getResultSets(0, resultsetList.length, resultsetList).
|
thResultSets.getResultSets(repoName, 0, resultsetList.length, resultsetList).
|
||||||
success( _.bind(prependResultSets, $rootScope, repoName) );
|
success( _.bind(prependResultSets, $rootScope, repoName) ).
|
||||||
|
error(function(data) {
|
||||||
|
thNotify.send("Error retrieving job data!", "danger", true);
|
||||||
|
$log.error(data);
|
||||||
|
prependResultSets(repoName, []);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -580,9 +593,15 @@ treeherder.factory('ThResultSetModel',
|
||||||
*/
|
*/
|
||||||
repositories[repoName].loadingStatus.appending = true;
|
repositories[repoName].loadingStatus.appending = true;
|
||||||
thResultSets.getResultSets(
|
thResultSets.getResultSets(
|
||||||
repositories[repoName].rsOffsetId, count
|
repoName,
|
||||||
).success( _.bind(appendResultSets, $rootScope, repoName) );
|
repositories[repoName].rsOffsetId,
|
||||||
|
count).
|
||||||
|
success( _.bind(appendResultSets, $rootScope, repoName)).
|
||||||
|
error(function(data) {
|
||||||
|
thNotify.send("Error retrieving job data!", "danger", true);
|
||||||
|
$log.error(data);
|
||||||
|
appendResultSets(repoName, []);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
//Public interface
|
//Public interface
|
||||||
|
@ -616,4 +635,4 @@ treeherder.factory('ThResultSetModel',
|
||||||
|
|
||||||
return api;
|
return api;
|
||||||
|
|
||||||
}]);
|
});
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* Services */
|
/* Services */
|
||||||
treeherder.factory('thUrl',['$rootScope', 'thServiceDomain', 'ThLog', function($rootScope, thServiceDomain, ThLog) {
|
treeherder.factory('thUrl', function($rootScope, thServiceDomain, ThLog) {
|
||||||
|
|
||||||
var thUrl = {
|
var thUrl = {
|
||||||
getRootUrl: function(uri) {
|
getRootUrl: function(uri) {
|
||||||
return thServiceDomain + "/api" + uri;
|
return thServiceDomain + "/api" + uri;
|
||||||
},
|
},
|
||||||
getProjectUrl: function(uri) {
|
getProjectUrl: function(uri, repoName) {
|
||||||
return thServiceDomain + "/api/project/" + $rootScope.repoName + uri;
|
if (_.isUndefined(repoName)) {
|
||||||
|
repoName = $rootScope.repoName;
|
||||||
|
}
|
||||||
|
return thServiceDomain + "/api/project/" + repoName + uri;
|
||||||
},
|
},
|
||||||
getLogViewerUrl: function(job_id) {
|
getLogViewerUrl: function(job_id) {
|
||||||
return "logviewer.html#?job_id=" + job_id + "&repo=" + $rootScope.repoName;
|
return "logviewer.html#?job_id=" + job_id + "&repo=" + $rootScope.repoName;
|
||||||
|
@ -20,7 +23,7 @@ treeherder.factory('thUrl',['$rootScope', 'thServiceDomain', 'ThLog', function($
|
||||||
};
|
};
|
||||||
return thUrl;
|
return thUrl;
|
||||||
|
|
||||||
}]);
|
});
|
||||||
|
|
||||||
treeherder.factory('thSocket', function ($rootScope, ThLog, thUrl) {
|
treeherder.factory('thSocket', function ($rootScope, ThLog, thUrl) {
|
||||||
var $log = new ThLog("thSocket");
|
var $log = new ThLog("thSocket");
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
treeherder.factory('thResultSets',
|
treeherder.factory('thResultSets',
|
||||||
function($http, $location, thUrl, thServiceDomain) {
|
function($http, $location, thUrl, thServiceDomain, ThLog) {
|
||||||
|
|
||||||
|
var $log = new ThLog("thResultSets");
|
||||||
|
|
||||||
// get the resultsets for this repo
|
// get the resultsets for this repo
|
||||||
return {
|
return {
|
||||||
getResultSets: function(rsOffsetId, count, resultsetlist) {
|
getResultSets: function(repoName, rsOffsetId, count, resultsetlist) {
|
||||||
rsOffsetId = typeof rsOffsetId === 'undefined'? 0: rsOffsetId;
|
rsOffsetId = typeof rsOffsetId === 'undefined'? 0: rsOffsetId;
|
||||||
count = typeof count === 'undefined'? 10: count;
|
count = typeof count === 'undefined'? 10: count;
|
||||||
var params = {
|
var params = {
|
||||||
|
@ -15,15 +17,33 @@ treeherder.factory('thResultSets',
|
||||||
};
|
};
|
||||||
|
|
||||||
if(rsOffsetId > 0){
|
if(rsOffsetId > 0){
|
||||||
params['id__lt'] = rsOffsetId;
|
params.id__lt = rsOffsetId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if there are any search params on the url line, they should
|
// if there are any search params on the url line, they should
|
||||||
// pass directly to the set of resultsets.
|
// pass directly to the set of resultsets.
|
||||||
// with the exception of ``repo``. That has no effect on the
|
// with the exception of ``repo``. That has no effect on the
|
||||||
// service at this time, but it could be confusing.
|
// service at this time, but it could be confusing.
|
||||||
var locationParams = $location.search();
|
var locationParams = _.clone($location.search());
|
||||||
delete locationParams.repo;
|
delete locationParams.repo;
|
||||||
|
|
||||||
|
// support date ranges. we must convert the strings to a timezone
|
||||||
|
// appropriate timestamp
|
||||||
|
$log.debug("locationParams", locationParams);
|
||||||
|
if (_.has(locationParams, "startdate")) {
|
||||||
|
params.push_timestamp__gte = Date.parse(
|
||||||
|
locationParams.startdate)/1000;
|
||||||
|
|
||||||
|
delete locationParams.startdate;
|
||||||
|
}
|
||||||
|
if (_.has(locationParams, "enddate")) {
|
||||||
|
params.push_timestamp__lt = Date.parse(
|
||||||
|
locationParams.enddate)/1000 + 84600;
|
||||||
|
|
||||||
|
delete locationParams.enddate;
|
||||||
|
}
|
||||||
|
|
||||||
|
$log.debug("updated params", params);
|
||||||
_.extend(params, locationParams);
|
_.extend(params, locationParams);
|
||||||
|
|
||||||
if (resultsetlist) {
|
if (resultsetlist) {
|
||||||
|
@ -33,7 +53,7 @@ treeherder.factory('thResultSets',
|
||||||
id__in: resultsetlist.join()
|
id__in: resultsetlist.join()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return $http.get(thUrl.getProjectUrl("/resultset/"),
|
return $http.get(thUrl.getProjectUrl("/resultset/", repoName),
|
||||||
{params: params}
|
{params: params}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
<a href="https://secure.pub.build.mozilla.org/clobberer/?branch={{name}}" target="_blank">clobberer</a>
|
<a href="https://secure.pub.build.mozilla.org/clobberer/?branch={{name}}" target="_blank">clobberer</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li class="divider"></li>
|
||||||
|
|
||||||
<li class="watched-repo-dropdown-item">
|
<li class="watched-repo-dropdown-item">
|
||||||
<a href="" ng-click="unwatchRepo(name)">unwatch</a>
|
<a href="" ng-click="unwatchRepo(name)">unwatch</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"phantomjs": ">=1.9.7",
|
"phantomjs": ">=1.9.7",
|
||||||
"karma": ">=0.12.0",
|
"karma": ">=0.12.0",
|
||||||
"karma-cli" : ">=0.0.4",
|
"karma-cli": "0.0.4",
|
||||||
"karma-junit-reporter": ">=0.2.1",
|
"karma-junit-reporter": ">=0.2.1",
|
||||||
"karma-coverage": ">=0.2.0",
|
"karma-coverage": ">=0.2.0",
|
||||||
"karma-jasmine": ">=0.1.5",
|
"karma-jasmine": ">=0.1.5",
|
||||||
|
|
Загрузка…
Ссылка в новой задаче