mirror of
https://github.com/ansible/awx.git
synced 2026-03-20 18:37:39 -02:30
Add basic (no optimization) real-time implementation
This commit is contained in:
committed by
Jake McDermott
parent
ad1764c7f2
commit
3d02ef8209
@@ -5,7 +5,6 @@ let vm;
|
|||||||
let ansi;
|
let ansi;
|
||||||
let resource;
|
let resource;
|
||||||
let related;
|
let related;
|
||||||
let socket;
|
|
||||||
let container;
|
let container;
|
||||||
let $timeout;
|
let $timeout;
|
||||||
let $sce;
|
let $sce;
|
||||||
@@ -18,6 +17,7 @@ const meta = {
|
|||||||
scroll: {},
|
scroll: {},
|
||||||
page: {}
|
page: {}
|
||||||
};
|
};
|
||||||
|
const current = {};
|
||||||
|
|
||||||
const PAGE_LIMIT = 3;
|
const PAGE_LIMIT = 3;
|
||||||
const SCROLL_BUFFER = 250;
|
const SCROLL_BUFFER = 250;
|
||||||
@@ -41,7 +41,7 @@ const TIME_EVENTS = [
|
|||||||
|
|
||||||
function JobsIndexController (
|
function JobsIndexController (
|
||||||
_resource_,
|
_resource_,
|
||||||
_socket_,
|
webSocketNamespace,
|
||||||
_$sce_,
|
_$sce_,
|
||||||
_$timeout_,
|
_$timeout_,
|
||||||
_$scope_,
|
_$scope_,
|
||||||
@@ -54,7 +54,6 @@ function JobsIndexController (
|
|||||||
$scope = _$scope_;
|
$scope = _$scope_;
|
||||||
$q = _$q_;
|
$q = _$q_;
|
||||||
resource = _resource_;
|
resource = _resource_;
|
||||||
socket = _socket_;
|
|
||||||
|
|
||||||
ansi = new Ansi();
|
ansi = new Ansi();
|
||||||
related = getRelated();
|
related = getRelated();
|
||||||
@@ -72,6 +71,9 @@ function JobsIndexController (
|
|||||||
|
|
||||||
vm.toggle = toggle;
|
vm.toggle = toggle;
|
||||||
vm.showHostDetails = showHostDetails;
|
vm.showHostDetails = showHostDetails;
|
||||||
|
vm.clear = clear;
|
||||||
|
|
||||||
|
$scope.$on(webSocketNamespace, processWebSocketEvents);
|
||||||
|
|
||||||
vm.menu = {
|
vm.menu = {
|
||||||
scroll: {
|
scroll: {
|
||||||
@@ -95,6 +97,7 @@ function JobsIndexController (
|
|||||||
lines: parsed.lines
|
lines: parsed.lines
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
|
||||||
$timeout(() => {
|
$timeout(() => {
|
||||||
const table = $(ELEMENT_TBODY);
|
const table = $(ELEMENT_TBODY);
|
||||||
container = $(ELEMENT_CONTAINER);
|
container = $(ELEMENT_CONTAINER);
|
||||||
@@ -106,6 +109,22 @@ function JobsIndexController (
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function clear () {
|
||||||
|
const rows = $(ELEMENT_TBODY).children();
|
||||||
|
|
||||||
|
rows.empty();
|
||||||
|
rows.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
function processWebSocketEvents (scope, data) {
|
||||||
|
meta.scroll.inProgress = true;
|
||||||
|
|
||||||
|
append([data])
|
||||||
|
.then(() => {
|
||||||
|
container[0].scrollTop = container[0].scrollHeight;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function getRelated () {
|
function getRelated () {
|
||||||
const name = resource.constructor.name;
|
const name = resource.constructor.name;
|
||||||
|
|
||||||
@@ -614,7 +633,7 @@ function scrollPageDown () {
|
|||||||
|
|
||||||
JobsIndexController.$inject = [
|
JobsIndexController.$inject = [
|
||||||
'resource',
|
'resource',
|
||||||
'socket',
|
'webSocketNamespace',
|
||||||
'$sce',
|
'$sce',
|
||||||
'$timeout',
|
'$timeout',
|
||||||
'$scope',
|
'$scope',
|
||||||
|
|||||||
@@ -54,17 +54,27 @@ function resolveResource (Job, ProjectUpdate, AdHocCommand, SystemJob, WorkflowJ
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function resolveSocket (SocketService, $stateParams) {
|
function resolveWebSocket (SocketService, $stateParams) {
|
||||||
|
const prefix = 'ws';
|
||||||
const { id } = $stateParams;
|
const { id } = $stateParams;
|
||||||
const { type } = $stateParams;
|
const { type } = $stateParams;
|
||||||
|
|
||||||
// TODO: accommodate other result types (management, scm_update, etc)
|
let name;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case 'playbook':
|
||||||
|
name = 'job_events';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
name = 'events';
|
||||||
|
}
|
||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
data: {
|
data: {
|
||||||
socket: {
|
socket: {
|
||||||
groups: {
|
groups: {
|
||||||
jobs: ['status_changed', 'summary'],
|
jobs: ['status_changed', 'summary'],
|
||||||
job_events: []
|
[name]: []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,7 +82,7 @@ function resolveSocket (SocketService, $stateParams) {
|
|||||||
|
|
||||||
SocketService.addStateResolve(state, id);
|
SocketService.addStateResolve(state, id);
|
||||||
|
|
||||||
return SocketService;
|
return `${prefix}-${name}-${id}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function resolveBreadcrumb (strings) {
|
function resolveBreadcrumb (strings) {
|
||||||
@@ -111,10 +121,10 @@ function JobsRun ($stateRegistry) {
|
|||||||
'JobsStrings',
|
'JobsStrings',
|
||||||
resolveBreadcrumb
|
resolveBreadcrumb
|
||||||
],
|
],
|
||||||
socket: [
|
webSocketNamespace: [
|
||||||
'SocketService',
|
'SocketService',
|
||||||
'$stateParams',
|
'$stateParams',
|
||||||
resolveSocket
|
resolveWebSocket
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<at-panel>
|
<at-panel>
|
||||||
<p></p>
|
<p><button class="btn" ng-click="vm.clear()">clear</button></p>
|
||||||
</at-panel>
|
</at-panel>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user