diff options
Diffstat (limited to 'openecomp-ui/src/nfvo-utils')
-rw-r--r-- | openecomp-ui/src/nfvo-utils/Notifications.worker.js | 59 | ||||
-rw-r--r-- | openecomp-ui/src/nfvo-utils/RestAPIUtil.js | 31 | ||||
-rw-r--r-- | openecomp-ui/src/nfvo-utils/WebSocketUtil.js | 44 | ||||
-rw-r--r-- | openecomp-ui/src/nfvo-utils/WorkerUtil.js | 64 |
4 files changed, 164 insertions, 34 deletions
diff --git a/openecomp-ui/src/nfvo-utils/Notifications.worker.js b/openecomp-ui/src/nfvo-utils/Notifications.worker.js new file mode 100644 index 0000000000..3e9f688c57 --- /dev/null +++ b/openecomp-ui/src/nfvo-utils/Notifications.worker.js @@ -0,0 +1,59 @@ +/* +* Copyright © 2018 European Support Limited +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http: //www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import axios from 'axios'; + +let prevLastScanned; +let updateNotificationsTimeout; +let config; +let notificationsWorkerUpdateMillisecond; + +function updateNotifications() { + axios(config) + .then(response => { + const notifications = response.data; + + let lastScanned = notifications.lastScanned; + if (prevLastScanned !== lastScanned) { + postMessage(notifications); + } + prevLastScanned = lastScanned; + }) + .catch(() => {}); + + updateNotificationsTimeout = setTimeout( + updateNotifications, + notificationsWorkerUpdateMillisecond + ); +} + +navigator.connection.onchange = () => { + clearTimeout(updateNotificationsTimeout); + + if (navigator.onLine && config && notificationsWorkerUpdateMillisecond) { + updateNotifications(); + } +}; + +onmessage = ({ data }) => { + if (data && data.config && data.notificationsWorkerUpdateMillisecond) { + config = data.config; + notificationsWorkerUpdateMillisecond = + data.notificationsWorkerUpdateMillisecond; + + updateNotifications(); + } +}; diff --git a/openecomp-ui/src/nfvo-utils/RestAPIUtil.js b/openecomp-ui/src/nfvo-utils/RestAPIUtil.js index 66d7c6d4fd..03908d8203 100644 --- a/openecomp-ui/src/nfvo-utils/RestAPIUtil.js +++ b/openecomp-ui/src/nfvo-utils/RestAPIUtil.js @@ -1,18 +1,19 @@ /* - * Copyright © 2016-2018 European Support Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +* Copyright © 2018 European Support Limited +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http: //www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + import uuid from 'uuid-js'; import md5 from 'md5'; import axios from 'axios'; @@ -34,7 +35,7 @@ const STORAGE_AUTH_KEY = 'sdc-auth-token'; const REQUEST_ID_HEADER = 'X-ECOMP-RequestID'; const CONTENT_MD5_HEADER = 'Content-MD5'; -function applySecurity(options, data) { +export function applySecurity(options, data) { let headers = options.headers || (options.headers = {}); if (options.isAnonymous) { return; diff --git a/openecomp-ui/src/nfvo-utils/WebSocketUtil.js b/openecomp-ui/src/nfvo-utils/WebSocketUtil.js index 69f44d4da5..0944d019a3 100644 --- a/openecomp-ui/src/nfvo-utils/WebSocketUtil.js +++ b/openecomp-ui/src/nfvo-utils/WebSocketUtil.js @@ -1,25 +1,27 @@ -/*! - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ +/* +* Copyright © 2018 European Support Limited +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http: //www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ import store from 'sdc-app/AppStore.js'; import Configuration from 'sdc-app/config/Configuration.js'; import { actionTypes } from 'sdc-app/onboarding/userNotifications/UserNotificationsConstants.js'; +import WorkerUtil from 'nfvo-utils/WorkerUtil'; export const websocketUrl = - 'ws://' + + Configuration.get('websocketProtocol') + + '://' + window.location.hostname + ':' + Configuration.get('websocketPort') + @@ -29,8 +31,8 @@ export const websocketUrl = /*** * Websocket is treated like a singleton. only need one for the application. */ -var websocket; - +let websocket; +const workerUtil = new WorkerUtil(); export default { open(url, { lastScanned }) { if ( @@ -53,7 +55,9 @@ export default { this.open(websocketUrl, { lastScanned }); } }; - websocket.onerror = event => console.log(event); + websocket.onerror = () => { + workerUtil.open(); + }; } }, @@ -61,5 +65,7 @@ export default { if (websocket !== undefined) { websocket.close(); } + + workerUtil.close(); } }; diff --git a/openecomp-ui/src/nfvo-utils/WorkerUtil.js b/openecomp-ui/src/nfvo-utils/WorkerUtil.js new file mode 100644 index 0000000000..e9ce332e20 --- /dev/null +++ b/openecomp-ui/src/nfvo-utils/WorkerUtil.js @@ -0,0 +1,64 @@ +/* +* Copyright © 2018 European Support Limited +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http: //www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import Configuration from 'sdc-app/config/Configuration.js'; +import { applySecurity } from 'nfvo-utils/RestAPIUtil.js'; +import store from 'sdc-app/AppStore.js'; +import { actionTypes } from 'sdc-app/onboarding/userNotifications/UserNotificationsConstants.js'; + +import Worker from 'nfvo-utils/Notifications.worker.js'; + +class WorkerUtil { + open() { + this.worker = new Worker(); + + const url = `${Configuration.get('restPrefix')}/v1.0/notifications`; + const notificationsWorkerUpdateMillisecond = Configuration.get( + 'notificationsWorkerUpdateMillisecond' + ); + const options = {}; + + applySecurity(options); + + const config = { + method: 'GET', + url: url, + headers: options.headers, + data: null + }; + + this.worker.postMessage({ + config, + notificationsWorkerUpdateMillisecond + }); + + this.worker.onmessage = event => { + const result = event.data; + store.dispatch({ + type: actionTypes.LOAD_NOTIFICATIONS, + result + }); + }; + } + + close() { + if (this.worker !== undefined) { + this.worker.terminate(); + } + } +} + +export default WorkerUtil; |