diff options
Diffstat (limited to 'sdnr/wt/odlux/apps')
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 & 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, |