Add basic (no optimization) real-time implementation

This commit is contained in:
gconsidine
2018-02-14 14:23:14 -05:00
committed by Jake McDermott
parent ad1764c7f2
commit 3d02ef8209
3 changed files with 40 additions and 11 deletions

View File

@@ -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',

View File

@@ -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
] ]
}, },
}; };

View File

@@ -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>