From 34c992f48cea83d8273675c8999d137a4e0e9923 Mon Sep 17 00:00:00 2001 From: Chris Houseknecht Date: Sun, 6 Apr 2014 11:35:57 -0400 Subject: [PATCH] AC-977 fixed jobs in AS so that user can search by Job Name and the job name is diplayed in description. Links to jobs page work as well, filtering completed jobs by job id. --- awx/ui/static/js/controllers/Jobs.js | 2 +- awx/ui/static/js/helpers/JobSubmission.js | 1 - awx/ui/static/js/helpers/Jobs.js | 15 +++++++++++--- awx/ui/static/js/helpers/search.js | 2 +- awx/ui/static/js/lists/Streams.js | 7 ++++--- awx/ui/static/js/widgets/Stream.js | 25 ++++++++++++----------- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/awx/ui/static/js/controllers/Jobs.js b/awx/ui/static/js/controllers/Jobs.js index 05c49479ad..a83c19ddba 100644 --- a/awx/ui/static/js/controllers/Jobs.js +++ b/awx/ui/static/js/controllers/Jobs.js @@ -49,7 +49,7 @@ function JobsListController ($scope, $compile, ClearScope, Breadcrumbs, LoadBrea scope: completed_scope, list: CompletedJobsList, id: 'completed-jobs', - url: GetBasePath('unified_jobs') + '?or__status=successful&or__status=failed&or__status=error&or__status=canceled' + url: GetBasePath('unified_jobs') + '?or__status=successful&or__status=failed&or__status=error&or__status=canceled', }); running_scope = $scope.$new(true); LoadJobsScope({ diff --git a/awx/ui/static/js/helpers/JobSubmission.js b/awx/ui/static/js/helpers/JobSubmission.js index 95ed9f1b4d..176a9ba531 100644 --- a/awx/ui/static/js/helpers/JobSubmission.js +++ b/awx/ui/static/js/helpers/JobSubmission.js @@ -113,7 +113,6 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi function promptPassword() { var e, fld, field; - console.log(passwords); password = passwords.pop(); // Prompt for password diff --git a/awx/ui/static/js/helpers/Jobs.js b/awx/ui/static/js/helpers/Jobs.js index e3eb38eadd..c0565f3763 100644 --- a/awx/ui/static/js/helpers/Jobs.js +++ b/awx/ui/static/js/helpers/Jobs.js @@ -342,14 +342,15 @@ angular.module('JobsHelper', ['Utilities', 'RestServices', 'FormGenerator', 'Job * Called from JobsList controller to load each section or list on the page * */ -.factory('LoadJobsScope', ['SearchInit', 'PaginateInit', 'GenerateList', 'JobsControllerInit', 'JobsListUpdate', - function(SearchInit, PaginateInit, GenerateList, JobsControllerInit, JobsListUpdate) { +.factory('LoadJobsScope', ['$routeParams', '$location', 'SearchInit', 'PaginateInit', 'GenerateList', 'JobsControllerInit', 'JobsListUpdate', + function($routeParams, $location, SearchInit, PaginateInit, GenerateList, JobsControllerInit, JobsListUpdate) { return function(params) { var parent_scope = params.parent_scope, scope = params.scope, list = params.list, id = params.id, - url = params.url; + url = params.url, + base = $location.path().replace(/^\//, '').split('/')[0]; GenerateList.inject(list, { mode: 'edit', @@ -384,6 +385,14 @@ angular.module('JobsHelper', ['Utilities', 'RestServices', 'FormGenerator', 'Job JobsListUpdate({ scope: scope, parent_scope: parent_scope, list: list }); parent_scope.$emit('listLoaded'); }); + + if (base === 'jobs' && list.name === 'completed_jobs') { + if ($routeParams.id__int) { + scope[list.iterator + 'SearchField'] = 'id'; + scope[list.iterator + 'SearchValue'] = $routeParams.id__int; + scope[list.iterator + 'SearchFieldLabel'] = 'Job ID'; + } + } scope.search(list.iterator); }; }]) diff --git a/awx/ui/static/js/helpers/search.js b/awx/ui/static/js/helpers/search.js index 586f623bef..0071a47e04 100644 --- a/awx/ui/static/js/helpers/search.js +++ b/awx/ui/static/js/helpers/search.js @@ -282,7 +282,7 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) if (calcOnly) { scope.$emit('searchParamsReady', url); } - else if (defaultUrl) { + else if (defaultUrl && !/undefined/.test(url)) { Refresh({ scope: scope, set: set, diff --git a/awx/ui/static/js/lists/Streams.js b/awx/ui/static/js/lists/Streams.js index 33039954d2..2afd7d5e08 100644 --- a/awx/ui/static/js/lists/Streams.js +++ b/awx/ui/static/js/lists/Streams.js @@ -27,7 +27,8 @@ angular.module('StreamListDefinition', []) key: true, desc: true, noLink: true, - searchable: false + searchable: false, + filter: "date:'MM/dd/yy HH:mm:ss'" }, user: { label: 'Initiated by', @@ -109,7 +110,7 @@ angular.module('StreamListDefinition', []) searchOnly: true, searchObject: 'job', searchPlaceholder: 'Job name', - searchOnID: true, + //searchOnID: true, searchWidget: 2, searchField: 'object1' }, @@ -193,7 +194,7 @@ angular.module('StreamListDefinition', []) searchOnly: true, searchObject: 'job', searchPlaceholder: 'Related job name', - searchOnID: true, + //searchOnID: true, searchWidget: 3, searchField: 'object2' }, diff --git a/awx/ui/static/js/widgets/Stream.js b/awx/ui/static/js/widgets/Stream.js index 9b758383f2..7247e8aab5 100644 --- a/awx/ui/static/js/widgets/Stream.js +++ b/awx/ui/static/js/widgets/Stream.js @@ -155,7 +155,7 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti url += 'home/' + obj.base + 's/?id=' + obj.id; break; case 'job': - url += 'jobs/?id=' + obj.id; + url += 'jobs/?id__int=' + obj.id; break; case 'inventory': url += 'inventories/' + obj.id + '/'; @@ -202,7 +202,7 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti if (obj2_obj && obj2_obj.name && !/^_delete/.test(obj2_obj.name)) { obj2_obj.base = obj2; - descr += obj2 + ' ' + obj2_obj.name + '' + ((activity.operation === 'disassociate') ? ' from ' : ' to '); + descr += obj2 + " " + obj2_obj.name + '' + ((activity.operation === 'disassociate') ? ' from ' : ' to '); descr_nolink += obj2 + ' ' + obj2_obj.name + ((activity.operation === 'disassociate') ? ' from ' : ' to '); } else if (obj2) { name = ''; @@ -214,7 +214,7 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti } if (obj1_obj && obj1_obj.name && !/^\_delete/.test(obj1_obj.name)) { obj1_obj.base = obj1; - descr += obj1 + ' ' + obj1_obj.name + ''; + descr += obj1 + " " + obj1_obj.name + ''; descr_nolink += obj1 + ' ' + obj1_obj.name; } else if (obj1) { name = ''; @@ -229,7 +229,7 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti name = ' ' + activity.changes.name[0]; name_nolink = name; } - } else if (obj1 === 'job' && obj1_obj && activity.changes && activity.changes.job_template) { + /*} else if (obj1 === 'job' && obj1_obj && activity.changes && activity.changes.job_template) { // Hack for job activity where the template name is known if (activity.operation !== 'delete') { obj1_obj.base = obj1; @@ -248,7 +248,7 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti } else { name = ' ' + obj1_obj.id; name_nolink = name; - } + }*/ } } else if (obj1_obj && obj1_obj.name) { name = ' ' + stripDeleted(obj1_obj.name); @@ -263,9 +263,9 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti } ]) -.factory('ShowDetail', ['$rootScope', 'Rest', 'Alert', 'GenerateForm', 'ProcessErrors', 'GetBasePath', 'FormatDate', +.factory('ShowDetail', ['$filter', '$rootScope', 'Rest', 'Alert', 'GenerateForm', 'ProcessErrors', 'GetBasePath', 'FormatDate', 'ActivityDetailForm', 'Empty', 'Find', - function ($rootScope, Rest, Alert, GenerateForm, ProcessErrors, GetBasePath, FormatDate, ActivityDetailForm, Empty, Find) { + function ($filter, $rootScope, Rest, Alert, GenerateForm, ProcessErrors, GetBasePath, FormatDate, ActivityDetailForm, Empty, Find) { return function (params) { var activity_id = params.activity_id, @@ -287,7 +287,7 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti scope = generator.inject(form, { mode: 'edit', modal: true, related: false }); scope.changes = activity.changes_stringified; scope.user = ((activity.summary_fields.actor) ? activity.summary_fields.actor.username : 'system') + - ' on ' + FormatDate(new Date(activity.timestamps)); + ' on ' + $filter('date')(activity.timestamp, "MM/dd/yy HH:mm:ss"); scope.operation = activity.description_nolink; scope.formModalAction = function () { @@ -399,6 +399,7 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti if (inUrl) { $location.path(inUrl); } + scope.$destroy(); }; scope.refreshStream = function () { @@ -416,14 +417,14 @@ angular.module('StreamWidget', ['RestServices', 'Utilities', 'StreamListDefiniti scope.removeStreamPostRefresh(); } scope.removeStreamPostRefresh = scope.$on('PostRefresh', function () { - var i, cDate, href, deleted, obj1, obj2; + var i, href, deleted, obj1, obj2; for (i = 0; i < scope.activities.length; i++) { // Convert event_time date to local time zone - cDate = new Date(scope.activities[i].timestamp); - scope.activities[i].timestamp = FormatDate(cDate); + //cDate = new Date(scope.activities[i].timestamp); + //scope.activities[i].timestamp = FormatDate(cDate); if (scope.activities[i].summary_fields.actor) { - scope.activities[i].user = "" + + scope.activities[i].user = "" + scope.activities[i].summary_fields.actor.username + ""; } else { scope.activities[i].user = 'system';