aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-ui/src/nfvo-utils
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-ui/src/nfvo-utils')
-rw-r--r--openecomp-ui/src/nfvo-utils/Notifications.worker.js59
-rw-r--r--openecomp-ui/src/nfvo-utils/RestAPIUtil.js31
-rw-r--r--openecomp-ui/src/nfvo-utils/WebSocketUtil.js44
-rw-r--r--openecomp-ui/src/nfvo-utils/WorkerUtil.js64
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;