diff --git a/awx/ui/client/src/helpers/JobDetail.js b/awx/ui/client/src/helpers/JobDetail.js
index 689e7139b5..0c6ea3359c 100644
--- a/awx/ui/client/src/helpers/JobDetail.js
+++ b/awx/ui/client/src/helpers/JobDetail.js
@@ -822,7 +822,6 @@ export default
url += (scope.search_task_name) ? '&task__icontains=' + scope.search_task_name : '';
url += (scope.search_task_status === 'failed') ? '&failed=true' : '';
url += '&page_size=' + scope.tasksMaxRows + '&order=id';
-
scope.plays.every(function(p, idx) {
if (p.id === scope.selectedPlay) {
play = scope.plays[idx];
@@ -931,7 +930,7 @@ export default
}])
// Call when the selected task needs to change
- .factory('SelectTask', ['LoadHosts', function(LoadHosts) {
+ .factory('SelectTask', ['LoadHosts', 'JobDetailService', function(LoadHosts, JobDetailService) {
return function(params) {
var scope = params.scope,
id = params.id,
@@ -946,11 +945,16 @@ export default
scope.tasks[idx].taskActiveClass = '';
}
});
-
- LoadHosts({
- scope: scope,
- callback: callback,
- clear: true
+ // /api/v1/jobs/16/job_events/?parent=832&event__startswith=runner&page_size=200&order=host_name,counte
+ var params = {
+ parent: scope.selectedTask,
+ event__startswith: 'runner',
+ page_size: scope.hostResultsMaxRows,
+ order: 'host_name,counter',
+ };
+ JobDetailService.getRelatedJobEvents(scope.job.id, params).success(function(res){
+ scope.hostResults = JobDetailService.processHostResults(res.results)
+ scope.hostResultsLoading = false;
});
};
}])
@@ -960,8 +964,7 @@ export default
return function(params) {
var scope = params.scope,
callback = params.callback,
- url;
-
+ url;
scope.hostResults = [];
if (scope.selectedTask) {
@@ -970,6 +973,7 @@ export default
url += (scope.search_host_name) ? 'host__name__icontains=' + scope.search_host_name + '&' : '';
url += (scope.search_host_status === 'failed') ? 'failed=true&' : '';
url += 'event__startswith=runner&page_size=' + scope.hostResultsMaxRows + '&order=host_name,counter';
+ console.log(url)
scope.hostResultsLoading = true;
Rest.setUrl(url);
Rest.get()
@@ -1020,7 +1024,6 @@ export default
msg = event.event_data.res;
}
}
-
if (event.event !== "runner_on_no_hosts") {
scope.hostResults.push({
id: event.id,
@@ -1037,7 +1040,6 @@ export default
});
scope.hostResultsLoading = false;
-
if (callback) {
scope.$emit(callback);
}
diff --git a/awx/ui/client/src/job-detail/host-event/host-event-details.partial.html b/awx/ui/client/src/job-detail/host-event/host-event-details.partial.html
index 66a60fcec9..f650b4335a 100644
--- a/awx/ui/client/src/job-detail/host-event/host-event-details.partial.html
+++ b/awx/ui/client/src/job-detail/host-event/host-event-details.partial.html
@@ -1,49 +1,49 @@
diff --git a/awx/ui/client/src/job-detail/host-event/host-event-stdout.partial.html b/awx/ui/client/src/job-detail/host-event/host-event-stdout.partial.html
index 436c25262a..29f3966e86 100644
--- a/awx/ui/client/src/job-detail/host-event/host-event-stdout.partial.html
+++ b/awx/ui/client/src/job-detail/host-event/host-event-stdout.partial.html
@@ -1,13 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/awx/ui/client/src/job-detail/host-event/host-event.controller.js b/awx/ui/client/src/job-detail/host-event/host-event.controller.js
index ac46279d0f..1c7284ae30 100644
--- a/awx/ui/client/src/job-detail/host-event/host-event.controller.js
+++ b/awx/ui/client/src/job-detail/host-event/host-event.controller.js
@@ -4,68 +4,78 @@
* All Rights Reserved
*************************************************/
+
export default
- ['$stateParams', '$scope', '$state', 'Wait', 'JobDetailService', 'moment', 'event',
- function($stateParams, $scope, $state, Wait, JobDetailService, moment, event){
- // Avoid rendering objects in the details fieldset
- // ng-if="processResults(value)" via host-event-details.partial.html
- $scope.processResults = function(value){
- if (typeof value == 'object'){return false}
- else {return true}
- };
+ ['$stateParams', '$scope', '$state', 'Wait', 'JobDetailService', 'moment', 'event',
+ function($stateParams, $scope, $state, Wait, JobDetailService, moment, event){
- var codeMirror = function(){
- var el = $('#HostEvent-json')[0];
- var editor = CodeMirror.fromTextArea(el, {
- lineNumbers: true,
- mode: {name: "javascript", json: true}
- });
- editor.getDoc().setValue(JSON.stringify($scope.json, null, 4));
- };
+ $scope.processEventStatus = JobDetailService.processEventStatus;
+ // Avoid rendering objects in the details fieldset
+ // ng-if="processResults(value)" via host-event-details.partial.html
+ $scope.processResults = function(value){
+ if (typeof value == 'object'){return false;}
+ else {return true;}
+ };
- $scope.getActiveHostIndex = function(){
- var result = $scope.hostResults.filter(function( obj ) {
- return obj.id == $scope.event.id;
- });
- return $scope.hostResults.indexOf(result[0])
- };
+ var codeMirror = function(el, json){
+ var el = $(el)[0];
+ var editor = CodeMirror.fromTextArea(el, {
+ lineNumbers: true,
+ mode: {name: "javascript", json: true}
+ });
+ editor.getDoc().setValue(JSON.stringify(json, null, 4));
+ };
- $scope.showPrev = function(){
- return $scope.getActiveHostIndex() != 0
- };
+ $scope.getActiveHostIndex = function(){
+ var result = $scope.hostResults.filter(function( obj ) {
+ return obj.id == $scope.event.id;
+ });
+ return $scope.hostResults.indexOf(result[0]);
+ };
- $scope.showNext = function(){
- return $scope.getActiveHostIndex() < $scope.hostResults.indexOf($scope.hostResults[$scope.hostResults.length - 1])
- };
+ $scope.showPrev = function(){
+ return $scope.getActiveHostIndex() != 0;
+ };
- $scope.goNext = function(){
- var index = $scope.getActiveHostIndex() + 1;
- var id = $scope.hostResults[index].id;
- $state.go('jobDetail.host-event.details', {eventId: id})
- };
+ $scope.showNext = function(){
+ return $scope.getActiveHostIndex() < $scope.hostResults.indexOf($scope.hostResults[$scope.hostResults.length - 1]);
+ };
- $scope.goPrev = function(){
- var index = $scope.getActiveHostIndex() - 1;
- var id = $scope.hostResults[index].id;
- $state.go('jobDetail.host-event.details', {eventId: id})
- };
+ $scope.goNext = function(){
+ var index = $scope.getActiveHostIndex() + 1;
+ var id = $scope.hostResults[index].id;
+ $state.go('jobDetail.host-event.details', {eventId: id});
+ };
- var init = function(){
- $scope.event = event.data.results[0];
- $scope.event.created = moment($scope.event.created).format();
- $scope.processEventStatus = JobDetailService.processEventStatus($scope.event);
- $scope.hostResults = $stateParams.hostResults;
- $scope.json = JobDetailService.processJson($scope.event);
- if ($state.current.name == 'jobDetail.host-event.json'){
- codeMirror();
- }
- try {
- $scope.stdout = $scope.event.event_data.res.stdout
- }
- catch(err){
- $scope.sdout = null;
- }
- $('#HostEvent').modal('show');
- };
- init();
- }];
\ No newline at end of file
+ $scope.goPrev = function(){
+ var index = $scope.getActiveHostIndex() - 1;
+ var id = $scope.hostResults[index].id;
+ $state.go('jobDetail.host-event.details', {eventId: id});
+ };
+
+ var init = function(){
+ console.log(event)
+ $scope.event = event.data.results[0];
+ $scope.event.created = moment($scope.event.created).format();
+ $scope.hostResults = $stateParams.hostResults;
+ $scope.json = JobDetailService.processJson($scope.event);
+ if ($state.current.name == 'jobDetail.host-event.json'){
+ codeMirror('#HostEvent-json', $scope.json);
+ }
+ try {
+ $scope.stdout = JobDetailService.processJson($scope.event.event_data.res)
+ console.log($scope.stdout)
+ if ($state.current.name == 'jobDetail.host-event.stdout'){
+ codeMirror('#HostEvent-stdout', $scope.stdout);
+ }
+ }
+ catch(err){
+ $scope.sdout = null;
+ }
+ console.log($scope)
+
+
+ $('#HostEvent').modal('show');
+ };
+ init();
+ }];
\ No newline at end of file
diff --git a/awx/ui/client/src/job-detail/host-events/host-events.partial.html b/awx/ui/client/src/job-detail/host-events/host-events.partial.html
index 9d0ccca40f..7fb46f3234 100644
--- a/awx/ui/client/src/job-detail/host-events/host-events.partial.html
+++ b/awx/ui/client/src/job-detail/host-events/host-events.partial.html
@@ -36,9 +36,9 @@
-
+
- {{event.status}}
+ {{processEventStatus(event).status}}
|
{{event.play}} |
{{event.task}} |
diff --git a/awx/ui/client/src/job-detail/job-detail.controller.js b/awx/ui/client/src/job-detail/job-detail.controller.js
index d06fa5881f..91264dd1b4 100644
--- a/awx/ui/client/src/job-detail/job-detail.controller.js
+++ b/awx/ui/client/src/job-detail/job-detail.controller.js
@@ -16,7 +16,7 @@ export default
'ProcessErrors', 'SelectPlay', 'SelectTask', 'Socket', 'GetElapsed',
'DrawGraph', 'LoadHostSummary', 'ReloadHostSummaryList',
'JobIsFinished', 'SetTaskStyles', 'DigestEvent', 'UpdateDOM', 'DeleteJob', 'PlaybookRun',
- 'LoadPlays', 'LoadTasks', 'LoadHosts', 'HostsEdit',
+ 'LoadPlays', 'LoadTasks', 'HostsEdit',
'ParseVariableString', 'GetChoices', 'fieldChoices', 'fieldLabels',
'EditSchedule', 'ParseTypeChange', 'JobDetailService',
function(
@@ -25,7 +25,7 @@ export default
SelectPlay, SelectTask, Socket, GetElapsed, DrawGraph,
LoadHostSummary, ReloadHostSummaryList, JobIsFinished,
SetTaskStyles, DigestEvent, UpdateDOM, DeleteJob,
- PlaybookRun, LoadPlays, LoadTasks, LoadHosts,
+ PlaybookRun, LoadPlays, LoadTasks,
HostsEdit, ParseVariableString, GetChoices, fieldChoices,
fieldLabels, EditSchedule, ParseTypeChange, JobDetailService
) {
@@ -376,64 +376,26 @@ export default
var params = {
parent: task.id,
event__startswith: 'runner',
- page_size: scope.hostResultsMaxRows
};
JobDetailService.getRelatedJobEvents(scope.job.id, params)
.success(function(data) {
+ console.log(data)
var idx, event, status, status_text, item, msg;
- if (data.results.length > 0) {
+ if (data.results.length > 0) {$
lastEventId = data.results[0].id;
}
scope.next_host_results = data.next;
for (idx=data.results.length - 1; idx >= 0; idx--) {
event = data.results[idx];
- if (event.event === "runner_on_skipped") {
- status = 'skipped';
- }
- else if (event.event === "runner_on_unreachable") {
- status = 'unreachable';
- }
- else {
- status = (event.failed) ? 'failed' : (event.changed) ? 'changed' : 'successful';
- }
- switch(status) {
- case "successful":
- status_text = 'OK';
- break;
- case "changed":
- status_text = "Changed";
- break;
- case "failed":
- status_text = "Failed";
- break;
- case "unreachable":
- status_text = "Unreachable";
- break;
- case "skipped":
- status_text = "Skipped";
- }
+ event.status = JobDetailService.processEventStatus(event).status;
+ msg = JobDetailService.processEventMsg(event);
+ item = JobDetailService.processEventItem(event);
- if (event.event_data && event.event_data.res) {
- item = event.event_data.res.item;
- if (typeof item === "object") {
- item = JSON.stringify(item);
- }
- }
-
- msg = '';
- if (event.event_data && event.event_data.res) {
- if (typeof event.event_data.res === 'object') {
- msg = event.event_data.res.msg;
- } else {
- msg = event.event_data.res;
- }
- }
-
- if (event.event !== "runner_on_no_hosts") {
+ if (event.event !== "runner_on$_no_hosts") {
task.hostResults[event.id] = {
id: event.id,
- status: status,
- status_text: status_text,
+ status: event.status,
+ status_text: event.status.toUpperCase(),
host_id: event.host,
task_id: event.parent,
name: event.event_data.host,
@@ -673,7 +635,7 @@ export default
scope.$emit('LoadTasks', events_url);
});
});
-
+
if (scope.removeLoadJob) {
scope.removeLoadJob();
@@ -1037,6 +999,16 @@ export default
scope.searchTasksEnabled = true;
}
if (!scope.liveEventProcessing || scope.pauseLiveEvents) {
+ // /api/v1/jobs/15/job_tasks/?event_id=762&task__icontains=create&page_size=200&order=id
+ var params = {
+ event_id: scope.selectedPlay,
+ task__icontains: scope.search_task_name,
+ page_size: scope.tasksMaxRows,
+
+ };
+ if (scope.search_task_status === 'failed'){
+ params.failed = true;
+ }
LoadTasks({
scope: scope
});
@@ -1058,8 +1030,20 @@ export default
scope.searchHostsEnabled = true;
}
if (!scope.liveEventProcessing || scope.pauseLiveEvents) {
- LoadHosts({
- scope: scope
+ scope.hostResultsLoading = true;
+ var params = {
+ parent: scope.selectedTask,
+ event__startswith: 'runner',
+ page_size: scope.hostResultsMaxRows,
+ order: 'host_name,counter',
+ host_name__icontains: scope.search_host_name
+ }
+ if (scope.search_host_status === 'failed'){
+ params.failed = true;
+ }
+ JobDetailService.getRelatedJobEvents(scope.job.id, params).success(function(res){
+ scope.hostResults = JobDetailService.processHostResults(res.results)
+ scope.hostResultsLoading = false;
});
}
};
@@ -1104,8 +1088,20 @@ export default
scope.filterHostStatus = function() {
scope.search_host_status = (scope.search_host_status === 'all') ? 'failed' : 'all';
if (!scope.liveEventProcessing || scope.pauseLiveEvents) {
- LoadHosts({
- scope: scope
+ console.log('filterHostStattus', scope)
+ var params = {
+ parent: scope.selectedTask,
+ event__startswith: 'runner',
+ page_size: scope.hostResultsMaxRows,
+ order: 'host_name,counter'
+ }
+ if (scope.search_host_status === 'failed'){
+ params.failed = true;
+ }
+ scope.hostResultsLoading = true;
+ JobDetailService.getRelatedJobEvents(scope.job.id, params).success(function(res){
+ scope.hostResults = JobDetailService.processHostResults(res.results)
+ scope.hostResultsLoading = false;
});
}
};
diff --git a/awx/ui/client/src/job-detail/job-detail.service.js b/awx/ui/client/src/job-detail/job-detail.service.js
index 381ff56c18..2beecdc215 100644
--- a/awx/ui/client/src/job-detail/job-detail.service.js
+++ b/awx/ui/client/src/job-detail/job-detail.service.js
@@ -1,18 +1,17 @@
export default
- ['$rootScope', 'Rest', 'GetBasePath', 'ProcessErrors', function($rootScope, Rest, GetBasePath, ProcessErrors){
- return {
+ ['$rootScope', 'Rest', 'GetBasePath', 'ProcessErrors', function($rootScope, Rest, GetBasePath, ProcessErrors){
+ return {
- /*
- For ES6
- it might be useful to set some default params here, e.g.
- getJobHostSummaries: function(id, page_size=200, order='host_name'){}
- without ES6, we'd have to supply defaults like this:
- this.page_size = params.page_size ? params.page_size : 200;
- */
+ /*
+ * For ES6
+ * it might be useful to set some default params here, e.g.
+ * getJobHostSummaries: function(id, page_size=200, order='host_name'){}
+ * without ES6, we'd have to supply defaults like this:
+ * this.page_size = params.page_size ? params.page_size : 200;
+ */
// the the API passes through Ansible's event_data response
// we need to massage away the verbose and redundant properties
-
processJson: function(data){
// a deep copy
var result = $.extend(true, {}, data);
@@ -44,147 +43,195 @@ export default
}
});
}
- catch(err){result.event_data = null;}
+ catch(err){result.event_data = undefined;}
return result
},
-
+ // Return Ansible's passed-through response msg on a job_event
+ processEventMsg: function(event){
+ return typeof event.event_data.res === 'object' ? event.event_data.res.msg : event.event_data.res;
+ },
+ // Return only Ansible's passed-through response item on a job_event
+ processEventItem: function(event){
+ try{
+ var item = event.event_data.res.item;
+ return typeof item === 'object' ? JSON.stringify(item) : item
+ }
+ catch(err){return;}
+ },
+ // Generate a helper class for job_event statuses
+ // the stack for which status to display is
+ // unreachable > failed > changed > ok
+ // uses the API's runner events and convenience properties .failed .changed to determine status.
+ // see: job_event_callback.py
processEventStatus: function(event){
- // Generate a helper class for job_event statuses
- // the stack for which status to display is
- // unreachable > failed > changed > ok
- // uses the API's runner events and convenience properties .failed .changed to determine status.
- // see: job_event_callback.py
if (event.event == 'runner_on_unreachable'){
- event.status = 'Unreachable';
- return 'HostEvents-status--unreachable'
+ return {
+ class: 'HostEvents-status--unreachable',
+ status: 'unreachable'
+ }
}
// equiv to 'runner_on_error' && 'runner on failed'
if (event.failed){
- event.status = 'Failed';
- return 'HostEvents-status--failed'
+ return {
+ class: 'HostEvents-status--failed',
+ status: 'failed'
+ }
}
// catch the changed case before ok, because both can be true
if (event.changed){
- event.status = 'Changed';
- return 'HostEvents-status--changed'
+ return {
+ class: 'HostEvents-status--changed',
+ status: 'changed'
+ }
}
if (event.event == 'runner_on_ok'){
- event.status = 'OK';
- return 'HostEvents-status--ok'
+ return {
+ class: 'HostEvents-status--ok',
+ status: 'ok'
+ }
}
if (event.event == 'runner_on_skipped'){
- event.status = 'Skipped';
- return 'HostEvents-status--skipped'
+ return {
+ class: 'HostEvents-status--skipped',
+ status: 'skipped'
+ }
}
else{
// study a case where none of these apply
}
- },
+ },
- // GET events related to a job run
- // e.g.
- // ?event=playbook_on_stats
- // ?parent=206&event__startswith=runner&page_size=200&order=host_name,counter
- getRelatedJobEvents: function(id, params){
- var url = GetBasePath('jobs');
- url = url + id + '/job_events/?';
- Object.keys(params).forEach(function(key, index) {
- // the API is tolerant of extra ampersands
- // ?&event=playbook_on_start == ?event=playbook_on_stats
- url = url + '&' + key + '=' + params[key];
- });
- Rest.setUrl(url);
- return Rest.get()
- .success(function(data){
- return data
- })
- .error(function(data, status) {
- ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
- msg: 'Call to ' + url + '. GET returned: ' + status });
- });
- },
- // GET job host summaries related to a job run
- // e.g. ?page_size=200&order=host_name
- getJobHostSummaries: function(id, params){
- var url = GetBasePath('jobs');
- url = url + id + '/job_host_summaries/?'
- Object.keys(params).forEach(function(key, index) {
- // the API is tolerant of extra ampersands
- url = url + '&' + key + '=' + params[key];
- });
- Rest.setUrl(url);
- return Rest.get()
- .success(function(data){
- return data
- })
- .error(function(data, status) {
- ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
- msg: 'Call to ' + url + '. GET returned: ' + status });
- });
- },
- // GET job plays related to a job run
- // e.g. ?page_size=200
- getJobPlays: function(id, params){
- var url = GetBasePath('jobs');
- url = url + id + '/job_plays/?';
- Object.keys(params).forEach(function(key, index) {
- // the API is tolerant of extra ampersands
- url = url + '&' + key + '=' + params[key];
- });
- Rest.setUrl(url);
- return Rest.get()
- .success(function(data){
- return data
- })
- .error(function(data, status) {
- ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
- msg: 'Call to ' + url + '. GET returned: ' + status });
- });
- },
- getJobTasks: function(id, params){
- var url = GetBasePath('jobs');
- url = url + id + '/job_tasks/?';
- Object.keys(params).forEach(function(key, index) {
- // the API is tolerant of extra ampersands
- url = url + '&' + key + '=' + params[key];
- });
- Rest.setUrl(url);
- return Rest.get()
- .success(function(data){
- return data
- })
- .error(function(data, status) {
- ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
- msg: 'Call to ' + url + '. GET returned: ' + status });
- });
- },
- getJob: function(id){
- var url = GetBasePath('jobs');
- url = url + id;
- Rest.setUrl(url);
- return Rest.get()
- .success(function(data){
- return data
- })
- .error(function(data, status) {
- ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
- msg: 'Call to ' + url + '. GET returned: ' + status });
- });
- },
- // GET next set of paginated results
- // expects 'next' param returned by the API e.g.
- // "/api/v1/jobs/51/job_plays/?order_by=id&page=2&page_size=1"
- getNextPage: function(url){
- return Rest.get()
- .success(function(data){
- return data
- })
- .error(function(data, status) {
- ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
- msg: 'Call to ' + url + '. GET returned: ' + status });
- });
- }
- }
- }
- ];
\ No newline at end of file
+ // Consumes a response from this.getRelatedJobEvents
+ // returns an array for view logic to iterate over to build host result rows
+ processHostResults: function(data){
+ var self = this;
+ var results = [];
+ data.forEach(function(element, index, array){
+ var event = element;
+ if (event.event !== 'runner_on_no_hosts'){
+ var status = self.processEventStatus(event);
+ var msg = self.processEventMsg(event);
+ var item = self.processEventItem(event);
+ results.push({
+ id: event.id,
+ status: status.status,
+ status_text: status.status.charAt(0).toUpperCase() + status.status.slice(1),
+ host_id: event.host,
+ task_id: event.parent,
+ name: event.event_data.host,
+ created: event.created,
+ msg: typeof msg === 'undefined' ? undefined : msg,
+ item: typeof item === 'undefined' ? undefined : item
+ });
+ }
+ });
+ return results;
+ },
+
+ // GET events related to a job run
+ // e.g.
+ // ?event=playbook_on_stats
+ // ?parent=206&event__startswith=runner&page_size=200&order=host_name,counter
+ getRelatedJobEvents: function(id, params){
+ var url = GetBasePath('jobs');
+ url = url + id + '/job_events/?';
+ Object.keys(params).forEach(function(key, index) {
+ // the API is tolerant of extra ampersands
+ // ?&event=playbook_on_start == ?event=playbook_on_stats
+ url = url + '&' + key + '=' + params[key];
+ });
+ Rest.setUrl(url);
+ return Rest.get()
+ .success(function(data){
+ return data
+ })
+ .error(function(data, status) {
+ ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
+ msg: 'Call to ' + url + '. GET returned: ' + status });
+ });
+ },
+ // GET job host summaries related to a job run
+ // e.g. ?page_size=200&order=host_name
+ getJobHostSummaries: function(id, params){
+ var url = GetBasePath('jobs');
+ url = url + id + '/job_host_summaries/?'
+ Object.keys(params).forEach(function(key, index) {
+ // the API is tolerant of extra ampersands
+ url = url + '&' + key + '=' + params[key];
+ });
+ Rest.setUrl(url);
+ return Rest.get()
+ .success(function(data){
+ return data
+ })
+ .error(function(data, status) {
+ ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
+ msg: 'Call to ' + url + '. GET returned: ' + status });
+ });
+ },
+ // GET job plays related to a job run
+ // e.g. ?page_size=200
+ getJobPlays: function(id, params){
+ var url = GetBasePath('jobs');
+ url = url + id + '/job_plays/?';
+ Object.keys(params).forEach(function(key, index) {
+ // the API is tolerant of extra ampersands
+ url = url + '&' + key + '=' + params[key];
+ });
+ Rest.setUrl(url);
+ return Rest.get()
+ .success(function(data){
+ return data
+ })
+ .error(function(data, status) {
+ ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
+ msg: 'Call to ' + url + '. GET returned: ' + status });
+ });
+ },
+ getJobTasks: function(id, params){
+ var url = GetBasePath('jobs');
+ url = url + id + '/job_tasks/?';
+ Object.keys(params).forEach(function(key, index) {
+ // the API is tolerant of extra ampersands
+ url = url + '&' + key + '=' + params[key];
+ });
+ Rest.setUrl(url);
+ return Rest.get()
+ .success(function(data){
+ return data
+ })
+ .error(function(data, status) {
+ ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
+ msg: 'Call to ' + url + '. GET returned: ' + status });
+ });
+ },
+ getJob: function(id){
+ var url = GetBasePath('jobs');
+ url = url + id;
+ Rest.setUrl(url);
+ return Rest.get()
+ .success(function(data){
+ return data
+ })
+ .error(function(data, status) {
+ ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
+ msg: 'Call to ' + url + '. GET returned: ' + status });
+ });
+ },
+ // GET next set of paginated results
+ // expects 'next' param returned by the API e.g.
+ // "/api/v1/jobs/51/job_plays/?order_by=id&page=2&page_size=1"
+ getNextPage: function(url){
+ return Rest.get()
+ .success(function(data){
+ return data
+ })
+ .error(function(data, status) {
+ ProcessErrors($rootScope, data, status, null, { hdr: 'Error!',
+ msg: 'Call to ' + url + '. GET returned: ' + status });
+ });
+ }
+ }
+ }
+ ];
\ No newline at end of file