aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/apps
diff options
context:
space:
mode:
Diffstat (limited to 'sdnr/wt/odlux/apps')
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts50
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/src/handlers/connectedNetworkElementsHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/src/services/yangService.ts4
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx4
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/src/views/networkElementSelector.tsx2
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/src/yang/yangParser.ts7
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/webpack.config.js22
-rw-r--r--sdnr/wt/odlux/apps/connectApp/package.json6
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/actions/connectionStatusCountActions.ts55
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/actions/mountedNetworkElementsActions.ts4
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/actions/networkElementsActions.ts6
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx2
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/components/editNetworkElementDialog.tsx46
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/components/infoNetworkElementDialog.tsx12
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/components/networkElements.tsx20
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/components/refreshNetworkElementsDialog.tsx2
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/handlers/connectAppRootHandler.ts3
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/handlers/connectionStatusCountHandler.ts61
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/models/connectionStatusCount.ts43
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/pluginConnect.tsx33
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/services/connectService.ts16
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/services/connectionStatusCountService.ts54
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/views/connectView.tsx2
-rw-r--r--sdnr/wt/odlux/apps/connectApp/webpack.config.js8
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/actions/partialUpdatesAction.ts25
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts20
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx (renamed from sdnr/wt/odlux/apps/connectApp/src/components/dashboardHome.tsx)91
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts33
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/models/fault.ts23
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx7
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts20
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx12
-rw-r--r--sdnr/wt/odlux/apps/helpApp/src/views/helpTocApp.tsx2
-rw-r--r--sdnr/wt/odlux/apps/helpApp/webpack.config.js19
-rw-r--r--sdnr/wt/odlux/apps/inventoryApp/src/handlers/connectedNetworkElementsHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/mediatorApp/pom.xml2
-rw-r--r--sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx4
-rw-r--r--sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/adaptiveModulationHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/crossPolarDiscriminationHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/performanceDataHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/receiveLevelHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/signalToInterferenceHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/temperatureHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/transmissionPowerHandler.ts2
45 files changed, 307 insertions, 433 deletions
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts b/sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts
index 0dd42e3b7..2846dba06 100644
--- a/sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts
+++ b/sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts
@@ -1,21 +1,3 @@
-/**
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt odlux
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.
- * ============LICENSE_END==========================================================================
- */
-
import { Action } from '../../../../framework/src/flux/action';
import { Dispatch } from '../../../../framework/src/flux/store';
import { IApplicationStoreState } from "../../../../framework/src/store/applicationStore";
@@ -65,6 +47,22 @@ export class UpdatOutputData extends Action {
}
}
+type HttpResult = {
+ status: number;
+ message?: string | undefined;
+ data: {
+ [key: string]: any;
+ } | null | undefined;
+};
+
+const checkResponseCode = (restResult: HttpResult) =>{
+
+ //403 gets handled by the framework from now on
+
+ return restResult.status !== 403 && ( restResult.status < 200 || restResult.status > 299);
+
+}
+
export const updateNodeIdAsyncActionCreator = (nodeId: string) => async (dispatch: Dispatch, getState: () => IApplicationStoreState ) => {
dispatch(new UpdateDeviceDescription("", {}, []));
@@ -81,8 +79,8 @@ export const updateNodeIdAsyncActionCreator = (nodeId: string) => async (dispatc
}));
throw new Error(`NetworkElement : [${nodeId}] has no capabilities.`);
}
-
- const parser = new YangParser(unavailableCapabilities || undefined, importOnlyModules || undefined);
+
+ const parser = new YangParser(unavailableCapabilities || undefined, importOnlyModules || undefined, nodeId);
for (let i = 0; i < availableCapabilities.length; ++i){
const capRaw = availableCapabilities[i];
@@ -146,7 +144,7 @@ const getReferencedDataList = async (refPath: string, dataPath: string, modules:
for (let j = 0; j < dataUrls.length; ++j) {
const dataUrl = dataUrls[j];
const restResult = (await restService.getConfigData(dataUrl));
- if (restResult.data == null || restResult.status < 200 || restResult.status > 299) {
+ if (restResult.data == null || checkResponseCode(restResult)) {
const message = restResult.data && restResult.data.errors && restResult.data.errors.error && restResult.data.errors.error[0] && restResult.data.errors.error[0]["error-message"] || "";
throw new Error(`Server Error. Status: [${restResult.status}]\n${message || restResult.message || ''}`);
}
@@ -178,7 +176,7 @@ const getReferencedDataList = async (refPath: string, dataPath: string, modules:
for (let j = 0; j < dataUrls.length; ++j) {
const dataUrl = dataUrls[j];
const restResult = (await restService.getConfigData(dataUrl));
- if (restResult.data == null || restResult.status < 200 || restResult.status > 299) {
+ if (restResult.data == null || checkResponseCode(restResult)) {
const message = restResult.data && restResult.data.errors && restResult.data.errors.error && restResult.data.errors.error[0] && restResult.data.errors.error[0]["error-message"] || "";
throw new Error(`Server Error. Status: [${restResult.status}]\n${message || restResult.message || ''}`);
}
@@ -426,7 +424,7 @@ export const updateViewActionAsyncCreator = (vPath: string) => async (dispatch:
return dispatch(new UpdatViewDescription(vPath, [], ds));
}
throw new Error(`Did not get response from Server. Status: [${restResult.status}]`);
- } else if (restResult.status < 200 || restResult.status > 299) {
+ } else if (checkResponseCode(restResult)) {
const message = restResult.data.errors && restResult.data.errors.error && restResult.data.errors.error[0] && restResult.data.errors.error[0]["error-message"] || "";
throw new Error(`Server Error. Status: [${restResult.status}]\n${message}`);
} else {
@@ -581,7 +579,7 @@ export const updateDataActionAsyncCreator = (vPath: string, data: any) => async
// do not extract root member (0)
if (viewSpecification && viewSpecification.id !== "0") {
const updateResult = await restService.setConfigData(dataPath, { [`${currentNS}:${dataMember!}`]: data }); // addDataMember using currentNS
- if (updateResult.status < 200 || updateResult.status > 299) {
+ if (checkResponseCode(updateResult)) {
const message = updateResult.data && updateResult.data.errors && updateResult.data.errors.error && updateResult.data.errors.error[0] && updateResult.data.errors.error[0]["error-message"] || "";
throw new Error(`Server Error. Status: [${updateResult.status}]\n${message || updateResult.message || ''}`);
}
@@ -653,7 +651,7 @@ export const removeElementActionAsyncCreator = (vPath: string) => async (dispatc
}
const updateResult = await restService.removeConfigElement(dataPath);
- if (updateResult.status < 200 || updateResult.status > 299) {
+ if (checkResponseCode(updateResult)) {
const message = updateResult.data && updateResult.data.errors && updateResult.data.errors.error && updateResult.data.errors.error[0] && updateResult.data.errors.error[0]["error-message"] || "";
throw new Error(`Server Error. Status: [${updateResult.status}]\n${message || updateResult.message || ''}`);
}
@@ -747,7 +745,7 @@ export const executeRpcActionAsyncCreator = (vPath: string, data: any) => async
// do not post root member (0)
if ((viewSpecification && viewSpecification.id !== "0") || (dataMember! && !data)) {
const updateResult = await restService.executeRpc(dataPath, { [`${defaultNS}:input`]: data || {} });
- if (updateResult.status < 200 || updateResult.status > 299) {
+ if (checkResponseCode(updateResult)) {
const message = updateResult.data && updateResult.data.errors && updateResult.data.errors.error && updateResult.data.errors.error[0] && updateResult.data.errors.error[0]["error-message"] || "";
throw new Error(`Server Error. Status: [${updateResult.status}]\n${message || updateResult.message || ''}`);
}
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/handlers/connectedNetworkElementsHandler.ts b/sdnr/wt/odlux/apps/configurationApp/src/handlers/connectedNetworkElementsHandler.ts
index 02f2929cd..8ca8fdf27 100644
--- a/sdnr/wt/odlux/apps/configurationApp/src/handlers/connectedNetworkElementsHandler.ts
+++ b/sdnr/wt/odlux/apps/configurationApp/src/handlers/connectedNetworkElementsHandler.ts
@@ -26,7 +26,7 @@ import { restService } from '../services/restServices';
export interface IConnectedNetworkElementsState extends IExternalTableState<NetworkElementConnection> { }
// create eleactic search material data fetch handler
-const connectedNetworkElementsSearchHandler = createSearchDataHandler<NetworkElementConnection>('network-element-connection', { status: "Connected" });
+const connectedNetworkElementsSearchHandler = createSearchDataHandler<NetworkElementConnection>('network-element-connection', false, { status: "Connected" });
export const {
actionHandler: connectedNetworkElementsActionHandler,
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/services/yangService.ts b/sdnr/wt/odlux/apps/configurationApp/src/services/yangService.ts
index cf4677bc9..b81a92c14 100644
--- a/sdnr/wt/odlux/apps/configurationApp/src/services/yangService.ts
+++ b/sdnr/wt/odlux/apps/configurationApp/src/services/yangService.ts
@@ -24,8 +24,8 @@ const cache: { [path: string]: string } = {
class YangService {
- public async getCapability(capability: string, version?: string) {
- const url = `/yang-schema/${capability}${version ? `/${version}` : ""}`;
+ public async getCapability(capability: string, nodeId: string, version?: string) {
+ const url = `/yang-schema/${capability}${version ? `/${version}` : ""}?node=${nodeId}`;
const cacheHit = cache[url];
if (cacheHit) return cacheHit;
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx b/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx
index 2879899a5..12815a517 100644
--- a/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx
+++ b/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx
@@ -639,7 +639,7 @@ class ConfigurationApplicationComponent extends React.Component<ConfigurationApp
}
return (
- <SelectElementTable stickyHeader idProperty={listKeyProperty} rows={listData} customActionButtons={apiDocPathCreate ? [addNewElementAction, addWithApiDocElementAction] : [addNewElementAction]} columns={
+ <SelectElementTable stickyHeader idProperty={listKeyProperty} tableId={null} rows={listData} customActionButtons={apiDocPathCreate ? [addNewElementAction, addWithApiDocElementAction] : [addNewElementAction]} columns={
Object.keys(listElements).reduce<ColumnModel<{ [key: string]: any }>[]>((acc, cur) => {
const elm = listElements[cur];
if (elm.uiType !== "object" && listData.every(entry => entry[elm.label] != null)) {
@@ -822,7 +822,7 @@ class ConfigurationApplicationComponent extends React.Component<ConfigurationApp
return (
<div className={this.props.classes.container}>
- <SelectElementTable stickyHeader idProperty={listKeyProperty} rows={listData} columns={
+ <SelectElementTable stickyHeader idProperty={listKeyProperty} tableId={null} rows={listData} columns={
Object.keys(listSpecification.elements).reduce<ColumnModel<{ [key: string]: any }>[]>((acc, cur) => {
const elm = listSpecification.elements[cur];
if (elm.uiType !== "object" && listData.every(entry => entry[elm.label] != null)) {
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/views/networkElementSelector.tsx b/sdnr/wt/odlux/apps/configurationApp/src/views/networkElementSelector.tsx
index 5cac22eba..1a1008dad 100644
--- a/sdnr/wt/odlux/apps/configurationApp/src/views/networkElementSelector.tsx
+++ b/sdnr/wt/odlux/apps/configurationApp/src/views/networkElementSelector.tsx
@@ -54,7 +54,7 @@ class NetworkElementSelectorComponent extends React.Component<NetworkElementSele
render() {
return (
- <ConnectedElementTable stickyHeader onHandleClick={(e, row) => { this.props.history.push(`${this.props.match.path}/${row.nodeId}`) }} columns={[
+ <ConnectedElementTable stickyHeader tableId="configurable-elements-table" onHandleClick={(e, row) => { this.props.history.push(`${this.props.match.path}/${row.nodeId}`) }} columns={[
{ property: "nodeId", title: "Node Name", type: ColumnType.text },
{ property: "isRequired", title: "Required", type: ColumnType.boolean },
{ property: "host", title: "Host", type: ColumnType.text },
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/yang/yangParser.ts b/sdnr/wt/odlux/apps/configurationApp/src/yang/yangParser.ts
index c80bd4c84..965935a5c 100644
--- a/sdnr/wt/odlux/apps/configurationApp/src/yang/yangParser.ts
+++ b/sdnr/wt/odlux/apps/configurationApp/src/yang/yangParser.ts
@@ -286,7 +286,7 @@ export class YangParser {
public static ResolveStack = Symbol("ResolveStack");
- constructor(private _unavailableCapabilities: { failureReason: string; capability: string; }[] = [], private _importOnlyModules: { name: string; revision: string; }[] = []) {
+ constructor(private _unavailableCapabilities: { failureReason: string; capability: string; }[] = [], private _importOnlyModules: { name: string; revision: string; }[] = [], private nodeId: string) {
}
@@ -310,8 +310,7 @@ export class YangParser {
// // console.warn(`Skipped capability: ${capability} since it is marked as unavailable.` );
// return;
// }
-
- const data = await yangService.getCapability(capability, version);
+ const data = await yangService.getCapability(capability, this.nodeId, version);
if (!data) {
throw new Error(`Could not load yang file for ${capability}.`);
}
@@ -409,6 +408,8 @@ export class YangParser {
// import all required files and set module state
if (imports) for (let ind = 0; ind < imports.length; ++ind) {
const moduleName = imports[ind].arg!;
+
+ //TODO: Fix imports getting loaded without revision
await this.addCapability(moduleName, undefined, module.state === ModuleState.importOnly);
const importedModule = this._modules[imports[ind].arg!];
if (importedModule && importedModule.state > ModuleState.stable) {
diff --git a/sdnr/wt/odlux/apps/configurationApp/webpack.config.js b/sdnr/wt/odlux/apps/configurationApp/webpack.config.js
index 5461c14f2..57caf079f 100644
--- a/sdnr/wt/odlux/apps/configurationApp/webpack.config.js
+++ b/sdnr/wt/odlux/apps/configurationApp/webpack.config.js
@@ -135,49 +135,49 @@ module.exports = (env) => {
},
proxy: {
"/about": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/yang-schema/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/oauth/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/database/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/restconf/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/rests/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/help/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/about/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/tree/": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
secure: false
},
"/websocket": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
ws: true,
changeOrigin: true,
secure: false
},
"/apidoc": {
- target: "http://localhost:18181",
+ target: "http://sdnr:8181",
ws: true,
changeOrigin: true,
secure: false
diff --git a/sdnr/wt/odlux/apps/connectApp/package.json b/sdnr/wt/odlux/apps/connectApp/package.json
index 9ecdaf853..a31824ae2 100644
--- a/sdnr/wt/odlux/apps/connectApp/package.json
+++ b/sdnr/wt/odlux/apps/connectApp/package.json
@@ -1,7 +1,7 @@
{
"name": "@odlux/connect-app",
"version": "0.1.1",
- "description": "A react based modular UI to display network connect data from a database.",
+ "description": "A react based modular UI to display network element/node connect data from a database.",
"main": "index.js",
"scripts": {
"start": "webpack-dev-server --env debug",
@@ -26,9 +26,7 @@
"@mui/icons-material": "^5.2.0",
"@mui/material": "^5.2.2",
"@mui/styles": "^5.2.2",
- "@odlux/framework": "*",
- "react-chartjs-2": "2.7.6",
- "chart.js": "2.8.0"
+ "@odlux/framework": "*"
},
"peerDependencies": {
"@types/classnames": "2.2.6",
diff --git a/sdnr/wt/odlux/apps/connectApp/src/actions/connectionStatusCountActions.ts b/sdnr/wt/odlux/apps/connectApp/src/actions/connectionStatusCountActions.ts
deleted file mode 100644
index 43bae720c..000000000
--- a/sdnr/wt/odlux/apps/connectApp/src/actions/connectionStatusCountActions.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt odlux
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.
- * ============LICENSE_END==========================================================================
- */
-import { getConnectionStatusCountStateFromDatabase } from '../services/connectionStatusCountService';
-import { Dispatch } from '../../../../framework/src/flux/store';
-
-import { Action } from '../../../../framework/src/flux/action';
-
-
-export class ConnectionStatusCountBaseAction extends Action { }
-
-
-export class SetConnectionStatusCountAction extends ConnectionStatusCountBaseAction {
- constructor(public ConnectedCount: number, public ConnectingCount: number, public DisconnectedCount: number,
- public MountedCount: number, public UnableToConnectCount: number, public UndefinedCount: number, public UnmountedCount: number, public totalCount: number, public isLoadingConnectionStatusChart: boolean) {
- super();
- }
-}
-
-
-export const refreshConnectionStatusCountAsyncAction = async (dispatch: Dispatch) => {
- dispatch(new SetConnectionStatusCountAction(0, 0, 0, 0, 0, 0, 0, 0, true));
- const result = await getConnectionStatusCountStateFromDatabase().catch(_ => null);
- if (result) {
- const statusAction = new SetConnectionStatusCountAction(
- result["Connected"] || 0,
- result["Connecting"] || 0,
- result["Disconnected"] || 0,
- result["Mounted"] || 0,
- result["UnableToConnect"] || 0,
- result["Undefined"] || 0,
- result["Unmounted"] || 0,
- result["total"] || 0,
- false
- );
- dispatch(statusAction);
- return;
- } else {
- dispatch(new SetConnectionStatusCountAction(0, 0, 0, 0, 0, 0, 0, 0, false));
- }
-}
diff --git a/sdnr/wt/odlux/apps/connectApp/src/actions/mountedNetworkElementsActions.ts b/sdnr/wt/odlux/apps/connectApp/src/actions/mountedNetworkElementsActions.ts
index 84e73ae5a..26ee7674f 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/actions/mountedNetworkElementsActions.ts
+++ b/sdnr/wt/odlux/apps/connectApp/src/actions/mountedNetworkElementsActions.ts
@@ -27,7 +27,7 @@ import { updateCurrentViewAsyncAction } from './commonNetworkElementsActions';
/** Represents the base action. */
export class BaseAction extends Action { }
-/** Represents an action crator for a async thunk action to mount a network element. */
+/** Represents an action creator for a async thunk action to mount a network element/node. */
export const mountNetworkElementAsyncActionCreator = (networkElement: NetworkElementConnection) => (dispatch: Dispatch) => {
return connectService.mountNetworkElement(networkElement).then((success) => {
if (success) {
@@ -42,7 +42,7 @@ export const mountNetworkElementAsyncActionCreator = (networkElement: NetworkEle
});
};
-/** Represents an action crator for a async thunk action to unmount a network element. */
+/** Represents an action creator for a async thunk action to unmount a network element/node. */
export const unmountNetworkElementAsyncActionCreator = (nodeId: string) => (dispatch: Dispatch) => {
return connectService.unmountNetworkElement(nodeId).then((success) => {
if (success) {
diff --git a/sdnr/wt/odlux/apps/connectApp/src/actions/networkElementsActions.ts b/sdnr/wt/odlux/apps/connectApp/src/actions/networkElementsActions.ts
index 041cff9da..57f036e56 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/actions/networkElementsActions.ts
+++ b/sdnr/wt/odlux/apps/connectApp/src/actions/networkElementsActions.ts
@@ -28,14 +28,14 @@ import { unmountNetworkElementAsyncActionCreator } from './mountedNetworkElement
/** Represents the base action. */
export class BaseAction extends Action { }
-/** Represents an async thunk action creator to add an element to the network elements. */
+/** Represents an async thunk action creator to add an element to the network elements/nodes. */
export const addNewNetworkElementAsyncActionCreator = (element: NetworkElementConnection) => async (dispatch: Dispatch) => {
const res = await connectService.createNetworkElement({ ...element });
dispatch(updateCurrentViewAsyncAction());
dispatch(new AddSnackbarNotification({ message: `Successfully added [${element.nodeId}]`, options: { variant: 'success' } }));
};
-/** Represents an async thunk action creator to edit network element. */
+/** Represents an async thunk action creator to edit network element/node. */
export const editNetworkElementAsyncActionCreator = (element: UpdateNetworkElement) => async (dispatch: Dispatch) => {
const connectionStatus: ConnectionStatus[] = (await connectService.getNetworkElementConnectionStatus(element.id).then(ne => (ne))) || [];
const currentConnectionStatus = connectionStatus[0].status;
@@ -50,7 +50,7 @@ export const editNetworkElementAsyncActionCreator = (element: UpdateNetworkEleme
};
-/** Represents an async thunk action creator to delete an element from network elements. */
+/** Represents an async thunk action creator to delete an element from network elements/nodes. */
export const removeNetworkElementAsyncActionCreator = (element: UpdateNetworkElement) => async (dispatch: Dispatch) => {
const res = await connectService.deleteNetworkElement(element);
await dispatch(unmountNetworkElementAsyncActionCreator(element && element.id));
diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx b/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx
index a7d96d072..b240b2419 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx
@@ -65,7 +65,7 @@ class ConnectionStatusLogComponent extends React.Component<ConnectionStatusLogCo
<>
<ConnectionStatusTable stickyHeader tableId="connection-status-table" customActionButtons={[refreshConnectionStatusLogAction]} columns={[
{ property: "timestamp", title: "Timestamp", type: ColumnType.text },
- { property: "nodeId", title: "Node Name", type: ColumnType.text },
+ { property: "nodeId", title: "Node ID", type: ColumnType.text },
{ property: "status", title: "Connection Status", type: ColumnType.text },
]} idProperty="id" {...this.props.connectionStatusLogActions} {...this.props.connectionStatusLogProperties} >
</ConnectionStatusTable>
diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/editNetworkElementDialog.tsx b/sdnr/wt/odlux/apps/connectApp/src/components/editNetworkElementDialog.tsx
index 7324ffab8..5740ebda0 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/components/editNetworkElementDialog.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/components/editNetworkElementDialog.tsx
@@ -72,10 +72,10 @@ const mapDispatch = (dispatcher: IDispatcher) => ({
if (values.length === 2 && values.includes(idProperty as string) && values.includes(isRequiredProperty as string)) {
- // do not mount network element, if only isRequired is changed
+ // do not mount network element/node, if only isRequired is changed
await dispatcher.dispatch(editNetworkElementAsyncActionCreator(element));
- } else if (!(values.length === 1 && values.includes(idProperty as string))) { //do not edit or mount element, if only id was saved into object (no changes made!)
+ } else if (!(values.length === 1 && values.includes(idProperty as string))) { //do not edit or mount network element/node , if only id was saved into object (no changes made!)
await dispatcher.dispatch(editNetworkElementAsyncActionCreator(element));
await dispatcher.dispatch(mountNetworkElementAsyncActionCreator(mountElement));
}
@@ -109,35 +109,35 @@ const settings: { [key: string]: DialogSettings } = {
},
[EditNetworkElementDialogMode.AddNewNetworkElement]: {
- dialogTitle: "Add new network element",
- dialogDescription: "Add this new network element:",
- applyButtonText: "Add network element",
+ dialogTitle: "Add New Node",
+ dialogDescription: "Add this new node:",
+ applyButtonText: "Add node",
cancelButtonText: "Cancel",
enableMountIdEditor: true,
enableUsernameEditor: true,
enableExtendedEditor: true,
},
[EditNetworkElementDialogMode.MountNetworkElement]: {
- dialogTitle: "Mount network element",
- dialogDescription: "mount this network element:",
- applyButtonText: "mount network element",
+ dialogTitle: "Mount Node",
+ dialogDescription: "Mount this node:",
+ applyButtonText: "Mount node",
cancelButtonText: "Cancel",
enableMountIdEditor: false,
enableUsernameEditor: false,
enableExtendedEditor: false,
},
[EditNetworkElementDialogMode.UnmountNetworkElement]: {
- dialogTitle: "Unmount network element",
- dialogDescription: "unmount this network element:",
- applyButtonText: "Unmount network element",
+ dialogTitle: "Unmount Node",
+ dialogDescription: "Unmount this node:",
+ applyButtonText: "Unmount node",
cancelButtonText: "Cancel",
enableMountIdEditor: false,
enableUsernameEditor: false,
enableExtendedEditor: false,
},
[EditNetworkElementDialogMode.EditNetworkElement]: {
- dialogTitle: "Modify the network elements",
- dialogDescription: "Modify this network element",
+ dialogTitle: "Modify Node",
+ dialogDescription: "Modify this node",
applyButtonText: "Modify",
cancelButtonText: "Cancel",
enableMountIdEditor: false,
@@ -145,9 +145,9 @@ const settings: { [key: string]: DialogSettings } = {
enableExtendedEditor: false,
},
[EditNetworkElementDialogMode.RemoveNetworkElement]: {
- dialogTitle: "Remove network element",
- dialogDescription: "Do you really want to remove this network element:",
- applyButtonText: "Remove network element",
+ dialogTitle: "Remove Node",
+ dialogDescription: "Do you really want to remove this node?",
+ applyButtonText: "Remove node",
cancelButtonText: "Cancel",
enableMountIdEditor: false,
enableUsernameEditor: false,
@@ -176,9 +176,11 @@ class EditNetworkElementDialogComponent extends React.Component<EditNetworkEleme
constructor(props: EditNetworkElementDialogComponentProps) {
super(props);
this.handleRadioChange = this.handleRadioChange.bind(this);
+ // Initialization of state is partly overwritten by update via react getDerivedStateFromProps() below.
+ // Change initialization values in parent "networkElements.tsx" in "const emptyRequireNetworkElement"
this.state = {
nodeId: this.props.initialNetworkElement.nodeId,
- isRequired: false,
+ isRequired: this.props.initialNetworkElement.isRequired,
host: this.props.initialNetworkElement.host,
port: this.props.initialNetworkElement.port,
isNameValid: true,
@@ -222,12 +224,12 @@ class EditNetworkElementDialogComponent extends React.Component<EditNetworkEleme
<DialogContentText>
{setting.dialogDescription}
</DialogContentText>
- <TextField variant="standard" disabled={!setting.enableMountIdEditor} spellCheck={false} autoFocus margin="dense" id="name" label="Name" aria-label="name" type="text" fullWidth value={this.state.nodeId} onChange={(event) => { this.setState({ nodeId: event.target.value }); }} />
- {!this.state.isNameValid && <Typography variant="body1" color="error">Name cannot be empty.</Typography>}
- <TextField variant="standard" disabled={!setting.enableMountIdEditor} spellCheck={false} margin="dense" id="ipaddress" label="IP address" aria-label="ip adress" type="text" fullWidth value={this.state.host} onChange={(event) => { this.setState({ host: event.target.value }); }} />
- {!this.state.isHostSet && <Typography variant="body1" color="error">IP Adress cannot be empty.</Typography>}
+ <TextField variant="standard" disabled={!setting.enableMountIdEditor} spellCheck={false} autoFocus margin="dense" id="name" label="Node ID" aria-label="name" type="text" fullWidth value={this.state.nodeId} onChange={(event) => { this.setState({ nodeId: event.target.value }); }} />
+ {!this.state.isNameValid && <Typography variant="body1" color="error">Node ID cannot be empty.</Typography>}
+ <TextField variant="standard" disabled={!setting.enableMountIdEditor} spellCheck={false} margin="dense" id="ipaddress" label="Host/IP address" aria-label="ip adress" type="text" fullWidth value={this.state.host} onChange={(event) => { this.setState({ host: event.target.value }); }} />
+ {!this.state.isHostSet && <Typography variant="body1" color="error">Host/IP address cannot be empty.</Typography>}
- <TextField variant="standard" disabled={!setting.enableMountIdEditor} spellCheck={false} margin="dense" id="netconfport" label="NetConf port" aria-label="netconf port" type="number" fullWidth value={this.state.port.toString()} onChange={(event) => { this.setState({ port: +event.target.value }); }} />
+ <TextField variant="standard" disabled={!setting.enableMountIdEditor} spellCheck={false} margin="dense" id="netconfport" label="NETCONF port" aria-label="netconf port" type="number" fullWidth value={this.state.port.toString()} onChange={(event) => { this.setState({ port: +event.target.value }); }} />
{setting.enableUsernameEditor && <TextField variant="standard" disabled={!setting.enableUsernameEditor} spellCheck={false} margin="dense" id="username" label="Username" aria-label="username" type="text" fullWidth value={this.state.username} onChange={(event) => { this.setState({ username: event.target.value }); }} /> || null}
{setting.enableUsernameEditor &&
diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/infoNetworkElementDialog.tsx b/sdnr/wt/odlux/apps/connectApp/src/components/infoNetworkElementDialog.tsx
index 5514fa5f8..b0c7840be 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/components/infoNetworkElementDialog.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/components/infoNetworkElementDialog.tsx
@@ -51,7 +51,7 @@
cancelButtonText: "",
},
[InfoNetworkElementDialogMode.InfoNetworkElement]: {
- dialogTitle: "Yang capabilities of the network element",
+ dialogTitle: "YANG Capabilities of the Node",
dialogDescription: "",
cancelButtonText: "OK",
}
@@ -88,7 +88,7 @@
const indexRevision = capabilty.indexOf("revision=");
const indexModule = capabilty.indexOf(")", indexRevision);
if (indexRevision > 0 && indexModule > 0) {
- let moduleName = capabilty.substr(indexModule + 1);
+ let moduleName = capabilty.substring(indexModule + 1);
let ModuleFeaturesList;
for(let index = 0; index < yangFeatures.length; index++) {
if(yangFeatures[index].name == moduleName) {
@@ -101,7 +101,7 @@
yangCapabilities.push({
module: moduleName,
- revision: capabilty.substr(indexRevision + 9, 10),
+ revision: capabilty.substring(indexRevision + 9, indexRevision + 19),
features: featuresList
});
}
@@ -112,14 +112,14 @@
return (
<>
<Dialog open={this.props.mode !== InfoNetworkElementDialogMode.None} >
- <DialogTitle id="form-dialog-title">{setting.dialogTitle + ' - ' + this.state.nodeId}</DialogTitle>
+ <DialogTitle id="form-dialog-title">{`${setting.dialogTitle}: "${this.state.nodeId}"`}</DialogTitle>
<InfoElementTable stickyHeader isPopup tableId="info-element-table" asynchronus columns={[
- { property: "module", title: "Module", type: ColumnType.text, width:900 },
+ { property: "module", title: "YANG Capability", type: ColumnType.text, width:900 },
{
property: "revision", title: "Revision", type: ColumnType.custom, customControl: ({ rowData }) => {
return (
<div>
- <a href={'/yang-schema/' + rowData.module + '/' + rowData.revision} target="_blank" > {rowData.revision} </a>
+ <a href={`/yang-schema/${rowData.module}/${rowData.revision}`} target="_blank" > {rowData.revision} </a>
</div>
)
}
diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/networkElements.tsx b/sdnr/wt/odlux/apps/connectApp/src/components/networkElements.tsx
index a17a247d2..67fdef69d 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/components/networkElements.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/components/networkElements.tsx
@@ -109,7 +109,7 @@ type NetworkElementsListComponentState = {
elementInfoFeature: ModuleSet | null
}
-const emptyRequireNetworkElement: NetworkElementConnection = { id: "", nodeId: "", host: "", port: 0, status: "Disconnected", isRequired: false };
+const emptyRequireNetworkElement: NetworkElementConnection = { id: "", nodeId: "", host: "", port: 830, status: "Disconnected", isRequired: true };
let initialSorted = false;
const NetworkElementTable = MaterialTable as MaterialTableCtorType<NetworkElementConnection>;
@@ -138,7 +138,7 @@ export class NetworkElementsListComponent extends React.Component<NetworkElement
<MenuItemExt aria-label={"mount-button"} onClick={event => this.onOpenMountdNetworkElementsDialog(event, rowData)} disabled={!canMount} ><LinkIcon /><Typography>Mount</Typography></MenuItemExt>,
<MenuItemExt aria-label={"unmount-button"} onClick={event => this.onOpenUnmountdNetworkElementsDialog(event, rowData)} disabled={!canMount} ><LinkOffIcon /><Typography>Unmount</Typography></MenuItemExt>,
<Divider />,
- <MenuItem aria-label={"info-button"} onClick={event => this.onOpenInfoNetworkElementDialog(event, rowData)} disabled={rowData.status === "Connecting" || rowData.status === "Disconnected"} ><Info /><Typography>Info</Typography></MenuItem>,
+ <MenuItem aria-label={"info-button"} onClick={event => this.onOpenInfoNetworkElementDialog(event, rowData)} disabled={rowData.status !== "Connected"} ><Info /><Typography>Info</Typography></MenuItem>,
<MenuItem aria-label={"edit-button"} onClick={event => this.onOpenEditNetworkElementDialog(event, rowData)}><EditIcon /><Typography>Edit</Typography></MenuItem>,
<MenuItem aria-label={"remove-button"} onClick={event => this.onOpenRemoveNetworkElementDialog(event, rowData)} ><RemoveIcon /><Typography>Remove</Typography></MenuItem>,
<Divider />,
@@ -177,7 +177,7 @@ export class NetworkElementsListComponent extends React.Component<NetworkElement
const canAdd = true;
const addRequireNetworkElementAction = {
- icon: AddIcon, tooltip: 'Add', ariaLabel: "add-element", onClick: () => {
+ icon: AddIcon, tooltip: 'Add node', ariaLabel: "add-element", onClick: () => {
this.setState({
networkElementEditorMode: EditNetworkElementDialogMode.AddNewNetworkElement,
networkElementToEdit: emptyRequireNetworkElement,
@@ -186,7 +186,7 @@ export class NetworkElementsListComponent extends React.Component<NetworkElement
};
const refreshNetworkElementsAction = {
- icon: Refresh, tooltip: 'Refresh Network Elements table', ariaLabel: 'refresh', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh table', ariaLabel: 'refresh', onClick: () => {
this.setState({
refreshNetworkElementsEditorMode: RefreshNetworkElementsDialogMode.RefreshNetworkElementsTable
});
@@ -195,20 +195,20 @@ export class NetworkElementsListComponent extends React.Component<NetworkElement
return <>
<NetworkElementTable stickyHeader tableId="network-element-table" customActionButtons={[refreshNetworkElementsAction, ...(canAdd ? [addRequireNetworkElementAction] : [])]} columns={[
- { property: "nodeId", title: "Node Name", type: ColumnType.text },
- { property: "isRequired", title: "Required", type: ColumnType.boolean },
+ { property: "nodeId", title: "Node ID", type: ColumnType.text },
{ property: "status", title: "Connection Status", type: ColumnType.text, width:'15%' },
{ property: "host", title: "Host", type: ColumnType.text },
{ property: "port", title: "Port", type: ColumnType.numeric },
- { property: "coreModelCapability", title: "Core Model", type: ColumnType.text },
- { property: "deviceType", title: "Device Type", type: ColumnType.text },
- { property: "deviceFunction", title: "Device Function", type: ColumnType.text, width: '15%' }
+ { property: "isRequired", title: "Required", type: ColumnType.boolean },
+ { property: "deviceType", title: "Type", type: ColumnType.text },
+ // { property: "coreModelCapability", title: "Core Model", type: ColumnType.text },
+ { property: "deviceFunction", title: "Function", type: ColumnType.text, width: '25%' }
]} idProperty="id" {...this.props.networkElementsActions} {...this.props.networkElementsProperties} asynchronus createContextMenu={rowData => {
return this.getContextMenu(rowData);
}} >
</NetworkElementTable>
- <EditNetworkElementDialog
+ <EditNetworkElementDialog
initialNetworkElement={networkElementToEdit}
mode={this.state.networkElementEditorMode}
onClose={this.onCloseEditNetworkElementDialog}
diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/refreshNetworkElementsDialog.tsx b/sdnr/wt/odlux/apps/connectApp/src/components/refreshNetworkElementsDialog.tsx
index 27288faa6..abf593882 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/components/refreshNetworkElementsDialog.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/components/refreshNetworkElementsDialog.tsx
@@ -59,7 +59,7 @@ const settings: { [key: string]: DialogSettings } = {
enableExtendedEditor: false,
},
[RefreshNetworkElementsDialogMode.RefreshNetworkElementsTable]: {
- dialogTitle: "Do you want to refresh the Network Elements table?",
+ dialogTitle: "Do you want to refresh the nodes table?",
dialogDescription: "",
applyButtonText: "Yes",
cancelButtonText: "Cancel",
diff --git a/sdnr/wt/odlux/apps/connectApp/src/handlers/connectAppRootHandler.ts b/sdnr/wt/odlux/apps/connectApp/src/handlers/connectAppRootHandler.ts
index dbb9b2c04..6a1825224 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/handlers/connectAppRootHandler.ts
+++ b/sdnr/wt/odlux/apps/connectApp/src/handlers/connectAppRootHandler.ts
@@ -24,7 +24,6 @@ import { IInfoNetworkElementsState, infoNetworkElementsActionHandler, IInfoNetwo
import { SetPanelAction, AddWebUriList, RemoveWebUri, SetWeburiSearchBusy } from '../actions/commonNetworkElementsActions';
import { PanelId } from '../models/panelId';
import { guiCutThrough } from '../models/guiCutTrough';
-import { connectionStatusCountHandler, IConnectionStatusCount } from './connectionStatusCountHandler';
import { availableTlsKeysActionHandler, IAvailableTlsKeysState } from './tlsKeyHandler';
export interface IConnectAppStoreState {
@@ -34,7 +33,6 @@ export interface IConnectAppStoreState {
elementInfo: IInfoNetworkElementsState;
elementFeatureInfo: IInfoNetworkElementFeaturesState;
guiCutThrough: guiCutThroughState;
- connectionStatusCount: IConnectionStatusCount;
availableTlsKeys: IAvailableTlsKeysState
}
@@ -94,7 +92,6 @@ const actionHandlers = {
elementInfo: infoNetworkElementsActionHandler,
elementFeatureInfo: infoNetworkElementFeaturesActionHandler,
guiCutThrough: guiCutThroughHandler,
- connectionStatusCount: connectionStatusCountHandler,
availableTlsKeys: availableTlsKeysActionHandler
};
diff --git a/sdnr/wt/odlux/apps/connectApp/src/handlers/connectionStatusCountHandler.ts b/sdnr/wt/odlux/apps/connectApp/src/handlers/connectionStatusCountHandler.ts
deleted file mode 100644
index 219a09617..000000000
--- a/sdnr/wt/odlux/apps/connectApp/src/handlers/connectionStatusCountHandler.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt odlux
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.
- * ============LICENSE_END==========================================================================
- */
-import { IActionHandler } from "../../../../framework/src/flux/action";
-import { SetConnectionStatusCountAction } from "../actions/connectionStatusCountActions";
-
-export interface IConnectionStatusCount {
- Connected: number,
- Connecting: number,
- Disconnected: number,
- Mounted: number,
- UnableToConnect: number,
- Undefined: number,
- Unmounted: number,
- total: number,
- isLoadingConnectionStatusChart: boolean
-}
-
-const connectionStatusCountInit: IConnectionStatusCount = {
- Connected: 0,
- Connecting: 0,
- Disconnected: 0,
- Mounted: 0,
- UnableToConnect: 0,
- Undefined: 0,
- Unmounted: 0,
- total: 0,
- isLoadingConnectionStatusChart: false
-};
-
-export const connectionStatusCountHandler: IActionHandler<IConnectionStatusCount> = (state = connectionStatusCountInit, action) => {
- if (action instanceof SetConnectionStatusCountAction) {
- state = {
- Connected: action.ConnectedCount,
- Connecting: action.ConnectingCount,
- Disconnected: action.DisconnectedCount,
- Mounted: action.MountedCount,
- UnableToConnect: action.UnableToConnectCount,
- Undefined: action.UndefinedCount,
- Unmounted: action.UnmountedCount,
- total: action.totalCount,
- isLoadingConnectionStatusChart: action.isLoadingConnectionStatusChart
- }
- }
-
- return state;
-} \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/connectApp/src/models/connectionStatusCount.ts b/sdnr/wt/odlux/apps/connectApp/src/models/connectionStatusCount.ts
deleted file mode 100644
index 125a6e369..000000000
--- a/sdnr/wt/odlux/apps/connectApp/src/models/connectionStatusCount.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt odlux
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
- * =================================================================================================
- * Licensed under the Apache License, Version 2.number (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.number
- *
- * 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.
- * ============LICENSE_END==========================================================================
- */
-
-export type ConnectionStatusCountReturnType = {
- Connected: number,
- Connecting: number,
- Disconnected: number,
- Mounted: number,
- UnableToConnect: number,
- Undefined: number,
- Unmounted: number,
- total: number
-};
-
-export type ConnectionStatusCountType = {
- Connected: number,
- Connecting: number,
- Disconnected: number,
- Mounted: number,
- UnableToConnect: number,
- Undefined: number,
- Unmounted: number,
- total: number
-};
-
-export type ConnectionStatusCount = {
- 'network-element-connections': ConnectionStatusCountReturnType
-};
diff --git a/sdnr/wt/odlux/apps/connectApp/src/pluginConnect.tsx b/sdnr/wt/odlux/apps/connectApp/src/pluginConnect.tsx
index 83763485b..2a9a46d2b 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/pluginConnect.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/pluginConnect.tsx
@@ -27,13 +27,12 @@ import { IApplicationStoreState } from "../../../framework/src/store/application
import connect, { Connect, IDispatcher } from '../../../framework/src/flux/connect';
import { findWebUrisForGuiCutThroughAsyncAction, updateCurrentViewAsyncAction, SetPanelAction } from './actions/commonNetworkElementsActions';
-import { refreshConnectionStatusCountAsyncAction } from './actions/connectionStatusCountActions';
import { createNetworkElementsActions, createNetworkElementsProperties, networkElementsReloadAction } from './handlers/networkElementsHandler';
import connectAppRootHandler from './handlers/connectAppRootHandler';
import ConnectApplication from './views/connectView';
import { PanelId } from "./models/panelId";
import { NetworkElementsList } from './components/networkElements';
-import DashboardHome from "./components/dashboardHome";
+
let currentStatus: string | undefined = undefined;
let refreshInterval: ReturnType<typeof window.setInterval> | null = null;
@@ -84,7 +83,6 @@ export function register() {
icon: faPlug,
rootComponent: App,
rootActionHandler: connectAppRootHandler,
- dashbaordElement: DashboardHome,
menuEntry: "Connect"
});
@@ -92,9 +90,9 @@ export function register() {
subscribe<IFormatedMessage>(["object-creation-notification", "object-deletion-notification", "attribute-value-changed-notification"], (msg => {
const store = applicationApi.applicationStore;
if (msg && msg.type.type === "object-creation-notification" && store) {
- store.dispatch(new AddSnackbarNotification({ message: `Adding network element [${msg.data['object-id-ref']}]`, options: { variant: 'info' } }));
+ store.dispatch(new AddSnackbarNotification({ message: `Adding node [${msg.data['object-id-ref']}]`, options: { variant: 'info' } }));
} else if (msg && (msg.type.type === "object-deletion-notification" || msg.type.type === "attribute-value-changed-notification") && store) {
- store.dispatch(new AddSnackbarNotification({ message: `Updating network element [${msg.data['object-id-ref']}]`, options: { variant: 'info' } }));
+ store.dispatch(new AddSnackbarNotification({ message: `Updating node [${msg.data['object-id-ref']}]`, options: { variant: 'info' } }));
}
if (store) {
store.dispatch(updateCurrentViewAsyncAction() as any).then(() => {
@@ -109,29 +107,4 @@ export function register() {
store.dispatch(networkElementsReloadAction);
});
- applicationApi.applicationStoreInitialized.then(store => {
- store.dispatch(refreshConnectionStatusCountAsyncAction);
- });
-
-
- applicationApi.loginEvent.addHandler(e=>{
- refreshInterval = startRefreshInterval() as any;
- })
-
- applicationApi.logoutEvent.addHandler(e=>{
-
- applicationApi.applicationStoreInitialized.then(store => {
- clearInterval(refreshInterval!);
- });
- })
-
- const startRefreshInterval =() =>{
- const refresh = window.setInterval(() => {
- applicationApi.applicationStoreInitialized.then(store => {
- store.dispatch(refreshConnectionStatusCountAsyncAction);
- });
- }, 15000);
-
- return refresh;
- }
} \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/connectApp/src/services/connectService.ts b/sdnr/wt/odlux/apps/connectApp/src/services/connectService.ts
index 427acd3ec..08cc58056 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/services/connectService.ts
+++ b/sdnr/wt/odlux/apps/connectApp/src/services/connectService.ts
@@ -26,7 +26,7 @@ import { FeatureTopology, Topology, TopologyNode, Module } from '../models/topol
import { guiCutThrough } from '../models/guiCutTrough';
/**
-* Represents a web api accessor service for all Network Elements actions.
+* Represents a web api accessor service for all network element/node actions.
*/
class ConnectService {
public getNetworkElementUri = (nodeId: string) => '/rests/data/network-topology:network-topology/topology=topology-netconf/node=' + nodeId;
@@ -35,7 +35,7 @@ class ConnectService {
public getNetworkElementYangLibraryFeature = (nodeId: string) => '/rests/data/network-topology:network-topology/topology=topology-netconf/node=' + nodeId + '/yang-ext:mount/ietf-yang-library:yang-library?content=nonconfig'
/**
- * Inserts a network elements.
+ * Inserts a network element/node.
*/
public async createNetworkElement(element: NetworkElementConnection): Promise<NetworkElementConnection | null> {
const path = this.getNetworkElementConnectDataProviderUri("create");
@@ -46,7 +46,7 @@ class ConnectService {
}
/**
- * Updates a network element.
+ * Updates a network element/node.
*/
public async updateNetworkElement(element: UpdateNetworkElement): Promise<NetworkElementConnection | null> {
const path = this.getNetworkElementConnectDataProviderUri("update");
@@ -57,7 +57,7 @@ class ConnectService {
}
/**
- * Deletes a network element.
+ * Deletes a network element/node.
*/
public async deleteNetworkElement(element: UpdateNetworkElement): Promise<NetworkElementConnection | null> {
const query = {
@@ -70,7 +70,7 @@ class ConnectService {
return result || null;
}
- /** Mounts network element. */
+ /** Mounts network element/node */
public async mountNetworkElement(networkElement: NetworkElementConnection): Promise<boolean> {
const path = this.getNetworkElementUri(networkElement.nodeId);
const mountXml = [
@@ -152,7 +152,7 @@ class ConnectService {
}
};
- /** Yang capabilities of the selected network elements. */
+ /** Yang capabilities of the selected network element/node */
public async infoNetworkElement(nodeId: string): Promise<TopologyNode | null> {
const path = this.getNetworkElementUri(nodeId);
const topologyRequestPomise = requestRest<Topology>(path, { method: "GET" });
@@ -163,7 +163,7 @@ class ConnectService {
}
- /** Yang features of the selected network element module. */
+ /** Yang features of the selected network element/node module */
public async infoNetworkElementFeatures(nodeId: string): Promise<Module[] | null | undefined> {
const path = this.getNetworkElementYangLibraryFeature(nodeId);
const topologyRequestPomise = requestRest<FeatureTopology>(path, { method: "GET" });
@@ -180,7 +180,7 @@ class ConnectService {
/**
- * Get the connection state of the network element.
+ * Get the connection state of the network element/ node
*/
public async getNetworkElementConnectionStatus(element: string): Promise<(ConnectionStatus)[] | null> {
const path = `/rests/operations/data-provider:read-network-element-connection-list`;
diff --git a/sdnr/wt/odlux/apps/connectApp/src/services/connectionStatusCountService.ts b/sdnr/wt/odlux/apps/connectApp/src/services/connectionStatusCountService.ts
deleted file mode 100644
index 519c965c4..000000000
--- a/sdnr/wt/odlux/apps/connectApp/src/services/connectionStatusCountService.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt odlux
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.
- * ============LICENSE_END==========================================================================
- */
-
-import { requestRest } from "../../../../framework/src/services/restService";
-import { Result } from "../../../../framework/src/models/elasticSearch";
-import { ConnectionStatusCountType, ConnectionStatusCount } from "../models/connectionStatusCount";
-
-
-
-export const getConnectionStatusCountStateFromDatabase = async (): Promise<ConnectionStatusCountType | null> => {
- const path = 'rests/operations/data-provider:read-status';
- const result = await requestRest<Result<ConnectionStatusCount>>(path, { method: "POST" });
- let connectionStatusCountType: ConnectionStatusCountType = {
- Connected: 0,
- Connecting: 0,
- Disconnected: 0,
- Mounted: 0,
- UnableToConnect: 0,
- Undefined: 0,
- Unmounted: 0,
- total: 0
- }
- let connectionStatusCount: ConnectionStatusCount[] | null = null;
-
- if (result && result["data-provider:output"] && result["data-provider:output"].data) {
- connectionStatusCount = result["data-provider:output"].data;
- connectionStatusCountType = {
- Connected: connectionStatusCount[0]["network-element-connections"].Connected,
- Connecting: connectionStatusCount[0]["network-element-connections"].Connecting,
- Disconnected: connectionStatusCount[0]["network-element-connections"].Disconnected,
- Mounted: connectionStatusCount[0]["network-element-connections"].Mounted,
- UnableToConnect: connectionStatusCount[0]["network-element-connections"].UnableToConnect,
- Undefined: connectionStatusCount[0]["network-element-connections"].Undefined,
- Unmounted: connectionStatusCount[0]["network-element-connections"].Unmounted,
- total: connectionStatusCount[0]["network-element-connections"].total,
- }
- }
- return connectionStatusCountType;
-}
diff --git a/sdnr/wt/odlux/apps/connectApp/src/views/connectView.tsx b/sdnr/wt/odlux/apps/connectApp/src/views/connectView.tsx
index e99b6af8e..082839718 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/views/connectView.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/views/connectView.tsx
@@ -107,7 +107,7 @@ class ConnectApplicationComponent extends React.Component<ConnectApplicationComp
<>
<AppBar enableColorOnDark position="static">
<Tabs indicatorColor="secondary" textColor="inherit" value={activePanelId} onChange={this.onHandleTabChange} aria-label="connect-app-tabs">
- <Tab aria-label="network-elements-list-tab" label="Network Elements" value="NetworkElements" />
+ <Tab aria-label="network-elements-list-tab" label="NODES" value="NetworkElements" />
<Tab aria-label="connection-status-log-tab" label="Connection Status Log" value="ConnectionStatusLog" />
</Tabs>
</AppBar>
diff --git a/sdnr/wt/odlux/apps/connectApp/webpack.config.js b/sdnr/wt/odlux/apps/connectApp/webpack.config.js
index b283e426c..ff76904c5 100644
--- a/sdnr/wt/odlux/apps/connectApp/webpack.config.js
+++ b/sdnr/wt/odlux/apps/connectApp/webpack.config.js
@@ -154,6 +154,14 @@ module.exports = (env) => {
target: "http://sdnr:8181",
secure: false
},
+ "/userdata": {
+ target: "http://sdnr:8181",
+ secure: false
+ },
+ "/userdata/": {
+ target: "http://sdnr:8181",
+ secure: false
+ },
"/help/": {
target: "http://sdnr:8181",
secure: false
diff --git a/sdnr/wt/odlux/apps/faultApp/src/actions/partialUpdatesAction.ts b/sdnr/wt/odlux/apps/faultApp/src/actions/partialUpdatesAction.ts
deleted file mode 100644
index 198976796..000000000
--- a/sdnr/wt/odlux/apps/faultApp/src/actions/partialUpdatesAction.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt odlux
- * =================================================================================================
- * Copyright (C) 2020 highstreet technologies GmbH 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.
- * ============LICENSE_END==========================================================================
- */
-
-import { Action } from "../../../../framework/src/flux/action";
-
-export class SetPartialUpdatesAction extends Action {
- constructor(public isActive: boolean) {
- super();
- }
-} \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts b/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts
index c50c08ef2..54fea6a5f 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts
@@ -21,15 +21,18 @@ import { Dispatch } from '../../../../framework/src/flux/store';
export class SetFaultStatusAction extends FaultApplicationBaseAction {
- constructor (public criticalFaults: number, public majorFaults: number, public minorFaults: number, public warnings: number, public isLoadingAlarmStatusChart: boolean) {
+ constructor(public criticalFaults: number, public majorFaults: number, public minorFaults: number, public warnings: number,
+ public isLoadingAlarmStatusChart: boolean, public ConnectedCount: number, public ConnectingCount: number, public DisconnectedCount: number,
+ public MountedCount: number, public UnableToConnectCount: number, public UndefinedCount: number, public UnmountedCount: number,
+ public totalCount: number, public isLoadingConnectionStatusChart: boolean) {
super();
}
}
export const refreshFaultStatusAsyncAction = async (dispatch: Dispatch) => {
-
- dispatch(new SetFaultStatusAction(0, 0, 0, 0, true));
+
+ dispatch(new SetFaultStatusAction(0, 0, 0, 0, true, 0, 0, 0, 0, 0, 0, 0, 0, true));
const result = await getFaultStateFromDatabase().catch(_ => null);
if (result) {
const statusAction = new SetFaultStatusAction(
@@ -37,12 +40,21 @@ export const refreshFaultStatusAsyncAction = async (dispatch: Dispatch) => {
result["Major"] || 0,
result["Minor"] || 0,
result["Warning"] || 0,
+ false,
+ result["Connected"] || 0,
+ result["Connecting"] || 0,
+ result["Disconnected"] || 0,
+ result["Mounted"] || 0,
+ result["UnableToConnect"] || 0,
+ result["Undefined"] || 0,
+ result["Unmounted"] || 0,
+ result["total"] || 0,
false
);
dispatch(statusAction);
return;
}
else {
- dispatch(new SetFaultStatusAction(0, 0, 0, 0, false));
+ dispatch(new SetFaultStatusAction(0, 0, 0, 0, false, 0, 0, 0, 0, 0, 0, 0, 0, false));
}
}
diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/dashboardHome.tsx b/sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx
index 683c59623..a81705965 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/components/dashboardHome.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx
@@ -47,7 +47,6 @@ let alarmStatusDataLoad: number[] = [0, 0, 0, 0];
let alarmTotalCount = 0;
const mapProps = (state: IApplicationStoreState) => ({
- connectionStatusCount: state.connect.connectionStatusCount,
alarmStatus: state.fault.faultStatus
});
@@ -67,15 +66,16 @@ class DashboardHome extends React.Component<HomeComponentProps> {
render(): JSX.Element {
const { classes } = this.props;
- if (!this.props.connectionStatusCount.isLoadingConnectionStatusChart) {
+ if (!this.props.alarmStatus.isLoadingConnectionStatusChart) {
connectionStatusDataLoad = [
- this.props.connectionStatusCount.Connected,
- this.props.connectionStatusCount.Connecting,
- this.props.connectionStatusCount.Disconnected,
- this.props.connectionStatusCount.UnableToConnect
+ this.props.alarmStatus.Connected,
+ this.props.alarmStatus.Connecting,
+ this.props.alarmStatus.Disconnected,
+ this.props.alarmStatus.UnableToConnect,
+ this.props.alarmStatus.Undefined
];
- connectionTotalCount = this.props.connectionStatusCount.Connected + this.props.connectionStatusCount.Connecting
- + this.props.connectionStatusCount.Disconnected + this.props.connectionStatusCount.UnableToConnect;
+ connectionTotalCount = this.props.alarmStatus.Connected + this.props.alarmStatus.Connecting
+ + this.props.alarmStatus.Disconnected + this.props.alarmStatus.UnableToConnect + this.props.alarmStatus.Undefined;
}
@@ -92,14 +92,22 @@ class DashboardHome extends React.Component<HomeComponentProps> {
/** Available Network Connection Status chart data */
const connectionStatusData = {
- labels: ['Connected', 'Connecting', 'Disconnected', 'UnableToConnect'],
+ labels: [
+ 'Connected: ' + this.props.alarmStatus.Connected,
+ 'Connecting: ' + this.props.alarmStatus.Connecting,
+ 'Disconnected: ' + this.props.alarmStatus.Disconnected,
+ 'UnableToConnect: ' + this.props.alarmStatus.UnableToConnect,
+ 'Undefined: ' + this.props.alarmStatus.Undefined
+ ],
datasets: [{
+ labels: ['Connected', 'Connecting', 'Disconnected', 'UnableToConnect', 'Undefined'],
data: connectionStatusDataLoad,
backgroundColor: [
'rgb(0, 153, 51)',
'rgb(255, 102, 0)',
'rgb(191, 191, 191)',
- 'rgb(191, 191, 191)'
+ 'rgb(191, 191, 191)',
+ 'rgb(242, 240, 240)'
]
}]
};
@@ -139,8 +147,29 @@ class DashboardHome extends React.Component<HomeComponentProps> {
};
/** Connection status options */
- let labels: String[] = ['Connected', 'Connecting', 'Disconnected', 'UnableToConnect'];
+ let labels: String[] = ['Connected', 'Connecting', 'Disconnected', 'UnableToConnect', 'Undefined'];
const connectionStatusOptions = {
+ tooltips: {
+ callbacks: {
+ label: (tooltipItem: any, data: any) => {
+ let label =
+ (data.datasets[tooltipItem.datasetIndex].labels &&
+ data.datasets[tooltipItem.datasetIndex].labels[
+ tooltipItem.index
+ ]) ||
+ data.labels[tooltipItem.index] ||
+ "";
+ if (label) {
+ label += ": ";
+ }
+ label +=
+ data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] +
+ (data.datasets[tooltipItem.datasetIndex].labelSuffix || "");
+
+ return label;
+ }
+ }
+ },
responsive: true,
maintainAspectRatio: false,
animation: {
@@ -199,12 +228,13 @@ class DashboardHome extends React.Component<HomeComponentProps> {
/** Alarm status Data */
const alarmStatusData = {
labels: [
- 'Critical',
- 'Major',
- 'Minor',
- 'Warning'
+ 'Critical : ' + this.props.alarmStatus.critical,
+ 'Major : ' + this.props.alarmStatus.major,
+ 'Minor : ' + this.props.alarmStatus.minor,
+ 'Warning : ' + this.props.alarmStatus.warning
],
datasets: [{
+ labels: ['Critical', 'Major', 'Minor', 'Warning'],
data: alarmStatusDataLoad,
backgroundColor: [
'rgb(240, 25, 10)',
@@ -229,6 +259,27 @@ class DashboardHome extends React.Component<HomeComponentProps> {
/** Alarm status Options */
let alarmLabels: String[] = ['Critical', 'Major', 'Minor', 'Warning'];
const alarmStatusOptions = {
+ tooltips: {
+ callbacks: {
+ label: (tooltipItem: any, data: any) => {
+ let label =
+ (data.datasets[tooltipItem.datasetIndex].labels &&
+ data.datasets[tooltipItem.datasetIndex].labels[
+ tooltipItem.index
+ ]) ||
+ data.labels[tooltipItem.index] ||
+ "";
+ if (label) {
+ label += ": ";
+ }
+ label +=
+ data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] +
+ (data.datasets[tooltipItem.datasetIndex].labelSuffix || "");
+
+ return label;
+ }
+ }
+ },
responsive: true,
maintainAspectRatio: false,
animation: {
@@ -242,7 +293,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
},
onClick: (event: MouseEvent, item: any) => {
if (item[0]) {
- let severity = alarmLabels[item[0].index] + '';
+ let severity = alarmLabels[item[0]._index] + '';
this.props.navigateToApplication("fault", '/alarmStatus/' + severity);
}
},
@@ -286,7 +337,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
return (
<>
<div style={scrollbar} >
- <h1>Welcome to ODLUX</h1>
+ <h1 aria-label="welcome-to-odlux">Welcome to ODLUX</h1>
<div style={{ width: '50%', float: 'left' }}>
{this.checkElementsAreLoaded() ?
this.checkConnectionStatus() && connectionTotalCount != 0 ?
@@ -351,12 +402,12 @@ class DashboardHome extends React.Component<HomeComponentProps> {
/** Check if connection status data available */
public checkConnectionStatus = () => {
- let statusCount = this.props.connectionStatusCount;
+ let statusCount = this.props.alarmStatus;
if (statusCount.isLoadingConnectionStatusChart) {
return true;
}
if (statusCount.Connected == 0 && statusCount.Connecting == 0 && statusCount.Disconnected == 0
- && statusCount.UnableToConnect == 0) {
+ && statusCount.UnableToConnect == 0 && statusCount.Undefined == 0) {
return false;
} else {
return true;
@@ -365,7 +416,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
/** Check if connection status chart data is loaded */
public checkElementsAreLoaded = () => {
- let isLoadingCheck = this.props.connectionStatusCount;
+ let isLoadingCheck = this.props.alarmStatus;
if (connectionStatusinitialLoad && !isLoadingCheck.isLoadingConnectionStatusChart) {
if (this.checkConnectionStatus()) {
connectionStatusinitialLoad = false;
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts
index e1fceb4be..6fa95b685 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts
@@ -23,7 +23,16 @@ export interface IFaultStatus {
major: number,
minor: number,
warning: number,
- isLoadingAlarmStatusChart: boolean
+ isLoadingAlarmStatusChart: boolean,
+ Connected: number,
+ Connecting: number,
+ Disconnected: number,
+ Mounted: number,
+ UnableToConnect: number,
+ Undefined: number,
+ Unmounted: number,
+ total: number,
+ isLoadingConnectionStatusChart: boolean
}
const faultStatusInit: IFaultStatus = {
@@ -31,7 +40,16 @@ const faultStatusInit: IFaultStatus = {
major: 0,
minor: 0,
warning: 0,
- isLoadingAlarmStatusChart: false
+ isLoadingAlarmStatusChart: false,
+ Connected: 0,
+ Connecting: 0,
+ Disconnected: 0,
+ Mounted: 0,
+ UnableToConnect: 0,
+ Undefined: 0,
+ Unmounted: 0,
+ total: 0,
+ isLoadingConnectionStatusChart: false
};
export const faultStatusHandler: IActionHandler<IFaultStatus> = (state = faultStatusInit, action) => {
@@ -41,7 +59,16 @@ export const faultStatusHandler: IActionHandler<IFaultStatus> = (state = faultSt
major: action.majorFaults,
minor: action.minorFaults,
warning: action.warnings,
- isLoadingAlarmStatusChart: action.isLoadingAlarmStatusChart
+ isLoadingAlarmStatusChart: action.isLoadingAlarmStatusChart,
+ Connected: action.ConnectedCount,
+ Connecting: action.ConnectingCount,
+ Disconnected: action.DisconnectedCount,
+ Mounted: action.MountedCount,
+ UnableToConnect: action.UnableToConnectCount,
+ Undefined: action.UndefinedCount,
+ Unmounted: action.UnmountedCount,
+ total: action.totalCount,
+ isLoadingConnectionStatusChart: action.isLoadingConnectionStatusChart
}
}
diff --git a/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts b/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts
index 2ba8da01d..5f38e5fe9 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts
@@ -61,18 +61,35 @@ export type FaultsReturnType = {
criticals: number,
majors: number,
minors: number,
- warnings: number
+ warnings: number,
+ Connected: number,
+ Connecting: number,
+ Disconnected: number,
+ Mounted: number,
+ UnableToConnect: number,
+ Undefined: number,
+ Unmounted: number,
+ total: number
};
export type FaultType = {
Critical: number,
Major: number,
Minor: number,
- Warning: number
+ Warning: number,
+ Connected: number,
+ Connecting: number,
+ Disconnected: number,
+ Mounted: number,
+ UnableToConnect: number,
+ Undefined: number,
+ Unmounted: number,
+ total: number
};
export type Faults = {
- faults: FaultsReturnType
+ faults: FaultsReturnType,
+ 'network-element-connections': FaultsReturnType
};
export type DeletedStuckAlarms = {
diff --git a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
index 0c5fdde27..ff901b097 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
@@ -41,6 +41,8 @@ import { createCurrentProblemsProperties, createCurrentProblemsActions, currentP
import { FaultStatus } from "./components/faultStatus";
import { refreshFaultStatusAsyncAction, SetFaultStatusAction } from "./actions/statusActions";
+import DashboardHome from "./components/dashboardHome";
+
let currentMountId: string | undefined = undefined;
let currentSeverity: string | undefined = undefined;
let refreshInterval: ReturnType<typeof window.setInterval> | null = null;
@@ -113,6 +115,7 @@ export function register() {
rootComponent: App,
rootActionHandler: faultAppRootHandler,
statusBarElement: FaultStatus,
+ dashbaordElement: DashboardHome,
menuEntry: "Fault"
});
@@ -149,14 +152,14 @@ export function register() {
applicationApi.logoutEvent.addHandler(e=>{
applicationApi.applicationStoreInitialized.then(store => {
- store.dispatch(new SetFaultStatusAction(0, 0, 0, 0, false));
+ store.dispatch(new SetFaultStatusAction(0, 0, 0, 0, false, 0, 0, 0, 0, 0, 0, 0, 0, false));
clearInterval(refreshInterval!);
});
})
- function startRefreshInterval(){
+ function startRefreshInterval() {
const refreshFaultStatus = window.setInterval(() => {
applicationApi.applicationStoreInitialized.then(store => {
diff --git a/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts b/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts
index 663def086..880ed7715 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts
@@ -28,7 +28,15 @@ export const getFaultStateFromDatabase = async (): Promise<FaultType | null> =>
Critical: 0,
Major: 0,
Minor: 0,
- Warning: 0
+ Warning: 0,
+ Connected: 0,
+ Connecting: 0,
+ Disconnected: 0,
+ Mounted: 0,
+ UnableToConnect: 0,
+ Undefined: 0,
+ Unmounted: 0,
+ total: 0
}
let faults: Faults[] | null = null;
@@ -38,7 +46,15 @@ export const getFaultStateFromDatabase = async (): Promise<FaultType | null> =>
Critical: faults[0].faults.criticals,
Major: faults[0].faults.majors,
Minor: faults[0].faults.minors,
- Warning: faults[0].faults.warnings
+ Warning: faults[0].faults.warnings,
+ Connected: faults[0]["network-element-connections"].Connected,
+ Connecting: faults[0]["network-element-connections"].Connecting,
+ Disconnected: faults[0]["network-element-connections"].Disconnected,
+ Mounted: faults[0]["network-element-connections"].Mounted,
+ UnableToConnect: faults[0]["network-element-connections"].UnableToConnect,
+ Undefined: faults[0]["network-element-connections"].Undefined,
+ Unmounted: faults[0]["network-element-connections"].Unmounted,
+ total: faults[0]["network-element-connections"].total,
}
}
diff --git a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
index 456e05e84..b9cd5e4da 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
@@ -173,13 +173,13 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
activePanelId === 'CurrentProblem' &&
<>
<FaultTable stickyHeader tableId="current-problems-table" idProperty="id" customActionButtons={customActions} columns={[
- { property: "icon", title: "", type: ColumnType.custom, customControl: this.renderIcon },
+ // { property: "icon", title: "", type: ColumnType.custom, customControl: this.renderIcon },
+ { property: "severity", title: "Severity", type: ColumnType.text, width: "140px" },
{ property: "timestamp", type: ColumnType.text, title: "Timestamp" },
{ property: "nodeId", title: "Node Name", type: ColumnType.text },
{ property: "counter", title: "Count", type: ColumnType.numeric, width: "100px" },
{ property: "objectId", title: "Object Id", type: ColumnType.text },
{ property: "problem", title: "Alarm Type", type: ColumnType.text },
- { property: "severity", title: "Severity", type: ColumnType.text, width: "140px" },
]} {...this.props.currentProblemsProperties} {...this.props.currentProblemsActions} />
<RefreshCurrentProblemsDialog
mode={this.state.refreshCurrentProblemsEditorMode}
@@ -190,13 +190,13 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
{activePanelId === 'AlarmNotifications' &&
<FaultAlarmNotificationTable stickyHeader tableId="alarm-notifications-table" idProperty="id" defaultSortColumn='timeStamp' defaultSortOrder='desc' rows={this.props.faultNotifications.faults} asynchronus columns={[
- { property: "icon", title: "", type: ColumnType.custom, customControl: this.renderIcon },
+ // { property: "icon", title: "", type: ColumnType.custom, customControl: this.renderIcon },
+ { property: "severity", title: "Severity", width: "140px" },
{ property: "timeStamp", title: "Timestamp" },
{ property: "nodeName", title: "Node Name" },
{ property: "counter", title: "Count", width: "100px", type: ColumnType.numeric },
{ property: "objectId", title: "Object Id" },
{ property: "problem", title: "Alarm Type" },
- { property: "severity", title: "Severity", width: "140px" },
]} />
}
@@ -204,13 +204,13 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
<>
<FaultTable stickyHeader idProperty={'id'} tableId="alarm-log-table" customActionButtons={[refreshAlarmLogAction]}
columns={[
- { property: "icon", title: "", type: ColumnType.custom, customControl: this.renderIcon },
+ // { property: "icon", title: "", type: ColumnType.custom, customControl: this.renderIcon },
+ { property: "severity", title: "Severity", width: "140px" },
{ property: "timestamp", title: "Timestamp" },
{ property: "nodeId", title: "Node Name" },
{ property: "counter", title: "Count", type: ColumnType.numeric, width: "100px" },
{ property: "objectId", title: "Object Id" },
{ property: "problem", title: "Alarm Type" },
- { property: "severity", title: "Severity", width: "140px" },
{ property: "sourceType", title: "Source", width: "140px" },
]} {...this.props.alarmLogEntriesProperties} {...this.props.alarmLogEntriesActions} />
<RefreshAlarmLogDialog
diff --git a/sdnr/wt/odlux/apps/helpApp/src/views/helpTocApp.tsx b/sdnr/wt/odlux/apps/helpApp/src/views/helpTocApp.tsx
index 2d8b0364d..e1de4d0f5 100644
--- a/sdnr/wt/odlux/apps/helpApp/src/views/helpTocApp.tsx
+++ b/sdnr/wt/odlux/apps/helpApp/src/views/helpTocApp.tsx
@@ -37,7 +37,7 @@ const HelpTocComponent: FunctionComponent<Connect<typeof mapProps, typeof mapDis
return (
<div>
- <Typography style={{ marginBottom: '30px' }} variant="h5">
+ <Typography aria-label="help" style={{ marginBottom: '30px' }} variant="h5">
Help &amp; FAQ
</Typography>
<Typography style={{ marginBottom: '30px' }} variant="body1">
diff --git a/sdnr/wt/odlux/apps/helpApp/webpack.config.js b/sdnr/wt/odlux/apps/helpApp/webpack.config.js
index 963a99ef3..b069c2a31 100644
--- a/sdnr/wt/odlux/apps/helpApp/webpack.config.js
+++ b/sdnr/wt/odlux/apps/helpApp/webpack.config.js
@@ -143,23 +143,32 @@ module.exports = (env) => {
},
proxy: {
"/oauth2/": {
- target: "http://10.20.6.29:48181",
+ //target: "http://10.20.6.29:48181",
+ target: "http://sdnr:8181",
secure: false
},
"/database/": {
- target: "http://10.20.6.29:48181",
+ //target: "http://10.20.6.29:48181",
+ target: "http://sdnr:8181",
secure: false
},
"/restconf/": {
- target: "http://10.20.6.29:48181",
+ //target: "http://10.20.6.29:48181",
+ target: "http://sdnr:8181",
+ secure: false
+ },
+ "/rests/": {
+ target: "http://sdnr:8181",
secure: false
},
"/help/": {
- target: "http://10.20.6.29:48181",
+ //target: "http://10.20.6.29:48181",
+ target: "http://sdnr:8181",
secure: false
},
"/websocket/": {
- target: "http://10.20.6.29:48181",
+ //target: "http://10.20.6.29:48181",
+ target: "http://sdnr:8181",
ws: true,
changeOrigin: true,
secure: false
diff --git a/sdnr/wt/odlux/apps/inventoryApp/src/handlers/connectedNetworkElementsHandler.ts b/sdnr/wt/odlux/apps/inventoryApp/src/handlers/connectedNetworkElementsHandler.ts
index 79c12d619..e6138cc38 100644
--- a/sdnr/wt/odlux/apps/inventoryApp/src/handlers/connectedNetworkElementsHandler.ts
+++ b/sdnr/wt/odlux/apps/inventoryApp/src/handlers/connectedNetworkElementsHandler.ts
@@ -24,7 +24,7 @@ import { NetworkElementConnection } from '../models/networkElementConnection';
export interface IConnectedNetworkElementsState extends IExternalTableState<NetworkElementConnection> { }
// create eleactic search material data fetch handler
-const connectedNetworkElementsSearchHandler = createSearchDataHandler<NetworkElementConnection>('network-element-connection', { status: "Connected" });
+const connectedNetworkElementsSearchHandler = createSearchDataHandler<NetworkElementConnection>('network-element-connection', false, { status: "Connected" });
export const {
actionHandler: connectedNetworkElementsActionHandler,
diff --git a/sdnr/wt/odlux/apps/mediatorApp/pom.xml b/sdnr/wt/odlux/apps/mediatorApp/pom.xml
index 604ba8632..e0f7cc44b 100644
--- a/sdnr/wt/odlux/apps/mediatorApp/pom.xml
+++ b/sdnr/wt/odlux/apps/mediatorApp/pom.xml
@@ -31,7 +31,7 @@
<groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
<artifactId>sdnr-wt-odlux-app-mediatorApp</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>ccsdk-features :: ${project.artifactId}</name>
diff --git a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx
index da0ffa048..55d9b400e 100644
--- a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx
+++ b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx
@@ -176,7 +176,7 @@ class MediatorApplicationComponent extends React.Component<MediatorApplicationCo
this.props.isReachable ?
- <MediatorServerConfigurationsTable defaultSortColumn={"Name"} defaultSortOrder="asc" stickyHeader title={this.props.serverName || ''} customActionButtons={[addMediatorConfigAction]} idProperty={"Name"} rows={this.props.configurations} asynchronus columns={[
+ <MediatorServerConfigurationsTable defaultSortColumn={"Name"} tableId={null} defaultSortOrder="asc" stickyHeader title={this.props.serverName || ''} customActionButtons={[addMediatorConfigAction]} idProperty={"Name"} rows={this.props.configurations} asynchronus columns={[
{ property: "Name", title: "Mediator", type: ColumnType.text },
{ property: "Status", title: "Status", type: ColumnType.custom, customControl: ({ rowData }) => rowData.pid ? (<span>Running</span>) : (<span>Stopped</span>) },
{ property: "DeviceIp", title: "IP Adress", type: ColumnType.text },
@@ -191,7 +191,7 @@ class MediatorApplicationComponent extends React.Component<MediatorApplicationCo
{ property: "actions", title: "Actions", type: ColumnType.custom, customControl: ({ rowData }) => renderActions(rowData) },
]} />
:
- <MediatorServerUnreachableTable title={this.props.serverName || ''} idProperty={"Name"} disableFilter={true} disableSorting={true} enableSelection={false} rows={[{ Name: '', status: "Mediator server not found.", ipAdress: '', device: '', actions: '' }]} columns={[
+ <MediatorServerUnreachableTable title={this.props.serverName || ''} tableId={null} idProperty={"Name"} disableFilter={true} disableSorting={true} enableSelection={false} rows={[{ Name: '', status: "Mediator server not found.", ipAdress: '', device: '', actions: '' }]} columns={[
{ property: "Name", title: "Mediator", type: ColumnType.text },
{ property: "status", title: "Status", type: ColumnType.text },
{ property: "ipAdress", title: "IP Adress", type: ColumnType.text },
diff --git a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx
index c44e2ccc1..456ed6d75 100644
--- a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx
+++ b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx
@@ -110,7 +110,7 @@ class MediatorServerSelectionComponent extends React.Component<MediatorServerSel
}
};
return <>
- <MediatorServersTable stickyHeader title={"Mediator"} customActionButtons={[refreshMediatorAction, addMediatorServerActionButton]} idProperty={"id"}
+ <MediatorServersTable stickyHeader title={"Mediator"} tableId={null} customActionButtons={[refreshMediatorAction, addMediatorServerActionButton]} idProperty={"id"}
{...this.props.mediatorServersActions} {...this.props.mediatorServersProperties} columns={[
{ property: "name", title: "Name", type: ColumnType.text },
{ property: "url", title: "Url", type: ColumnType.text },
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/adaptiveModulationHandler.ts b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/adaptiveModulationHandler.ts
index 3548bf4dc..8857845d2 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/adaptiveModulationHandler.ts
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/adaptiveModulationHandler.ts
@@ -26,7 +26,7 @@ export interface IAdaptiveModulationState extends IExternalTableState<AdaptiveMo
/**
* Creates elastic search material data fetch handler for Adaptive modulation from historicalperformance database.
*/
-const adaptiveModulationSearchHandler = createSearchDataHandler<AdaptiveModulationDataType>(getFilter, null)
+const adaptiveModulationSearchHandler = createSearchDataHandler<AdaptiveModulationDataType>(getFilter, false, null)
export const {
actionHandler: adaptiveModulationActionHandler,
createActions: createAdaptiveModulationActions,
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/crossPolarDiscriminationHandler.ts b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/crossPolarDiscriminationHandler.ts
index 1e6c6d0a6..5008dd56d 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/crossPolarDiscriminationHandler.ts
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/crossPolarDiscriminationHandler.ts
@@ -26,7 +26,7 @@ export interface ICrossPolarDiscriminationState extends IExternalTableState<Cros
/**
* Creates elastic search material data fetch handler for CPD from historicalperformance database.
*/
-const crossPolarDiscriminationSearchHandler = createSearchDataHandler<CrossPolarDiscriminationDataType>(getFilter, null)
+const crossPolarDiscriminationSearchHandler = createSearchDataHandler<CrossPolarDiscriminationDataType>(getFilter, false, null)
export const {
actionHandler: crossPolarDiscriminationActionHandler,
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/performanceDataHandler.ts b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/performanceDataHandler.ts
index 131566367..a7b63a324 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/performanceDataHandler.ts
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/performanceDataHandler.ts
@@ -28,7 +28,7 @@ export interface IPerformanceDataState extends IExternalTableState<PerformanceDa
/**
* Creates elastic search material data fetch handler for performance data from historicalperformance15min database.
*/
-const performanceDataSearchHandler = createSearchDataHandler<PerformanceDataType>(getFilter, null);
+const performanceDataSearchHandler = createSearchDataHandler<PerformanceDataType>(getFilter, false, null);
export const {
actionHandler: performanceDataActionHandler,
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/receiveLevelHandler.ts b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/receiveLevelHandler.ts
index 91595cc58..34fd3ebce 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/receiveLevelHandler.ts
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/receiveLevelHandler.ts
@@ -26,7 +26,7 @@ export interface IReceiveLevelState extends IExternalTableState<ReceiveLevelData
/**
* Creates elastic search material data fetch handler for receiveLevel from historicalperformance database.
*/
-const receiveLevelSearchHandler = createSearchDataHandler<ReceiveLevelDataType>(getFilter, null);
+const receiveLevelSearchHandler = createSearchDataHandler<ReceiveLevelDataType>(getFilter, false, null);
export const {
actionHandler: receiveLevelActionHandler,
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/signalToInterferenceHandler.ts b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/signalToInterferenceHandler.ts
index e0f804086..5fd5c0cde 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/signalToInterferenceHandler.ts
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/signalToInterferenceHandler.ts
@@ -26,7 +26,7 @@ export interface ISignalToInterferenceState extends IExternalTableState<SignalTo
/**
* Creates elastic search material data fetch handler for SINR from historicalperformance database.
*/
-const signalToInterferenceSearchHandler = createSearchDataHandler<SignalToInterferenceDataType>(getFilter, null);
+const signalToInterferenceSearchHandler = createSearchDataHandler<SignalToInterferenceDataType>(getFilter, false, null);
export const {
actionHandler: signalToInterferenceActionHandler,
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/temperatureHandler.ts b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/temperatureHandler.ts
index 0a6c73a1c..130b81801 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/temperatureHandler.ts
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/temperatureHandler.ts
@@ -26,7 +26,7 @@ export interface ITemperatureState extends IExternalTableState<TemperatureDataTy
/**
* Creates elastic search material data fetch handler for Temperature from historicalperformance database.
*/
-const temperatureSearchHandler = createSearchDataHandler< TemperatureDataType>(getFilter, null);
+const temperatureSearchHandler = createSearchDataHandler< TemperatureDataType>(getFilter, false, null);
export const {
actionHandler: temperatureActionHandler,
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/transmissionPowerHandler.ts b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/transmissionPowerHandler.ts
index 32bef817d..2a09e58f3 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/transmissionPowerHandler.ts
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/handlers/transmissionPowerHandler.ts
@@ -26,7 +26,7 @@ export interface ITransmissionPowerState extends IExternalTableState<Transmissio
/**
* Creates elastic search material data fetch handler for Transmission power from historicalperformance database.
*/
-const transmissionPowerSearchHandler = createSearchDataHandler<TransmissionPowerDataType>(getFilter, null)
+const transmissionPowerSearchHandler = createSearchDataHandler<TransmissionPowerDataType>(getFilter, false, null)
export const {
actionHandler: transmissionPowerActionHandler,