diff --git a/awx/ui/client/src/job-detail/host-event/host-event-codemirror.partial.html b/awx/ui/client/src/job-detail/host-event/host-event-codemirror.partial.html deleted file mode 100644 index 7c744d2169..0000000000 --- a/awx/ui/client/src/job-detail/host-event/host-event-codemirror.partial.html +++ /dev/null @@ -1,2 +0,0 @@ - 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 deleted file mode 100644 index c287788f19..0000000000 --- a/awx/ui/client/src/job-detail/host-event/host-event-details.partial.html +++ /dev/null @@ -1,45 +0,0 @@ -
-
EVENT
-
- HOST - - {{event.host_name || "No result found"}} -
-
- STATUS - - - - - {{processEventStatus(event).status || "No result found"}} - -
-
- ID - {{event.id || "No result found"}} -
-
- CREATED - {{(event.created | longDate) || "No result found"}} -
-
- PLAY - {{event.play || "No result found"}} -
-
- TASK - {{event.task || "No result found"}} -
-
- MODULE - {{event.event_data.res.invocation.module_name || "No result found"}} -
-
-
-
RESULTS
- -
- {{key}} - {{value}} -
-
diff --git a/awx/ui/client/src/job-detail/host-event/host-event-modal.partial.html b/awx/ui/client/src/job-detail/host-event/host-event-modal.partial.html deleted file mode 100644 index db236894e8..0000000000 --- a/awx/ui/client/src/job-detail/host-event/host-event-modal.partial.html +++ /dev/null @@ -1,36 +0,0 @@ - diff --git a/awx/ui/client/src/job-detail/host-event/host-event-timing.partial.html b/awx/ui/client/src/job-detail/host-event/host-event-timing.partial.html deleted file mode 100644 index 06171bd1c5..0000000000 --- a/awx/ui/client/src/job-detail/host-event/host-event-timing.partial.html +++ /dev/null @@ -1 +0,0 @@ -
timing
\ No newline at end of file diff --git a/awx/ui/client/src/job-detail/host-event/host-event.block.less b/awx/ui/client/src/job-detail/host-event/host-event.block.less deleted file mode 100644 index 9b31b74e87..0000000000 --- a/awx/ui/client/src/job-detail/host-event/host-event.block.less +++ /dev/null @@ -1,150 +0,0 @@ -// @import "./client/src/shared/branding/colors.less"; -// @import "./client/src/shared/branding/colors.default.less"; -// @import "./client/src/shared/layouts/one-plus-two.less"; -// -// .noselect { -// -webkit-touch-callout: none; /* iOS Safari */ -// -webkit-user-select: none; /* Chrome/Safari/Opera */ -// -khtml-user-select: none; /* Konqueror */ -// -moz-user-select: none; /* Firefox */ -// -ms-user-select: none; /* Internet Explorer/Edge */ -// user-select: none; /* Non-prefixed version, currently -// not supported by any browser */ -// } -// -// @media screen and (min-width: 768px){ -// .HostEvent .modal-dialog{ -// width: 700px; -// } -// } -// .HostEvent .CodeMirror{ -// overflow-x: hidden; -// } -// .HostEvent-controls button.HostEvent-close{ -// color: #FFFFFF; -// text-transform: uppercase; -// padding-left: 15px; -// padding-right: 15px; -// background-color: @default-link; -// border-color: @default-link; -// &:hover{ -// background-color: @default-link-hov; -// border-color: @default-link-hov; -// } -// } -// .HostEvent-body{ -// margin-bottom: 10px; -// } -// .HostEvent-tab { -// color: @btn-txt; -// background-color: @btn-bg; -// font-size: 12px; -// border: 1px solid @btn-bord; -// height: 30px; -// border-radius: 5px; -// margin-right: 20px; -// padding-left: 10px; -// padding-right: 10px; -// padding-bottom: 5px; -// padding-top: 5px; -// transition: background-color 0.2s; -// text-transform: uppercase; -// text-align: center; -// white-space: nowrap; -// .noselect; -// } -// .HostEvent-tab:hover { -// color: @btn-txt; -// background-color: @btn-bg-hov; -// cursor: pointer; -// } -// .HostEvent-tab--selected{ -// color: @btn-txt-sel!important; -// background-color: @default-icon!important; -// border-color: @default-icon!important; -// } -// .HostEvent-view--container{ -// width: 100%; -// display: flex; -// flex-direction: row; -// flex-wrap: nowrap; -// justify-content: space-between; -// } -// .HostEvent .modal-footer{ -// border: 0; -// margin-top: 0px; -// padding-top: 5px; -// } -// .HostEvent-controls{ -// float: right; -// button { -// margin-left: 10px; -// } -// } -// .HostEvent-status--ok{ -// color: @green; -// } -// .HostEvent-status--unreachable{ -// color: @unreachable; -// } -// .HostEvent-status--changed{ -// color: @changed; -// } -// .HostEvent-status--failed{ -// color: @default-err; -// } -// .HostEvent-status--skipped{ -// color: @skipped; -// } -// .HostEvent-title{ -// color: @default-interface-txt; -// font-weight: 600; -// margin-bottom: 8px; -// } -// // .HostEvent .modal-body{ -// // max-height: 500px; -// // overflow-y: auto; -// // padding: 20px; -// // } -// .HostEvent-nav{ -// padding-top: 12px; -// padding-bottom: 12px; -// } -// .HostEvent-field{ -// margin-bottom: 8px; -// flex: 0 1 12em; -// } -// .HostEvent-field--label{ -// text-transform: uppercase; -// flex: 0 1 80px; -// max-width: 80px; -// font-size: 12px; -// word-wrap: break-word; -// } -// .HostEvent-field{ -// .OnePlusTwo-left--detailsRow; -// } -// .HostEvent-field--content{ -// word-wrap: break-word; -// max-width: 13em; -// flex: 0 1 13em; -// } -// .HostEvent-details--left, .HostEvent-details--right{ -// flex: 1 1 47%; -// } -// .HostEvent-details--left{ -// margin-right: 40px; -// } -// .HostEvent-details--right{ -// .HostEvent-field--label{ -// flex: 0 1 25em; -// } -// .HostEvent-field--content{ -// max-width: 15em; -// flex: 0 1 15em; -// align-self: flex-end; -// } -// } -// .HostEvent-button:disabled { -// pointer-events: all!important; -// } 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 deleted file mode 100644 index f86452b005..0000000000 --- a/awx/ui/client/src/job-detail/host-event/host-event.controller.js +++ /dev/null @@ -1,110 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - - - export default - ['$stateParams', '$scope', '$state', 'Wait', 'JobDetailService', 'hostEvent', 'hostResults', - function($stateParams, $scope, $state, Wait, JobDetailService, hostEvent, hostResults){ - - $scope.processEventStatus = JobDetailService.processEventStatus; - $scope.hostResults = []; - // 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.isStdOut = function(){ - if ($state.current.name === 'jobDetails.host-event.stdout' || $state.current.name === 'jobDetaisl.histe-event.stderr'){ - return 'StandardOut-preContainer StandardOut-preContent'; - } - }; - /*ignore jslint start*/ - var initCodeMirror = function(el, data, mode){ - var container = document.getElementById(el); - var editor = CodeMirror.fromTextArea(container, { // jshint ignore:line - lineNumbers: true, - mode: mode - }); - editor.setSize("100%", 300); - editor.getDoc().setValue(data); - }; - /*ignore jslint end*/ - $scope.isActiveState = function(name){ - return $state.current.name === name; - }; - - $scope.getActiveHostIndex = function(){ - var result = $scope.hostResults.filter(function( obj ) { - return obj.id === $scope.event.id; - }); - return $scope.hostResults.indexOf(result[0]); - }; - - $scope.showPrev = function(){ - return $scope.getActiveHostIndex() !== 0; - }; - - $scope.showNext = function(){ - return $scope.getActiveHostIndex() < $scope.hostResults.indexOf($scope.hostResults[$scope.hostResults.length - 1]); - }; - - $scope.goNext = function(){ - var index = $scope.getActiveHostIndex() + 1; - var id = $scope.hostResults[index].id; - $state.go('jobDetail.host-event.details', {eventId: id}); - }; - - $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(){ - $scope.event = _.cloneDeep(hostEvent); - $scope.hostResults = hostResults; - $scope.json = JobDetailService.processJson(hostEvent); - - // grab standard out & standard error if present, and remove from the results displayed in the details panel - if (hostEvent.event_data.res.stdout){ - $scope.stdout = hostEvent.event_data.res.stdout; - delete $scope.event.event_data.res.stdout; - } - if (hostEvent.event_data.res.stderr){ - $scope.stderr = hostEvent.event_data.res.stderr; - delete $scope.event.event_data.res.stderr; - } - // instantiate Codemirror - // try/catch pattern prevents the abstract-state controller from complaining about element being null - if ($state.current.name === 'jobDetail.host-event.json'){ - try{ - initCodeMirror('HostEvent-codemirror', JSON.stringify($scope.json, null, 4), {name: "javascript", json: true}); - } - catch(err){ - // element with id HostEvent-codemirror is not the view controlled by this instance of HostEventController - } - } - else if ($state.current.name === 'jobDetail.host-event.stdout'){ - try{ - initCodeMirror('HostEvent-codemirror', $scope.stdout, 'shell'); - } - catch(err){ - // element with id HostEvent-codemirror is not the view controlled by this instance of HostEventController - } - } - else if ($state.current.name === 'jobDetail.host-event.stderr'){ - try{ - initCodeMirror('HostEvent-codemirror', $scope.stderr, 'shell'); - } - catch(err){ - // element with id HostEvent-codemirror is not the view controlled by this instance of HostEventController - } - } - $('#HostEvent').modal('show'); - }; - init(); - }]; diff --git a/awx/ui/client/src/job-detail/host-event/host-event.route.js b/awx/ui/client/src/job-detail/host-event/host-event.route.js deleted file mode 100644 index 86e499c2b0..0000000000 --- a/awx/ui/client/src/job-detail/host-event/host-event.route.js +++ /dev/null @@ -1,65 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import { templateUrl } from '../../shared/template-url/template-url.factory'; - -var hostEventModal = { - name: 'jobDetail.host-event', - url: '/task/:taskId/host-event/:eventId', - controller: 'HostEventController', - templateUrl: templateUrl('job-detail/host-event/host-event-modal'), - 'abstract': true, - resolve: { - hostEvent: ['JobDetailService', '$stateParams', function(JobDetailService, $stateParams) { - return JobDetailService.getRelatedJobEvents($stateParams.id, { - id: $stateParams.eventId - }).then(function(res) { - return res.data.results[0]; }); - }], - hostResults: ['JobDetailService', '$stateParams', function(JobDetailService, $stateParams) { - return JobDetailService.getJobEventChildren($stateParams.taskUuid).then(res => res.data.results); - }] - }, - onExit: function() { - // close the modal - // using an onExit event to handle cases where the user navs away using the url bar / back and not modal "X" - $('#HostEvent').modal('hide'); - // hacky way to handle user browsing away via URL bar - $('.modal-backdrop').remove(); - $('body').removeClass('modal-open'); - } -}; - -var hostEventDetails = { - name: 'jobDetail.host-event.details', - url: '/details', - controller: 'HostEventController', - templateUrl: templateUrl('job-detail/host-event/host-event-details'), -}; - -var hostEventJson = { - name: 'jobDetail.host-event.json', - url: '/json', - controller: 'HostEventController', - templateUrl: templateUrl('job-detail/host-event/host-event-codemirror') -}; - -var hostEventStdout = { - name: 'jobDetail.host-event.stdout', - url: '/stdout', - controller: 'HostEventController', - templateUrl: templateUrl('job-detail/host-event/host-event-codemirror') -}; - -var hostEventStderr = { - name: 'jobDetail.host-event.stderr', - url: '/stderr', - controller: 'HostEventController', - templateUrl: templateUrl('job-detail/host-event/host-event-codemirror') -}; - - -export { hostEventDetails, hostEventJson, hostEventModal, hostEventStdout, hostEventStderr }; diff --git a/awx/ui/client/src/job-detail/host-event/main.js b/awx/ui/client/src/job-detail/host-event/main.js deleted file mode 100644 index 4379427ff8..0000000000 --- a/awx/ui/client/src/job-detail/host-event/main.js +++ /dev/null @@ -1,21 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - - import {hostEventModal, hostEventDetails, - hostEventJson, hostEventStdout, hostEventStderr} from './host-event.route'; - import controller from './host-event.controller'; - - export default - angular.module('jobDetail.hostEvent', []) - .controller('HostEventController', controller) - - .run(['$stateExtender', function($stateExtender){ - $stateExtender.addState(hostEventModal); - $stateExtender.addState(hostEventDetails); - $stateExtender.addState(hostEventJson); - $stateExtender.addState(hostEventStdout); - $stateExtender.addState(hostEventStderr); - }]); diff --git a/awx/ui/client/src/job-detail/host-events/host-events.route.js b/awx/ui/client/src/job-detail/host-events/host-events.route.js deleted file mode 100644 index 835d17b2b9..0000000000 --- a/awx/ui/client/src/job-detail/host-events/host-events.route.js +++ /dev/null @@ -1,32 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import {templateUrl} from '../../shared/template-url/template-url.factory'; - -export default { - name: 'jobDetail.host-events', - url: '/host-events/{hostName:any}?:filter', - controller: 'HostEventsController', - params: { - page_size: 10 - }, - templateUrl: templateUrl('job-detail/host-events/host-events'), - onExit: function(){ - // close the modal - // using an onExit event to handle cases where the user navs away using the url bar / back and not modal "X" - $('#HostEvents').modal('hide'); - // hacky way to handle user browsing away via URL bar - $('.modal-backdrop').remove(); - $('body').removeClass('modal-open'); - }, - resolve: { - hosts: ['JobDetailService','$stateParams', function(JobDetailService, $stateParams) { - return JobDetailService.getRelatedJobEvents($stateParams.id, { - host_name: $stateParams.hostName - }).success(function(res){ return res.results[0];}); - }] - } -}; diff --git a/awx/ui/client/src/job-detail/host-events/main.js b/awx/ui/client/src/job-detail/host-events/main.js deleted file mode 100644 index 766dd92ca4..0000000000 --- a/awx/ui/client/src/job-detail/host-events/main.js +++ /dev/null @@ -1,15 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import route from './host-events.route'; -import controller from './host-events.controller'; - -export default - angular.module('jobDetail.hostEvents', []) - .controller('HostEventsController', controller) - .run(['$stateExtender', function($stateExtender){ - $stateExtender.addState(route); - }]); diff --git a/awx/ui/client/src/job-detail/host-summary/host-summary.block.less b/awx/ui/client/src/job-detail/host-summary/host-summary.block.less deleted file mode 100644 index 00af0d30ea..0000000000 --- a/awx/ui/client/src/job-detail/host-summary/host-summary.block.less +++ /dev/null @@ -1,17 +0,0 @@ -@import '../../shared/branding/colors.default.less'; -.HostSummary-graph--successful{ - text-anchor: start !important; -} -.HostSummary-graph--failed{ - text-anchor: end !important; -} -.HostSummary-graph--changed{ - text-anchor: start !important; -} -.HostSummary-loading{ - border: none; -} -.HostSummary-loading{ - padding-left: 0px !important; - color: @default-interface-txt; -} diff --git a/awx/ui/client/src/job-detail/host-summary/host-summary.partial.html b/awx/ui/client/src/job-detail/host-summary/host-summary.partial.html deleted file mode 100644 index 5452990e76..0000000000 --- a/awx/ui/client/src/job-detail/host-summary/host-summary.partial.html +++ /dev/null @@ -1,72 +0,0 @@ - -
-
4 Please select a host below to view a summary of all associated tasks.
-
-
-
-
- - - -
-
-
-
-
- - -
-
-
- -
- - - - - - - -
HostsCompleted Tasks
-
- -
- - - - - - - - - - - - - - - - -
- {{ host.host_name }} - - {{ host.ok - host.changed }} - {{ host.changed }} - {{ host.skipped }} - {{ host.dark }} - {{ host.failures }} -
Initiating job run.
Job is running. Summary will be available on completion.
No matching hosts
-
- -
- -
- -
-
Host Status Summary
-
- -
diff --git a/awx/ui/client/src/job-detail/host-summary/host-summary.route.js b/awx/ui/client/src/job-detail/host-summary/host-summary.route.js deleted file mode 100644 index a2de70e5d4..0000000000 --- a/awx/ui/client/src/job-detail/host-summary/host-summary.route.js +++ /dev/null @@ -1,21 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import {templateUrl} from '../../shared/template-url/template-url.factory'; - -export default { - name: 'jobDetail.host-summary', - url: '/event-summary', - views:{ - 'host-summary': { - controller: 'HostSummaryController', - templateUrl: templateUrl('job-detail/host-summary/host-summary'), - } - }, - ncyBreadcrumb: { - skip: true // Never display this state in breadcrumb. - } -}; diff --git a/awx/ui/client/src/job-detail/host-summary/main.js b/awx/ui/client/src/job-detail/host-summary/main.js deleted file mode 100644 index fad85ffaf3..0000000000 --- a/awx/ui/client/src/job-detail/host-summary/main.js +++ /dev/null @@ -1,15 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import route from './host-summary.route'; -import controller from './host-summary.controller'; - -export default - angular.module('jobDetail.hostSummary', []) - .controller('HostSummaryController', controller) - .run(['$stateExtender', function($stateExtender){ - $stateExtender.addState(route); - }]); \ No newline at end of file diff --git a/awx/ui/client/src/job-detail/job-detail.block.less b/awx/ui/client/src/job-detail/job-detail.block.less deleted file mode 100644 index c23b8d321d..0000000000 --- a/awx/ui/client/src/job-detail/job-detail.block.less +++ /dev/null @@ -1,240 +0,0 @@ -/** @define SetupItem */ - -@import '../shared/branding/colors.less'; -@import '../shared/branding/colors.default.less'; -@import '../shared/layouts/one-plus-two.less'; - -@breakpoint-md: 1200px; -@breakpoint-sm: 623px; - -.JobDetail-tasks.section{ - margin-top:40px; -} -.JobDetail-instructions{ - color: @default-interface-txt; - margin: 10px 0 10px 0; - - .badge { - background-color: @default-list-header-bg; - color: @default-interface-txt; - padding: 5px 7px; - } -} -.JobDetail{ - .OnePlusTwo-container(100%, @breakpoint-md); - - &.fullscreen { - .JobDetail-rightSide { - max-width: 100%; - } - } -} - -.JobDetail-leftSide{ - .OnePlusTwo-left--panel(100%, @breakpoint-md); -} - -.JobDetail-rightSide{ - .OnePlusTwo-right--panel(100%, @breakpoint-md); - @media (max-width: @breakpoint-md - 1px) { - padding-right: 15px; - } -} -.JobDetail-panelHeader{ - display: flex; - height: 30px; -} -.JobDetail-expandContainer{ - flex: 1; - margin: 0px; - line-height: 30px; - white-space: nowrap; -} - -.JobDetail-panelHeaderText{ - color: @default-interface-txt; - flex: 1 0 auto; - font-size: 14px; - font-weight: bold; - margin-right: 10px; - text-transform: uppercase; -} - -.JobDetail-panelHeaderText:hover{ - color: @default-interface-txt; - font-size: 14px; - font-weight: bold; - margin-right: 10px; - text-transform: uppercase; -} - -.JobDetail-expandArrow{ - color: @default-icon-hov; - font-size: 14px; - font-weight: bold; - margin-right: 10px; - text-transform: uppercase; - margin-left: 10px; -} - -.JobDetail-resultsDetails{ - display: flex; - flex-wrap: wrap; - flex-direction: row; - padding-top: 25px; - @media screen and(max-width: @breakpoint-sm){ - flex-direction: column; - } -} - -.JobDetail-resultRow{ - width: 100%; - display: flex; - padding-bottom: 10px; - flex-wrap: wrap; -} - -.JobDetail-resultRow--variables { - flex-direction: column; -} - -.JobDetail-resultRowLabel{ - text-transform: uppercase; - color: @default-interface-txt; - font-size: 14px; - font-weight: normal!important; - width: 30%; - margin-right: 20px; - @media screen and(max-width: @breakpoint-md){ - flex: 2.5 0 auto; - } -} - -.JobDetail-resultRowLabel--fullWidth { - width: 100%; - margin-right: 0px; -} - -.JobDetail-resultRowText{ - width: ~"calc(70% - 20px)"; - flex: 1 0 auto; - text-transform: none; - word-wrap: break-word; -} - -.JobDetail-resultRowText--fullWidth { - width: 100%; -} - -.JobDetail-searchHeaderRow{ - display: flex; - flex-wrap: wrap; - flex-direction: row; - height: 50px; - margin-top: 20px; - @media screen and(max-width: @breakpoint-sm){ - height: auto; - } -} - -.JobDetail-searchContainer{ - flex: 2 0 auto; - @media screen and(max-width: @breakpoint-sm){ - margin-bottom: 0px; - } -} - -.JobDetail-tableToggleContainer{ - flex: 1 0 auto; - display: flex; - justify-content: flex-end; -} - -.JobDetail-tableToggle{ - padding-left:10px; - padding-right: 10px; - border: 1px solid @d7grey; -} - -.JobDetail-tableToggle.active{ - background-color: @default-link; - border: 1px solid @default-link; - color: @default-bg; - - &:hover { - background-color: @default-link-hov; - } -} -.JobDetail .nvd3.nv-noData{ - color: @default-interface-txt; - font-size: 12px; - text-transform: uppercase; - font-family: 'Open Sans', sans-serif; -} -.JobDetail .nv-series{ - padding-right: 30px; - display: block; -} -.JobDetail-instructions .badge{ - background-color: @default-list-header-bg; - color: @default-interface-txt; -} -.JobDetail-tableToggle--left{ - border-top-left-radius: 5px; - border-bottom-left-radius: 5px; -} - -.JobDetail-tableToggle--right{ - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; -} - -.JobDetail-searchInput{ - border-radius: 5px !important; -} - -.JobDetail-tableHeader:last-of-type{ - text-align:justify; -} - -.JobDetail-statusIcon{ - padding-right: 10px; - padding-left: 10px; -} - -.JobDetail-tableRow--selected, -.JobDetail-tableRow--selected > :first-child{ - border-left: 5px solid @list-row-select-bord; -} - -.JobDetail-tableRow--selected > :first-child > .JobDetail-statusIcon{ - margin-left: -5px; -} - -.JobDetails-table--noResults { - tr > td { - border-top: none !important; - } -} - -.JobDetail-statusIcon--results{ - padding-left: 0px; - padding-right: 10px; -} - -.JobDetail-graphSection{ - height: 320px; - width:100%; -} - -.JobDetail-stdoutActionButton--active{ - display: none; - visibility: hidden; - flex:none; - width:0px; - padding-right: 0px; -} - -.JobDetail-leftSide.JobDetail-stdoutActionButton--active { - margin-right: 0px; -} diff --git a/awx/ui/client/src/job-detail/job-detail.partial.html b/awx/ui/client/src/job-detail/job-detail.partial.html deleted file mode 100644 index bd0b488b18..0000000000 --- a/awx/ui/client/src/job-detail/job-detail.partial.html +++ /dev/null @@ -1,435 +0,0 @@ -
-
-
- -
- -
-
- -
- - - -
-
- -
-
- -
{{ job_status.status_label }}
-
- -
- -
-
Previous Task Failed - - - - -
-
- -
- -
-
- -
- - -
- -
- -
{{ job_status.started | longDate }}
-
- -
- -
{{ job_type }}
-
- -
- -
{{ job_status.finished | longDate }}
-
- -
- - -
- -
- -
{{ job_status.elapsed }}
-
- -
- - -
- -
- - -
- -
- - -
- -
- -
{{ job.playbook }}
-
- -
- - -
- -
- - -
- -
- - -
- -
- -
{{ job.forks }}
-
- -
- -
{{ job.limit }}
-
- -
- -
{{ verbosity }}
-
- -
- -
{{ job.job_tags }}
-
- -
- -
{{ job.skip_tags }}
-
- -
- - -
- -
-
- - - -
- - -
-
-
1 Please select from a play below to view its associated tasks.
-
-
-
- - - -
-
-
-
- - -
-
-
- - -
- - - - - - - - -
PlaysStartedElapsed
-
-
- - - - - - - - - - - - - - - - - - -
{{ play.name }}{{ play.created | date: 'HH:mm:ss' }}{{ play.elapsed }}
Waiting...
Loading...
No matching plays
-
-
- -
-
- - -
-
2 Please select a task below to view its associated hosts
-
-
-
- - - -
-
-
-
- - -
-
-
- -
- - - - - - - - - -
TasksStartedElapsed
-
-
- - - - - - - - - - - - - - - - - - - -
{{ task.name }}{{ task.created | date: 'HH:mm:ss' }}{{ task.elapsed }}
Waiting...
Loading...
No matching tasks
-
-
-
- - -
-
3 Please select a host below to view associated task details.
-
-
-
- - - -
-
-
-
- - -
-
-
-
- - - - - - - - -
HostsItemMessage
-
- -
- - - - - - - - - - - - - - - - - -
- {{ result.name }}{{ result.name }} - {{ result.item }}{{ result.msg }}
Waiting...
Loading...
No matching host events
-
-
-
- -
-
- - - - - - - -
- - - -
-
-
-
STANDARD OUT
-
- - - - -
-
- -
-
- -
-
- - - - diff --git a/awx/ui/client/src/job-detail/job-detail.route.js b/awx/ui/client/src/job-detail/job-detail.route.js deleted file mode 100644 index 94088c126b..0000000000 --- a/awx/ui/client/src/job-detail/job-detail.route.js +++ /dev/null @@ -1,91 +0,0 @@ -// <<<<<<< 4cf6a946a1aa14b7d64a8e1e8dabecfd3d056f27 -// //<<<<<<< bc59236851902d7c768aa26abdb7dc9c9dc27a5a -// /************************************************* -// * Copyright (c) 2016 Ansible, Inc. -// * -// * All Rights Reserved -// *************************************************/ -// -// // <<<<<<< a3d9eea2c9ddb4e16deec9ec38dea16bf37c559d -// // import { templateUrl } from '../shared/template-url/template-url.factory'; -// // -// // export default { -// // name: 'jobDetail', -// // url: '/jobs/{id: int}', -// // ncyBreadcrumb: { -// // parent: 'jobs', -// // label: "{{ job.id }} - {{ job.name }}" -// // }, -// // data: { -// // socket: { -// // "groups": { -// // "jobs": ["status_changed", "summary"], -// // "job_events": [] -// // } -// // } -// // }, -// // templateUrl: templateUrl('job-detail/job-detail'), -// // controller: 'JobDetailController' -// // }; -// // ======= -// // import {templateUrl} from '../shared/template-url/template-url.factory'; -// // -// // export default { -// // name: 'jobDetail', -// // url: '/jobs/:id', -// // ncyBreadcrumb: { -// // parent: 'jobs', -// // label: "{{ job.id }} - {{ job.name }}" -// // }, -// // socket: { -// // "groups":{ -// // "jobs": ["status_changed", "summary"], -// // "job_events": [] -// // } -// // }, -// // templateUrl: templateUrl('job-detail/job-detail'), -// // controller: 'JobDetailController' -// // }; -// //======= -// ======= -// >>>>>>> Rebase of devel (w/ channels) + socket rework for new job details -// // /************************************************* -// // * Copyright (c) 2016 Ansible, Inc. -// // * -// // * All Rights Reserved -// // *************************************************/ -// // -// // import {templateUrl} from '../shared/template-url/template-url.factory'; -// // -// // export default { -// // name: 'jobDetail', -// // url: '/jobs/:id', -// // ncyBreadcrumb: { -// // parent: 'jobs', -// // label: "{{ job.id }} - {{ job.name }}" -// // }, -// // socket: { -// // "groups":{ -// // "jobs": ["status_changed", "summary"], -// // "job_events": [] -// // } -// // }, -// // resolve: { -// // jobEventsSocket: ['Socket', '$rootScope', function(Socket, $rootScope) { -// // if (!$rootScope.event_socket) { -// // $rootScope.event_socket = Socket({ -// // scope: $rootScope, -// // endpoint: "job_events" -// // }); -// // $rootScope.event_socket.init(); -// // // returns should really be providing $rootScope.event_socket -// // // otherwise, we have to inject the entire $rootScope into the controller -// // return true; -// // } else { -// // return true; -// // } -// // }] -// // }, -// // templateUrl: templateUrl('job-detail/job-detail'), -// // controller: 'JobDetailController' -// // }; diff --git a/awx/ui/client/src/job-detail/job-detail.service.js b/awx/ui/client/src/job-detail/job-detail.service.js deleted file mode 100644 index 8e436a3e96..0000000000 --- a/awx/ui/client/src/job-detail/job-detail.service.js +++ /dev/null @@ -1,215 +0,0 @@ -export default - ['$rootScope', 'Rest', 'GetBasePath', 'ProcessErrors', function($rootScope, Rest, GetBasePath, ProcessErrors){ - return { - stringifyParams: function(params){ - return _.reduce(params, (result, value, key) => { - return result + key + '=' + value + '&'; - }, ''); - }, - - // the the API passes through Ansible's event_data response - // we need to massage away the verbose & redundant stdout/stderr properties - processJson: function(data){ - // configure fields to ignore - var ignored = [ - 'type', - 'event_data', - 'related', - 'summary_fields', - 'url', - 'ansible_facts', - ]; - // remove ignored properties - var result = _.chain(data).cloneDeep().forEach(function(value, key, collection){ - if (ignored.indexOf(key) > -1){ - delete collection[key]; - } - }).value(); - 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;} - }, - processsEventTip: function(event, status){ - try{ - var string = `Event ID: ${ event.id }
Status: ${ _.capitalize(status.status)}. Click for details`; - return typeof item === 'object' ? JSON.stringify(string) : string; - } - 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 for more filters to support - processEventStatus: function(event){ - if (event.event === 'runner_on_unreachable'){ - return { - class: 'HostEvents-status--unreachable', - status: 'unreachable' - }; - } - // equiv to 'runner_on_error' && 'runner on failed' - if (event.failed){ - return { - class: 'HostEvents-status--failed', - status: 'failed' - }; - } - // catch the changed case before ok, because both can be true - if (event.changed){ - return { - class: 'HostEvents-status--changed', - status: 'changed' - }; - } - if (event.event === 'runner_on_ok' || event.event === 'runner_on_async_ok'){ - return { - class: 'HostEvents-status--ok', - status: 'ok' - }; - } - if (event.event === 'runner_on_skipped'){ - return { - class: 'HostEvents-status--skipped', - status: 'skipped' - }; - } - }, - // Consumes a response from this.getRelatedJobEvents(id, params) - // returns an array for view logic to iterate over to build host result rows - processHostEvents: function(data){ - var self = this; - var results = []; - data.forEach(function(event){ - if (event.event !== 'runner_on_no_hosts'){ - var status = self.processEventStatus(event); - var msg = self.processEventMsg(event); - var item = self.processEventItem(event); - var tip = self.processsEventTip(event, status); - results.push({ - id: event.id, - status: status.status, - status_text: _.capitalize(status.status), - host_id: event.host, - task_id: event.parent, - name: event.event_data.host, - created: event.created, - tip: typeof tip === 'undefined' ? undefined : tip, - 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/?' + this.stringifyParams(params); - 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 }); - }); - }, - getJobEventChildren: function(uuid){ - var url = GetBasePath('job_events'); - url = `${url}?parent__uuid=${uuid}&order_by=host_name`; - 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/?' + this.stringifyParams(params); - 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/?' + this.stringifyParams(params); - 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/?' + this.stringifyParams(params); - 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(params){ - var url = GetBasePath('unified_jobs') + '?' + this.stringifyParams(params); - 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){ - 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 }); - }); - } - }; - }]; diff --git a/awx/ui/client/src/job-detail/main.js b/awx/ui/client/src/job-detail/main.js deleted file mode 100644 index 628f537e43..0000000000 --- a/awx/ui/client/src/job-detail/main.js +++ /dev/null @@ -1,24 +0,0 @@ -/************************************************* - * Copyright (c) 2016 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -// import route from './job-detail.route'; -import controller from './job-detail.controller'; -import service from './job-detail.service'; -import hostEvents from './host-events/main'; -// import hostEvent from './host-event/main'; -import hostSummary from './host-summary/main'; - -export default - angular.module('jobDetail', [ - hostEvents.name, - // hostEvent.name, - hostSummary.name - ]) - .controller('JobDetailController', controller) - .service('JobDetailService', service); - // .run(['$stateExtender', function($stateExtender) { - // $stateExtender.addState(route); - // }]);