Skip to content

Commit

Permalink
Merge pull request #1314 from AllenBW/bug/master/#1517075-ws-error
Browse files Browse the repository at this point in the history
BZ#1517075-Move actioncable subcription creation to login promise chain
(cherry picked from commit 73526fa)

https://bugzilla.redhat.com/show_bug.cgi?id=1525115
  • Loading branch information
himdel authored and simaishi committed Dec 12, 2017
1 parent 293a5fb commit 889b9f5
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 47 deletions.
7 changes: 2 additions & 5 deletions client/app/core/appliance-info.service.js
Expand Up @@ -9,9 +9,7 @@ export function ApplianceInfo ($sessionStorage) {
}

function get () {
const defaultResponse = {
asyncNotify: false
}
const defaultResponse = {}

return (angular.isDefined($sessionStorage.applianceInfo) ? $sessionStorage.applianceInfo : defaultResponse)
}
Expand All @@ -25,8 +23,7 @@ export function ApplianceInfo ($sessionStorage) {
role: data.identity.role,
suiVersion: gitHash.gitCommit,
miqVersion: data.server_info.version + '.' + data.server_info.build,
server: data.server_info.appliance,
asyncNotify: data.settings.asynchronous_notifications
server: data.server_info.appliance
}
$sessionStorage.applianceInfo = applianceInfo
}
Expand Down
3 changes: 1 addition & 2 deletions client/app/core/appliance-info.service.spec.js
Expand Up @@ -40,8 +40,7 @@ describe('Appliance Info Service', () => {
'role': 'EvmRole-super_administrator',
'miqVersion': 'master.20170510164252_9e5df30',
'suiVersion': '',
'server': 'EVM',
'asyncNotify': true
'server': 'EVM'
}
ApplianceInfo.set(applianceInfoData)
const currentApplianceInfo = ApplianceInfo.get()
Expand Down
26 changes: 16 additions & 10 deletions client/app/core/authorization.config.js
Expand Up @@ -44,7 +44,7 @@ export function authConfig ($httpProvider) {
}

/** @ngInject */
export function authInit ($rootScope, $state, $log, Session, $sessionStorage, Language, $window, RBAC) {
export function authInit ($rootScope, $state, $log, Session, $sessionStorage, Language, $window, RBAC, ActionCable) {
$rootScope.$on('$stateChangeStart', changeStart)
$rootScope.$on('$stateChangeError', changeError)
$rootScope.$on('$stateChangeSuccess', changeSuccess)
Expand Down Expand Up @@ -79,7 +79,13 @@ export function authInit ($rootScope, $state, $log, Session, $sessionStorage, La

return
}
syncSession().then(rbacReloadOrLogin(toState, toParams)).catch(badUser)
syncSession()
.then(rbacReloadOrLogin(toState, toParams))
.then(() => {
const cable = ActionCable.createConsumer('/ws/notifications')
cable.subscriptions.create('NotificationChannel', {})
})
.catch(badUser)
}

function syncSession () {
Expand All @@ -89,14 +95,14 @@ export function authInit ($rootScope, $state, $log, Session, $sessionStorage, La
Session.setGroup($sessionStorage.miqGroup)

Session.loadUser()
.then(function (response) {
if (angular.isDefined(response)) {
Language.onReload(response)
RBAC.setRole(response.identity.role)
}
resolve()
})
.catch(badUser)
.then(function (response) {
if (angular.isDefined(response)) {
Language.onReload(response)
RBAC.setRole(response.identity.role)
}
resolve()
})
.catch(badUser)
})
}

Expand Down
27 changes: 1 addition & 26 deletions client/app/core/event-notifications.service.js
@@ -1,5 +1,5 @@
/** @ngInject */
export function EventNotificationsFactory ($timeout, lodash, CollectionsApi, Session, $log, ActionCable, ApplianceInfo) {
export function EventNotificationsFactory ($timeout, lodash, CollectionsApi) {
const state = {}
const toastDelay = 8 * 1000
const service = {
Expand All @@ -19,9 +19,7 @@ export function EventNotificationsFactory ($timeout, lodash, CollectionsApi, Ses
dismissToast: dismissToast,
setToastDisplay: setToastDisplay
}

notificationsInit()
asyncInit()

return service

Expand Down Expand Up @@ -176,29 +174,6 @@ export function EventNotificationsFactory ($timeout, lodash, CollectionsApi, Ses
showToast(newNotification)
}

function asyncInit () {
if (ApplianceInfo.get().asyncNotify) {
const cable = ActionCable.createConsumer('/ws/notifications')

cable.subscriptions.create('NotificationChannel', {
disconnected: function () {
const vm = this
Session.requestWsToken().then(null, function () {
$log.warn('Unable to retrieve a valid ws_token!')
// Disconnect permanently if the ws_token cannot be fetched
vm.consumer.connection.close({allowReconnect: false})
})
},
received: function (data) {
$timeout(function () {
const msg = miqFormatNotification(data.text, data.bindings)
add('event', data.level, msg, {message: msg}, data.id)
})
}
})
}
}

function miqFormatNotification (text, bindings) {
let str = __(text)
lodash.each(bindings, function (value, key) {
Expand Down
3 changes: 1 addition & 2 deletions client/app/core/server-info.service.js
Expand Up @@ -8,8 +8,7 @@ export function ServerInfo ($q) {
user: data.identity.name,
role: data.identity.role,
version: data.server_info.version + '.' + data.server_info.build,
server: data.server_info.appliance,
asyncNotify: data.settings.asynchronous_notifications
server: data.server_info.appliance
}
resolve(factory.data)

Expand Down
8 changes: 6 additions & 2 deletions client/app/states/login/login.state.js
Expand Up @@ -22,8 +22,8 @@ function getStates () {
}

/** @ngInject */
function StateController (exception, $state, Text, RBAC, API_LOGIN, API_PASSWORD, AuthenticationApi, Session,
$rootScope, Notifications, Language, ApplianceInfo, $window) {
function StateController ($window, $state, Text, RBAC, API_LOGIN, API_PASSWORD, AuthenticationApi, Session,
$rootScope, Notifications, Language, ApplianceInfo, ActionCable) {
const vm = this

vm.text = Text.login
Expand Down Expand Up @@ -74,6 +74,10 @@ function StateController (exception, $state, Text, RBAC, API_LOGIN, API_PASSWORD
Session.destroy()
}
})
.then(() => {
const cable = ActionCable.createConsumer('/ws/notifications')
cable.subscriptions.create('NotificationChannel', {})
})
.catch((response) => {
if (response.status === 401) {
vm.credentials.login = ''
Expand Down

0 comments on commit 889b9f5

Please sign in to comment.