Merge "Periodically check item status if it in transition state"
This commit is contained in:
commit
c63073d6ed
@ -27,7 +27,8 @@
|
|||||||
'horizon.framework.widgets.magic-search.events',
|
'horizon.framework.widgets.magic-search.events',
|
||||||
'horizon.framework.widgets.magic-search.service',
|
'horizon.framework.widgets.magic-search.service',
|
||||||
'horizon.framework.util.actions.action-result.service',
|
'horizon.framework.util.actions.action-result.service',
|
||||||
'horizon.framework.conf.resource-type-registry.service'
|
'horizon.framework.conf.resource-type-registry.service',
|
||||||
|
'horizon.app.core.openstack-service-api.settings'
|
||||||
];
|
];
|
||||||
|
|
||||||
function controller(
|
function controller(
|
||||||
@ -37,10 +38,13 @@
|
|||||||
magicSearchEvents,
|
magicSearchEvents,
|
||||||
searchService,
|
searchService,
|
||||||
actionResultService,
|
actionResultService,
|
||||||
registry
|
registry,
|
||||||
|
settings
|
||||||
) {
|
) {
|
||||||
var ctrl = this;
|
var ctrl = this;
|
||||||
|
|
||||||
var lastSearchQuery = {};
|
var lastSearchQuery = {};
|
||||||
|
var timerRunning = false;
|
||||||
|
|
||||||
// 'Public' Controller members
|
// 'Public' Controller members
|
||||||
ctrl.actionResultHandler = actionResultHandler;
|
ctrl.actionResultHandler = actionResultHandler;
|
||||||
@ -50,6 +54,11 @@
|
|||||||
ctrl.items = [];
|
ctrl.items = [];
|
||||||
ctrl.itemsSrc = [];
|
ctrl.itemsSrc = [];
|
||||||
ctrl.itemInTransitionFunction = itemInTransitionFunction;
|
ctrl.itemInTransitionFunction = itemInTransitionFunction;
|
||||||
|
ctrl.ajaxPollInterval = 2500;
|
||||||
|
settings.getSetting('AJAX_POLL_INTERVAL').then(
|
||||||
|
function (response) {
|
||||||
|
ctrl.ajaxPollInterval = response;
|
||||||
|
});
|
||||||
|
|
||||||
// Watch for changes to search bar
|
// Watch for changes to search bar
|
||||||
$scope.$on(magicSearchEvents.SERVER_SEARCH_UPDATED, handleServerSearch);
|
$scope.$on(magicSearchEvents.SERVER_SEARCH_UPDATED, handleServerSearch);
|
||||||
@ -171,6 +180,7 @@
|
|||||||
|
|
||||||
function onLoad(response) {
|
function onLoad(response) {
|
||||||
ctrl.itemsSrc = response.data.items;
|
ctrl.itemsSrc = response.data.items;
|
||||||
|
timerRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function actionResultHandler(returnValue) {
|
function actionResultHandler(returnValue) {
|
||||||
@ -236,7 +246,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function itemInTransitionFunction(item) {
|
function itemInTransitionFunction(item) {
|
||||||
return ctrl.resourceType.itemInTransitionFunction(item);
|
var itemInTransition = ctrl.resourceType.itemInTransitionFunction(item);
|
||||||
|
if (ctrl.ajaxPollInterval && itemInTransition && !timerRunning) {
|
||||||
|
timerRunning = true;
|
||||||
|
setTimeout(listResources, ctrl.ajaxPollInterval);
|
||||||
|
}
|
||||||
|
return itemInTransition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
describe('hz-generic-table controller', function() {
|
describe('hz-generic-table controller', function() {
|
||||||
var ctrl, listFunctionDeferred, actionResultDeferred, needsFilterFirstFunctionDeferred, $scope;
|
var ctrl, listFunctionDeferred, actionResultDeferred,
|
||||||
|
needsFilterFirstFunctionDeferred, $scope, settingCall;
|
||||||
|
|
||||||
beforeEach(module('horizon.framework.util'));
|
beforeEach(module('horizon.framework.util'));
|
||||||
beforeEach(module('horizon.framework.conf'));
|
beforeEach(module('horizon.framework.conf'));
|
||||||
@ -65,9 +66,16 @@
|
|||||||
spyOn(resourceType, 'list').and.returnValue(listFunctionDeferred.promise);
|
spyOn(resourceType, 'list').and.returnValue(listFunctionDeferred.promise);
|
||||||
spyOn(registry, 'getResourceType').and.returnValue(resourceType);
|
spyOn(registry, 'getResourceType').and.returnValue(resourceType);
|
||||||
|
|
||||||
|
var settings = {
|
||||||
|
getSetting: function() {
|
||||||
|
settingCall = $q.defer();
|
||||||
|
return settingCall.promise;
|
||||||
|
}
|
||||||
|
};
|
||||||
ctrl = $controller('horizon.framework.widgets.table.ResourceTableController', {
|
ctrl = $controller('horizon.framework.widgets.table.ResourceTableController', {
|
||||||
$scope: $scope,
|
$scope: $scope,
|
||||||
'horizon.framework.conf.resource-type-registry.service': registry},
|
'horizon.framework.conf.resource-type-registry.service': registry,
|
||||||
|
'horizon.app.core.openstack-service-api.settings': settings},
|
||||||
{resourceTypeName: 'OS::Test::Example'});
|
{resourceTypeName: 'OS::Test::Example'});
|
||||||
$scope.ctrl = ctrl;
|
$scope.ctrl = ctrl;
|
||||||
$scope.$apply();
|
$scope.$apply();
|
||||||
|
@ -43,7 +43,9 @@ class Settings(generic.View):
|
|||||||
'HORIZON_IMAGES_UPLOAD_MODE': api.glance.get_image_upload_mode(),
|
'HORIZON_IMAGES_UPLOAD_MODE': api.glance.get_image_upload_mode(),
|
||||||
'HORIZON_ACTIVE_IMAGE_VERSION': str(api.glance.VERSIONS.active),
|
'HORIZON_ACTIVE_IMAGE_VERSION': str(api.glance.VERSIONS.active),
|
||||||
'IMAGES_ALLOW_LOCATION': getattr(settings, 'IMAGES_ALLOW_LOCATION',
|
'IMAGES_ALLOW_LOCATION': getattr(settings, 'IMAGES_ALLOW_LOCATION',
|
||||||
False)
|
False),
|
||||||
|
'AJAX_POLL_INTERVAL': settings.HORIZON_CONFIG.get(
|
||||||
|
'ajax_poll_interval', 2500)
|
||||||
}
|
}
|
||||||
|
|
||||||
@rest_utils.ajax()
|
@rest_utils.ajax()
|
||||||
|
@ -132,7 +132,7 @@
|
|||||||
return {data: {items: response.data.items.map(modifyImage)}};
|
return {data: {items: response.data.items.map(modifyImage)}};
|
||||||
|
|
||||||
function modifyImage(image) {
|
function modifyImage(image) {
|
||||||
image.trackBy = image.id + image.updated_at;
|
image.trackBy = image.id + image.updated_at + image.status;
|
||||||
image.apiVersion = version;
|
image.apiVersion = version;
|
||||||
image.visibility = $filter('imageVisibility')(image, projectId);
|
image.visibility = $filter('imageVisibility')(image, projectId);
|
||||||
image.name = image.name || image.id;
|
image.name = image.name || image.id;
|
||||||
|
@ -95,11 +95,11 @@
|
|||||||
spyOn(glance, 'getVersion').and.returnValue(deferredVersion.promise);
|
spyOn(glance, 'getVersion').and.returnValue(deferredVersion.promise);
|
||||||
spyOn(session, 'get').and.returnValue(deferredSession.promise);
|
spyOn(session, 'get').and.returnValue(deferredSession.promise);
|
||||||
var result = service.getImagesPromise({});
|
var result = service.getImagesPromise({});
|
||||||
deferred.resolve({data: {items: [{id: 1, updated_at: 'jul1'}]}});
|
deferred.resolve({data: {items: [{id: 1, updated_at: 'jul1', status: 'active'}]}});
|
||||||
deferredVersion.resolve({data: {version: '2'}});
|
deferredVersion.resolve({data: {version: '2'}});
|
||||||
deferredSession.resolve({project_id: '12'});
|
deferredSession.resolve({project_id: '12'});
|
||||||
$timeout.flush();
|
$timeout.flush();
|
||||||
expect(result.$$state.value.data.items[0].trackBy).toBe('1jul1');
|
expect(result.$$state.value.data.items[0].trackBy).toBe('1jul1active');
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user