From e6c3c72677709af1135948b490a99d8f0c6a48bd Mon Sep 17 00:00:00 2001 From: Malek Date: Tue, 16 Oct 2018 16:44:41 +0300 Subject: Add worker to onboard notification Issue-ID: SDC-1840 Change-Id: I0506df2073beb14de2aea5a01233f05ce9a6d7f7 Signed-off-by: Malek --- .../src/nfvo-utils/Notifications.worker.js | 59 ++++++++++++++++++++ openecomp-ui/src/nfvo-utils/RestAPIUtil.js | 31 ++++++----- openecomp-ui/src/nfvo-utils/WebSocketUtil.js | 44 ++++++++------- openecomp-ui/src/nfvo-utils/WorkerUtil.js | 64 ++++++++++++++++++++++ openecomp-ui/src/sdc-app/config/Configuration.js | 42 +++++++++----- openecomp-ui/src/sdc-app/config/config.json | 22 ++++---- 6 files changed, 203 insertions(+), 59 deletions(-) create mode 100644 openecomp-ui/src/nfvo-utils/Notifications.worker.js create mode 100644 openecomp-ui/src/nfvo-utils/WorkerUtil.js (limited to 'openecomp-ui/src') 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; diff --git a/openecomp-ui/src/sdc-app/config/Configuration.js b/openecomp-ui/src/sdc-app/config/Configuration.js index b450d47352..32de7dde15 100644 --- a/openecomp-ui/src/sdc-app/config/Configuration.js +++ b/openecomp-ui/src/sdc-app/config/Configuration.js @@ -1,18 +1,19 @@ -/*! - * 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 configData from './config.json'; class Configuration { @@ -60,6 +61,10 @@ const configuration = new Configuration(); if (DEBUG) { websocketPort = configuration.get('defaultDebugWebsocketPort'); } + configuration.set( + 'websocketProtocol', + configuration.get('defaultWebsocketProtocol') + ); configuration.set('websocketPort', websocketPort); configuration.set( 'websocketPath', @@ -67,4 +72,11 @@ const configuration = new Configuration(); ); })(configuration); +(function setDefaultNotificationsWorkerConfig(configuration) { + configuration.set( + 'notificationsWorkerUpdateMillisecond', + configuration.get('defaultNotificationsWorkerUpdateMillisecond') + ); +})(configuration); + export default configuration; diff --git a/openecomp-ui/src/sdc-app/config/config.json b/openecomp-ui/src/sdc-app/config/config.json index e9e0b55114..2e94d8672f 100644 --- a/openecomp-ui/src/sdc-app/config/config.json +++ b/openecomp-ui/src/sdc-app/config/config.json @@ -1,12 +1,14 @@ { - "pageSize": 25, - "version": "9.4", - "build": "dev", - "appContextPath" : "/onboarding", - "defaultRestPrefix": "/onboarding-api", - "defaultRestCatalogPrefix": "/sdc1/feProxy/rest", - "defaultWebsocketPort" : "8181", - "defaultDebugWebsocketPort" : "9000", - "defaultWebsocketPath" : "notification-api/ws/notificationHandler", - "showBrowseVNF" : true + "pageSize": 25, + "version": "9.4", + "build": "dev", + "appContextPath": "/onboarding", + "defaultRestPrefix": "/onboarding-api", + "defaultRestCatalogPrefix": "/sdc1/feProxy/rest", + "defaultWebsocketProtocol": "wss", + "defaultWebsocketPort": "8181", + "defaultDebugWebsocketPort": "9000", + "defaultWebsocketPath": "notification-api/ws/notificationHandler", + "defaultNotificationsWorkerUpdateMillisecond": 10000, + "showBrowseVNF": true } -- cgit 1.2.3-korg