aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/apps/faultApp
diff options
context:
space:
mode:
Diffstat (limited to 'sdnr/wt/odlux/apps/faultApp')
-rw-r--r--sdnr/wt/odlux/apps/faultApp/package.json7
-rw-r--r--sdnr/wt/odlux/apps/faultApp/pom.xml3
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/actions/clearStuckAlarmsAction.ts23
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/actions/panelChangeActions.ts3
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts38
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/assets/icons/faultAppIcon.svg19
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/components/clearStuckAlarmsDialog.tsx203
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx169
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/components/faultStatus.tsx29
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/components/refreshAlarmLogDialog.tsx59
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentAlarmsDialog.tsx113
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentProblemsDialog.tsx117
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/alarmLogEntriesHandler.ts2
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/clearStuckAlarmsHandler.ts21
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/currentAlarmsHandler.ts (renamed from sdnr/wt/odlux/apps/faultApp/src/handlers/currentProblemsHandler.ts)16
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts19
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts41
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/notificationsHandler.ts11
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/models/fault.ts86
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/models/panelId.ts2
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx112
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts44
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx185
-rw-r--r--sdnr/wt/odlux/apps/faultApp/tsconfig.json2
-rw-r--r--sdnr/wt/odlux/apps/faultApp/webpack.config.js22
25 files changed, 676 insertions, 670 deletions
diff --git a/sdnr/wt/odlux/apps/faultApp/package.json b/sdnr/wt/odlux/apps/faultApp/package.json
index a5958d8c4..953105584 100644
--- a/sdnr/wt/odlux/apps/faultApp/package.json
+++ b/sdnr/wt/odlux/apps/faultApp/package.json
@@ -26,7 +26,9 @@
"@mui/icons-material": "^5.2.0",
"@mui/material": "^5.2.2",
"@mui/styles": "^5.2.2",
- "@odlux/framework": "*"
+ "@odlux/framework": "*",
+ "@fortawesome/free-solid-svg-icons": "5.6.3",
+ "@fortawesome/react-fontawesome": "0.1.14"
},
"peerDependencies": {
"@types/classnames": "2.2.6",
@@ -38,6 +40,7 @@
"jquery": "3.3.1",
"react": "17.0.2",
"react-dom": "17.0.2",
- "react-router-dom": "5.2.0"
+ "react-router-dom": "5.2.0",
+ "react-chartjs-2": "^3.0.3"
}
}
diff --git a/sdnr/wt/odlux/apps/faultApp/pom.xml b/sdnr/wt/odlux/apps/faultApp/pom.xml
index 31a376014..ba4df509b 100644
--- a/sdnr/wt/odlux/apps/faultApp/pom.xml
+++ b/sdnr/wt/odlux/apps/faultApp/pom.xml
@@ -19,6 +19,7 @@
~ ============LICENSE_END=======================================================
~
-->
+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -139,7 +140,7 @@
<!-- optional: default phase is "generate-resources" -->
<phase>initialize</phase>
<configuration>
- <nodeVersion>v12.13.0</nodeVersion>
+ <nodeVersion>v12.22.0</nodeVersion>
<yarnVersion>v1.22.10</yarnVersion>
</configuration>
</execution>
diff --git a/sdnr/wt/odlux/apps/faultApp/src/actions/clearStuckAlarmsAction.ts b/sdnr/wt/odlux/apps/faultApp/src/actions/clearStuckAlarmsAction.ts
index cdcbf64d2..7aac8ba35 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/actions/clearStuckAlarmsAction.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/actions/clearStuckAlarmsAction.ts
@@ -17,20 +17,21 @@
*/
-import { clearStuckAlarms } from "../services/faultStatusService"
-import { Dispatch } from "../../../../framework/src/flux/store";
-import { FaultApplicationBaseAction } from "./notificationActions";
+import { Dispatch } from '../../../../framework/src/flux/store';
+
+import { clearStuckAlarms } from '../services/faultStatusService';
+import { FaultApplicationBaseAction } from './notificationActions';
export class AreStuckAlarmsCleared extends FaultApplicationBaseAction {
- constructor(public isBusy: boolean) {
- super();
- }
+ constructor(public isBusy: boolean) {
+ super();
+ }
}
export const clearStuckAlarmAsyncAction = (dispatch: Dispatch) => async (nodeNames: string[]) => {
- dispatch(new AreStuckAlarmsCleared(true));
- const result = await clearStuckAlarms(nodeNames).catch(error => { console.error(error); return undefined });
- dispatch(new AreStuckAlarmsCleared(false));
- return result;
-} \ No newline at end of file
+ dispatch(new AreStuckAlarmsCleared(true));
+ const result = await clearStuckAlarms(nodeNames).catch(error => { console.error(error); return undefined; });
+ dispatch(new AreStuckAlarmsCleared(false));
+ return result;
+}; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/actions/panelChangeActions.ts b/sdnr/wt/odlux/apps/faultApp/src/actions/panelChangeActions.ts
index 7cf02ac4f..fb29e9c1b 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/actions/panelChangeActions.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/actions/panelChangeActions.ts
@@ -16,6 +16,7 @@
* ============LICENSE_END==========================================================================
*/
import { Action } from '../../../../framework/src/flux/action';
+
import { PanelId } from '../models/panelId';
export class SetPanelAction extends Action {
@@ -32,5 +33,5 @@ export class RememberCurrentPanelAction extends Action {
export const setPanelAction = (panelId: PanelId) => {
return new SetPanelAction(panelId);
-}
+};
diff --git a/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts b/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts
index 54fea6a5f..8b631b96d 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/actions/statusActions.ts
@@ -15,10 +15,11 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import { FaultApplicationBaseAction } from './notificationActions';
-import { getFaultStateFromDatabase } from '../services/faultStatusService';
import { Dispatch } from '../../../../framework/src/flux/store';
+import { getFaultStateFromDatabase } from '../services/faultStatusService';
+import { FaultApplicationBaseAction } from './notificationActions';
+
export class SetFaultStatusAction extends FaultApplicationBaseAction {
constructor(public criticalFaults: number, public majorFaults: number, public minorFaults: number, public warnings: number,
@@ -32,29 +33,28 @@ export class SetFaultStatusAction extends FaultApplicationBaseAction {
export const refreshFaultStatusAsyncAction = async (dispatch: Dispatch) => {
- dispatch(new SetFaultStatusAction(0, 0, 0, 0, true, 0, 0, 0, 0, 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(
- result["Critical"] || 0,
- result["Major"] || 0,
- result["Minor"] || 0,
- result["Warning"] || 0,
+ result.Critical || 0,
+ 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,
- 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 {
+ } else {
dispatch(new SetFaultStatusAction(0, 0, 0, 0, false, 0, 0, 0, 0, 0, 0, 0, 0, false));
}
-}
+};
diff --git a/sdnr/wt/odlux/apps/faultApp/src/assets/icons/faultAppIcon.svg b/sdnr/wt/odlux/apps/faultApp/src/assets/icons/faultAppIcon.svg
new file mode 100644
index 000000000..aabbf4cf4
--- /dev/null
+++ b/sdnr/wt/odlux/apps/faultApp/src/assets/icons/faultAppIcon.svg
@@ -0,0 +1,19 @@
+<!-- highstreet technologies GmbH colour scheme
+ Grey #565656
+ LBlue #36A9E1
+ DBlue #246DA2
+ Green #003F2C / #006C4B
+ Yellw #C8D400
+ Red #D81036
+-->
+
+<svg viewBox="0 0 500 540" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
+ <g transform="matrix(27.7762,0,0,27.7762,-13.8603,-27.7762)">
+
+ <path fill="#565656" d="M 16.8 15.101 C 15.656 14.242 15 12.929 15 11.5 L 15 8.5 C 15 5.987 13.306 3.862 11 3.208 L 11 2.5 C 11 1.673 10.327 1 9.5 1 C 8.673 1 8 1.673 8 2.5 L 8 3.208 C 5.694 3.863 4 5.987 4 8.5 L 4 11.5 C 4 12.929 3.344 14.241 2.2 15.101 C 2.028 15.23 1.958 15.455 2.026 15.659 C 2.094 15.863 2.285 16.001 2.5 16.001 L 16.499 16.001 C 16.714 16.001 16.905 15.863 16.973 15.659 C 17.041 15.455 16.971 15.23 16.799 15.101 L 16.8 15.101 Z" />
+
+ <path fill="#D81036" d="m 7.05 17.001 c -0.033 0.164 -0.051 0.331 -0.051 0.5 c 0 1.378 1.122 2.5 2.5 2.5 c 1.378 0 2.5 -1.122 2.5 -2.5 c 0 -0.168 -0.017 -0.336 -0.05 -0.5 l -4.899 0 z" />
+
+
+ </g>
+</svg>
diff --git a/sdnr/wt/odlux/apps/faultApp/src/components/clearStuckAlarmsDialog.tsx b/sdnr/wt/odlux/apps/faultApp/src/components/clearStuckAlarmsDialog.tsx
index 463c2079c..e86b756a7 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/components/clearStuckAlarmsDialog.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/components/clearStuckAlarmsDialog.tsx
@@ -16,119 +16,122 @@
* ============LICENSE_END==========================================================================
*/
-import * as React from 'react'
-import { DialogContent, DialogActions, Button, Dialog, DialogTitle, DialogContentText } from '@mui/material';
-import { currentProblemsReloadAction } from '../handlers/currentProblemsHandler';
+import React from 'react';
+
+import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@mui/material';
+
+import { connect, Connect, IDispatcher } from '../../../../framework/src/flux/connect';
+
import { clearStuckAlarmAsyncAction } from '../actions/clearStuckAlarmsAction';
-import connect, { IDispatcher, Connect } from '../../../../framework/src/flux/connect';
+import { currentAlarmsReloadAction } from '../handlers/currentAlarmsHandler';
export enum ClearStuckAlarmsDialogMode {
- None = "none",
- Show = "show"
+ None = 'none',
+ Show = 'show',
}
const mapDispatch = (dispatcher: IDispatcher) => ({
- clearStuckAlarmsAsync: clearStuckAlarmAsyncAction(dispatcher.dispatch),
- reloadCurrentProblemsAction: () => dispatcher.dispatch(currentProblemsReloadAction)
+ clearStuckAlarmsAsync: clearStuckAlarmAsyncAction(dispatcher.dispatch),
+ reloadCurrentAlarmsAction: () => dispatcher.dispatch(currentAlarmsReloadAction),
});
type clearStuckAlarmsProps = Connect<typeof undefined, typeof mapDispatch> & {
- numberDevices: Number;
- mode: ClearStuckAlarmsDialogMode;
- stuckAlarms: string[];
- onClose: () => void;
-}
+ numberDevices: Number;
+ mode: ClearStuckAlarmsDialogMode;
+ stuckAlarms: string[];
+ onClose: () => void;
+};
type ClearStuckAlarmsState = {
- clearAlarmsSuccessful: boolean;
- errormessage: string;
- unclearedAlarms: string[];
-}
-
-class ClearStuckAlarmsDialogComponent extends React.Component<clearStuckAlarmsProps, ClearStuckAlarmsState>{
- constructor(props: clearStuckAlarmsProps) {
- super(props);
- this.state = {
- clearAlarmsSuccessful: true,
- errormessage: '',
- unclearedAlarms: []
- };
- }
-
- onClose = (event: React.MouseEvent) => {
- event.stopPropagation();
- event.preventDefault();
- this.props.onClose();
+ clearAlarmsSuccessful: boolean;
+ errormessage: string;
+ unclearedAlarms: string[];
+};
+
+class ClearStuckAlarmsDialogComponent extends React.Component<clearStuckAlarmsProps, ClearStuckAlarmsState> {
+ constructor(props: clearStuckAlarmsProps) {
+ super(props);
+ this.state = {
+ clearAlarmsSuccessful: true,
+ errormessage: '',
+ unclearedAlarms: [],
+ };
+ }
+
+ onClose = (event: React.MouseEvent) => {
+ event.stopPropagation();
+ event.preventDefault();
+ this.props.onClose();
+ };
+
+ onRefresh = async (event: React.MouseEvent) => {
+ event.stopPropagation();
+ event.preventDefault();
+ const result = await this.props.clearStuckAlarmsAsync(this.props.stuckAlarms);
+
+ if (result && result['devicemanager:output'].nodenames && result['devicemanager:output'].nodenames.length !== this.props.stuckAlarms.length) { //show errormessage if not all devices were cleared
+ const undeletedAlarm = this.props.stuckAlarms.filter(item => !result['devicemanager:output'].nodenames.includes(item));
+ const error = 'The alarms of the following devices couldn\'t be refreshed: ';
+ this.setState({ clearAlarmsSuccessful: false, errormessage: error, unclearedAlarms: undeletedAlarm });
+ return;
+
+ } else { //show errormessage if no devices were cleared
+ this.setState({ clearAlarmsSuccessful: false, errormessage: 'Alarms couldn\'t be refreshed.', unclearedAlarms: [] });
}
- onRefresh = async (event: React.MouseEvent) => {
- event.stopPropagation();
- event.preventDefault();
- const result = await this.props.clearStuckAlarmsAsync(this.props.stuckAlarms);
-
- if (result && result["devicemanager:output"].nodenames && result["devicemanager:output"].nodenames.length !== this.props.stuckAlarms.length) { //show errormessage if not all devices were cleared
- const undeletedAlarm = this.props.stuckAlarms.filter(item => !result["devicemanager:output"].nodenames.includes(item));
- const error = "The alarms of the following devices couldn't be refreshed: ";
- this.setState({ clearAlarmsSuccessful: false, errormessage: error, unclearedAlarms: undeletedAlarm });
- return;
-
- } else { //show errormessage if no devices were cleared
- this.setState({ clearAlarmsSuccessful: false, errormessage: "Alarms couldn't be refreshed.", unclearedAlarms: [] });
- }
-
- this.props.reloadCurrentProblemsAction();
- this.props.onClose();
- }
-
- onOk = (event: React.MouseEvent) => {
-
- event.stopPropagation();
- event.preventDefault();
- if (this.state.unclearedAlarms.length > 0)
- this.props.reloadCurrentProblemsAction();
- this.props.onClose();
- }
-
- render() {
- console.log(this.props.stuckAlarms);
- const device = this.props.numberDevices > 1 ? 'devices' : 'device'
- const defaultMessage = "Are you sure you want to refresh all alarms for " + this.props.numberDevices + " " + device + "?"
- const message = this.state.clearAlarmsSuccessful ? defaultMessage : this.state.errormessage;
-
- const defaultTitle = "Refresh Confirmation"
- const title = this.state.clearAlarmsSuccessful ? defaultTitle : 'Refresh Result';
-
- return (
- <Dialog open={this.props.mode !== ClearStuckAlarmsDialogMode.None}>
- <DialogTitle>{title}</DialogTitle>
- <DialogContent>
- <DialogContentText>
- {message}
- </DialogContentText>
- {
- this.state.unclearedAlarms.map(item =>
- <DialogContentText>
- {item}
- </DialogContentText>
- )
- }
- </DialogContent>
- <DialogActions>
- {
- this.state.clearAlarmsSuccessful &&
- <>
- <Button color="inherit" onClick={this.onRefresh}>Yes</Button>
- <Button color="inherit" onClick={this.onClose}>No</Button>
- </>
- }
-
- {
- !this.state.clearAlarmsSuccessful && <Button color="inherit" onClick={this.onOk}>Ok</Button>
- }
- </DialogActions>
- </Dialog>
- )
- }
+ this.props.reloadCurrentAlarmsAction();
+ this.props.onClose();
+ };
+
+ onOk = (event: React.MouseEvent) => {
+
+ event.stopPropagation();
+ event.preventDefault();
+ if (this.state.unclearedAlarms.length > 0)
+ this.props.reloadCurrentAlarmsAction();
+ this.props.onClose();
+ };
+
+ render() {
+ console.log(this.props.stuckAlarms);
+ const device = this.props.numberDevices > 1 ? 'devices' : 'device';
+ const defaultMessage = 'Are you sure you want to refresh all alarms for ' + this.props.numberDevices + ' ' + device + '?';
+ const message = this.state.clearAlarmsSuccessful ? defaultMessage : this.state.errormessage;
+
+ const defaultTitle = 'Refresh Confirmation';
+ const title = this.state.clearAlarmsSuccessful ? defaultTitle : 'Refresh Result';
+
+ return (
+ <Dialog open={this.props.mode !== ClearStuckAlarmsDialogMode.None}>
+ <DialogTitle>{title}</DialogTitle>
+ <DialogContent>
+ <DialogContentText>
+ {message}
+ </DialogContentText>
+ {
+ this.state.unclearedAlarms.map(item =>
+ <DialogContentText>
+ {item}
+ </DialogContentText>,
+ )
+ }
+ </DialogContent>
+ <DialogActions>
+ {
+ this.state.clearAlarmsSuccessful &&
+ <>
+ <Button color="inherit" onClick={this.onRefresh}>Yes</Button>
+ <Button color="inherit" onClick={this.onClose}>No</Button>
+ </>
+ }
+
+ {
+ !this.state.clearAlarmsSuccessful && <Button color="inherit" onClick={this.onOk}>Ok</Button>
+ }
+ </DialogActions>
+ </Dialog>
+ );
+ }
}
const ClearStuckAlarmsDialog = connect(undefined, mapDispatch)(ClearStuckAlarmsDialogComponent);
diff --git a/sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx b/sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx
index a81705965..a3e32c42c 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/components/dashboardHome.tsx
@@ -15,26 +15,25 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import * as React from 'react';
+import React from 'react';
+import { RouteComponentProps, withRouter } from 'react-router-dom';
-import { withRouter, RouteComponentProps } from 'react-router-dom';
-import connect, { Connect, IDispatcher } from '../../../../framework/src/flux/connect';;
-import { Theme } from '@mui/material';
import { WithStyles } from '@mui/styles';
import createStyles from '@mui/styles/createStyles';
-import withStyles from '@mui/styles/withStyles';
import { Doughnut } from 'react-chartjs-2';
-import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore';
+import { connect, Connect, IDispatcher } from '../../../../framework/src/flux/connect';
+
import { NavigateToApplication } from '../../../../framework/src/actions/navigationActions';
+import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore';
-const styles = (theme: Theme) => createStyles({
+const styles = () => createStyles({
pageWidthSettings: {
width: '50%',
- float: 'left'
+ float: 'left',
},
-})
+});
-const scrollbar = { overflow: "auto", paddingRight: "20px" }
+const scrollbar = { overflow: 'auto', paddingRight: '20px' };
let connectionStatusinitialLoad = true;
let connectionStatusinitialStateChanged = false;
@@ -47,7 +46,7 @@ let alarmStatusDataLoad: number[] = [0, 0, 0, 0];
let alarmTotalCount = 0;
const mapProps = (state: IApplicationStoreState) => ({
- alarmStatus: state.fault.faultStatus
+ alarmStatus: state.fault.faultStatus,
});
const mapDispatch = (dispatcher: IDispatcher) => ({
@@ -60,11 +59,10 @@ class DashboardHome extends React.Component<HomeComponentProps> {
constructor(props: HomeComponentProps) {
super(props);
this.state = {
- }
+ };
}
render(): JSX.Element {
- const { classes } = this.props;
if (!this.props.alarmStatus.isLoadingConnectionStatusChart) {
connectionStatusDataLoad = [
@@ -72,7 +70,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
this.props.alarmStatus.Connecting,
this.props.alarmStatus.Disconnected,
this.props.alarmStatus.UnableToConnect,
- this.props.alarmStatus.Undefined
+ this.props.alarmStatus.Undefined,
];
connectionTotalCount = this.props.alarmStatus.Connected + this.props.alarmStatus.Connecting
+ this.props.alarmStatus.Disconnected + this.props.alarmStatus.UnableToConnect + this.props.alarmStatus.Undefined;
@@ -84,7 +82,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
this.props.alarmStatus.critical,
this.props.alarmStatus.major,
this.props.alarmStatus.minor,
- this.props.alarmStatus.warning
+ this.props.alarmStatus.warning,
];
alarmTotalCount = this.props.alarmStatus.critical + this.props.alarmStatus.major
+ this.props.alarmStatus.minor + this.props.alarmStatus.warning;
@@ -97,7 +95,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
'Connecting: ' + this.props.alarmStatus.Connecting,
'Disconnected: ' + this.props.alarmStatus.Disconnected,
'UnableToConnect: ' + this.props.alarmStatus.UnableToConnect,
- 'Undefined: ' + this.props.alarmStatus.Undefined
+ 'Undefined: ' + this.props.alarmStatus.Undefined,
],
datasets: [{
labels: ['Connected', 'Connecting', 'Disconnected', 'UnableToConnect', 'Undefined'],
@@ -107,9 +105,9 @@ class DashboardHome extends React.Component<HomeComponentProps> {
'rgb(255, 102, 0)',
'rgb(191, 191, 191)',
'rgb(191, 191, 191)',
- 'rgb(242, 240, 240)'
- ]
- }]
+ 'rgb(242, 240, 240)',
+ ],
+ }],
};
@@ -119,9 +117,9 @@ class DashboardHome extends React.Component<HomeComponentProps> {
datasets: [{
data: [1],
backgroundColor: [
- 'rgb(255, 255, 255)'
- ]
- }]
+ 'rgb(255, 255, 255)',
+ ],
+ }],
};
/** Loading Connection Status chart */
@@ -130,9 +128,9 @@ class DashboardHome extends React.Component<HomeComponentProps> {
datasets: [{
data: [1],
backgroundColor: [
- 'rgb(255, 255, 255)'
- ]
- }]
+ 'rgb(255, 255, 255)',
+ ],
+ }],
};
/** Loading Alarm Status chart */
@@ -141,9 +139,9 @@ class DashboardHome extends React.Component<HomeComponentProps> {
datasets: [{
data: [1],
backgroundColor: [
- 'rgb(255, 255, 255)'
- ]
- }]
+ 'rgb(255, 255, 255)',
+ ],
+ }],
};
/** Connection status options */
@@ -155,57 +153,57 @@ class DashboardHome extends React.Component<HomeComponentProps> {
let label =
(data.datasets[tooltipItem.datasetIndex].labels &&
data.datasets[tooltipItem.datasetIndex].labels[
- tooltipItem.index
+ tooltipItem.index
]) ||
data.labels[tooltipItem.index] ||
- "";
+ '';
if (label) {
- label += ": ";
+ label += ': ';
}
label +=
data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] +
- (data.datasets[tooltipItem.datasetIndex].labelSuffix || "");
+ (data.datasets[tooltipItem.datasetIndex].labelSuffix || '');
return label;
- }
- }
+ },
+ },
},
responsive: true,
maintainAspectRatio: false,
animation: {
- duration: 0
+ duration: 0,
},
plugins: {
legend: {
display: true,
- position: 'top'
- }
+ position: 'top',
+ },
},
onClick: (event: MouseEvent, item: any) => {
if (item[0]) {
let connectionStatus = labels[item[0]._index] + '';
- this.props.navigateToApplication("connect", '/connectionStatus/' + connectionStatus);
+ this.props.navigateToApplication('connect', '/connectionStatus/' + connectionStatus);
}
- }
- }
+ },
+ };
/** Connection status unavailable options */
const connectionStatusUnavailableOptions = {
responsive: true,
maintainAspectRatio: false,
animation: {
- duration: 0
+ duration: 0,
},
plugins: {
legend: {
display: true,
- position: 'top'
+ position: 'top',
},
tooltip: {
- enabled: false
- }
- }
- }
+ enabled: false,
+ },
+ },
+ };
/** Add text inside the doughnut chart for Connection Status */
const connectionStatusPlugins = [{
@@ -215,15 +213,15 @@ class DashboardHome extends React.Component<HomeComponentProps> {
ctx = chart.ctx;
ctx.restore();
var fontSize = (height / 480).toFixed(2);
- ctx.font = fontSize + "em sans-serif";
- ctx.textBaseline = "top";
- var text = "Network Connection Status",
+ ctx.font = fontSize + 'em sans-serif';
+ ctx.textBaseline = 'top';
+ var text = 'Network Connection Status',
textX = Math.round((width - ctx.measureText(text).width) / 2),
textY = height / 2;
ctx.fillText(text, textX, textY);
ctx.save();
- }
- }]
+ },
+ }];
/** Alarm status Data */
const alarmStatusData = {
@@ -231,7 +229,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
'Critical : ' + this.props.alarmStatus.critical,
'Major : ' + this.props.alarmStatus.major,
'Minor : ' + this.props.alarmStatus.minor,
- 'Warning : ' + this.props.alarmStatus.warning
+ 'Warning : ' + this.props.alarmStatus.warning,
],
datasets: [{
labels: ['Critical', 'Major', 'Minor', 'Warning'],
@@ -240,10 +238,10 @@ class DashboardHome extends React.Component<HomeComponentProps> {
'rgb(240, 25, 10)',
'rgb(240, 133, 10)',
'rgb(240, 240, 10)',
- 'rgb(46, 115, 176)'
+ 'rgb(46, 115, 176)',
],
- }]
- }
+ }],
+ };
/** No Alarm status available */
const alarmStatusUnavailableData = {
@@ -251,9 +249,9 @@ class DashboardHome extends React.Component<HomeComponentProps> {
datasets: [{
data: [1],
backgroundColor: [
- 'rgb(0, 153, 51)'
- ]
- }]
+ 'rgb(0, 153, 51)',
+ ],
+ }],
};
/** Alarm status Options */
@@ -265,36 +263,36 @@ class DashboardHome extends React.Component<HomeComponentProps> {
let label =
(data.datasets[tooltipItem.datasetIndex].labels &&
data.datasets[tooltipItem.datasetIndex].labels[
- tooltipItem.index
+ tooltipItem.index
]) ||
data.labels[tooltipItem.index] ||
- "";
+ '';
if (label) {
- label += ": ";
+ label += ': ';
}
label +=
data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] +
- (data.datasets[tooltipItem.datasetIndex].labelSuffix || "");
+ (data.datasets[tooltipItem.datasetIndex].labelSuffix || '');
return label;
- }
- }
+ },
+ },
},
responsive: true,
maintainAspectRatio: false,
animation: {
- duration: 0
+ duration: 0,
},
plugins: {
legend: {
display: true,
- position: 'top'
- }
+ position: 'top',
+ },
},
onClick: (event: MouseEvent, item: any) => {
if (item[0]) {
let severity = alarmLabels[item[0]._index] + '';
- this.props.navigateToApplication("fault", '/alarmStatus/' + severity);
+ this.props.navigateToApplication('fault', '/alarmStatus/' + severity);
}
},
};
@@ -304,18 +302,18 @@ class DashboardHome extends React.Component<HomeComponentProps> {
responsive: true,
maintainAspectRatio: false,
animation: {
- duration: 0
+ duration: 0,
},
plugins: {
legend: {
display: true,
- position: 'top'
+ position: 'top',
},
tooltip: {
- enabled: false
- }
- }
- }
+ enabled: false,
+ },
+ },
+ };
/** Add text inside the doughnut chart for Alarm Status */
const alarmStatusPlugins = [{
beforeDraw: function (chart: any) {
@@ -324,15 +322,15 @@ class DashboardHome extends React.Component<HomeComponentProps> {
ctx = chart.ctx;
ctx.restore();
var fontSize = (height / 480).toFixed(2);
- ctx.font = fontSize + "em sans-serif";
- ctx.textBaseline = "top";
- var text = "Network Alarm Status",
+ ctx.font = fontSize + 'em sans-serif';
+ ctx.textBaseline = 'top';
+ var text = 'Network Alarm Status',
textX = Math.round((width - ctx.measureText(text).width) / 2),
textY = height / 2;
ctx.fillText(text, textX, textY);
ctx.save();
- }
- }]
+ },
+ }];
return (
<>
@@ -397,7 +395,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
</div>
</div>
</>
- )
+ );
}
/** Check if connection status data available */
@@ -412,7 +410,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
} else {
return true;
}
- }
+ };
/** Check if connection status chart data is loaded */
public checkElementsAreLoaded = () => {
@@ -434,7 +432,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
return !isLoadingCheck.isLoadingConnectionStatusChart;
}
return true;
- }
+ };
/** Check if alarms data available */
public checkAlarmStatus = () => {
@@ -444,11 +442,10 @@ class DashboardHome extends React.Component<HomeComponentProps> {
}
if (alarmCount.critical == 0 && alarmCount.major == 0 && alarmCount.minor == 0 && alarmCount.warning == 0) {
return false;
- }
- else {
+ } else {
return true;
}
- }
+ };
/** Check if alarm status chart data is loaded */
public checkAlarmsAreLoaded = () => {
@@ -470,7 +467,7 @@ class DashboardHome extends React.Component<HomeComponentProps> {
return !isLoadingCheck.isLoadingAlarmStatusChart;
}
return true;
- }
+ };
}
export default (withRouter(connect(mapProps, mapDispatch)(DashboardHome))); \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/components/faultStatus.tsx b/sdnr/wt/odlux/apps/faultApp/src/components/faultStatus.tsx
index 7820dfdeb..c2ca4a536 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/components/faultStatus.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/components/faultStatus.tsx
@@ -15,37 +15,36 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import * as React from 'react';
+import React from 'react';
-import { Theme } from '@mui/material/styles';
+import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; // select app icon
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import Typography from '@mui/material/Typography';
import { WithStyles } from '@mui/styles';
-import withStyles from '@mui/styles/withStyles';
import createStyles from '@mui/styles/createStyles';
-import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; // select app icon
+import withStyles from '@mui/styles/withStyles';
-import connect, { Connect } from '../../../../framework/src/flux/connect';
+import { connect, Connect } from '../../../../framework/src/flux/connect';
import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore';
-import Typography from '@mui/material/Typography';
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-const styles = (theme: Theme) => createStyles({
+const styles = () => createStyles({
icon: {
marginLeft: 8,
- marginRight: 8
+ marginRight: 8,
},
critical: {
- color: "red"
+ color: 'red',
},
major: {
- color: "orange"
+ color: 'orange',
},
minor: {
- color: "#f7f700"
+ color: '#f7f700',
},
warning: {
- color: "#428bca"
- }
+ color: '#428bca',
+ },
});
const mapProps = (state: IApplicationStoreState) => ({
@@ -75,7 +74,7 @@ class FaultStatusComponent extends React.Component<FaultStatusComponentProps> {
</Typography>
</>
);
- };
+ }
}
export const FaultStatus = withStyles(styles)(connect(mapProps)(FaultStatusComponent));
diff --git a/sdnr/wt/odlux/apps/faultApp/src/components/refreshAlarmLogDialog.tsx b/sdnr/wt/odlux/apps/faultApp/src/components/refreshAlarmLogDialog.tsx
index 8c639eec9..59657d8de 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/components/refreshAlarmLogDialog.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/components/refreshAlarmLogDialog.tsx
@@ -24,78 +24,73 @@ import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
+import { connect, Connect, IDispatcher } from '../../../../framework/src/flux/connect';
import { alarmLogEntriesReloadAction } from '../handlers/alarmLogEntriesHandler';
-import { IDispatcher, connect, Connect } from '../../../../framework/src/flux/connect';
-
import { Fault } from '../models/fault';
export enum RefreshAlarmLogDialogMode {
- None = "none",
- RefreshAlarmLogTable = "RefreshAlarmLogTable",
+ None = 'none',
+ RefreshAlarmLogTable = 'RefreshAlarmLogTable',
}
const mapDispatch = (dispatcher: IDispatcher) => ({
- refreshAlarmLog: () => dispatcher.dispatch(alarmLogEntriesReloadAction)
+ refreshAlarmLog: () => dispatcher.dispatch(alarmLogEntriesReloadAction),
});
type DialogSettings = {
- dialogTitle: string,
- dialogDescription: string,
- applyButtonText: string,
- cancelButtonText: string,
- enableMountIdEditor: boolean,
- enableUsernameEditor: boolean,
- enableExtendedEditor: boolean,
-}
+ dialogTitle: string;
+ dialogDescription: string;
+ applyButtonText: string;
+ cancelButtonText: string;
+ enableMountIdEditor: boolean;
+ enableUsernameEditor: boolean;
+ enableExtendedEditor: boolean;
+};
const settings: { [key: string]: DialogSettings } = {
[RefreshAlarmLogDialogMode.None]: {
- dialogTitle: "",
- dialogDescription: "",
- applyButtonText: "",
- cancelButtonText: "",
+ dialogTitle: '',
+ dialogDescription: '',
+ applyButtonText: '',
+ cancelButtonText: '',
enableMountIdEditor: false,
enableUsernameEditor: false,
enableExtendedEditor: false,
},
[RefreshAlarmLogDialogMode.RefreshAlarmLogTable]: {
- dialogTitle: "Do you want to refresh the Alarm Log?",
- dialogDescription: "",
- applyButtonText: "Yes",
- cancelButtonText: "Cancel",
+ dialogTitle: 'Do you want to refresh the Alarm Log?',
+ dialogDescription: '',
+ applyButtonText: 'Yes',
+ cancelButtonText: 'Cancel',
enableMountIdEditor: true,
enableUsernameEditor: true,
enableExtendedEditor: true,
- }
-}
+ },
+};
type RefreshAlarmLogDialogComponentProps = Connect<undefined, typeof mapDispatch> & {
mode: RefreshAlarmLogDialogMode;
onClose: () => void;
};
-type RefreshAlarmLogDialogComponentState = Fault & { isNameValid: boolean, isHostSet: boolean };
+type RefreshAlarmLogDialogComponentState = Fault & { isNameValid: boolean; isHostSet: boolean };
class RefreshAlarmLogDialogComponent extends React.Component<RefreshAlarmLogDialogComponentProps, RefreshAlarmLogDialogComponentState> {
- constructor(props: RefreshAlarmLogDialogComponentProps) {
- super(props);
- }
-
render(): JSX.Element {
const setting = settings[this.props.mode];
return (
<Dialog open={this.props.mode !== RefreshAlarmLogDialogMode.None}>
- <DialogTitle id="form-dialog-title" aria-label={`${setting.dialogTitle.replace(/ /g, "-").toLowerCase()}-dialog`}>{setting.dialogTitle}</DialogTitle>
+ <DialogTitle id="form-dialog-title" aria-label={`${setting.dialogTitle.replace(/ /g, '-').toLowerCase()}-dialog`}>{setting.dialogTitle}</DialogTitle>
<DialogContent>
<DialogContentText>
{setting.dialogDescription}
</DialogContentText>
</DialogContent>
<DialogActions>
- <Button aria-label="dialog-confirm-button" onClick={(event) => {
+ <Button aria-label="dialog-confirm-button" onClick={() => {
this.onRefresh();
}} color="inherit" > {setting.applyButtonText} </Button>
- <Button aria-label="dialog-cancel-button" onClick={(event) => {
+ <Button aria-label="dialog-cancel-button" onClick={() => {
this.onCancel();
}} color="secondary"> {setting.cancelButtonText} </Button>
</DialogActions>
@@ -110,7 +105,7 @@ class RefreshAlarmLogDialogComponent extends React.Component<RefreshAlarmLogDial
private onCancel = () => {
this.props.onClose();
- }
+ };
}
export const RefreshAlarmLogDialog = connect(undefined, mapDispatch)(RefreshAlarmLogDialogComponent);
diff --git a/sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentAlarmsDialog.tsx b/sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentAlarmsDialog.tsx
new file mode 100644
index 000000000..20cd514cd
--- /dev/null
+++ b/sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentAlarmsDialog.tsx
@@ -0,0 +1,113 @@
+/**
+ * ============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 * as React from 'react';
+
+import Button from '@mui/material/Button';
+import Dialog from '@mui/material/Dialog';
+import DialogActions from '@mui/material/DialogActions';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import DialogTitle from '@mui/material/DialogTitle';
+
+import { connect, Connect, IDispatcher } from '../../../../framework/src/flux/connect';
+
+import { currentAlarmsReloadAction } from '../handlers/currentAlarmsHandler';
+import { Fault } from '../models/fault';
+
+export enum RefreshCurrentAlarmsDialogMode {
+ None = 'none',
+ RefreshCurrentAlarmsTable = 'RefreshCurrentAlarmsTable',
+}
+
+const mapDispatch = (dispatcher: IDispatcher) => ({
+ refreshCurrentAlarms: () => dispatcher.dispatch(currentAlarmsReloadAction),
+});
+
+type DialogSettings = {
+ dialogTitle: string;
+ dialogDescription: string;
+ applyButtonText: string;
+ cancelButtonText: string;
+ enableMountIdEditor: boolean;
+ enableUsernameEditor: boolean;
+ enableExtendedEditor: boolean;
+};
+
+const settings: { [key: string]: DialogSettings } = {
+ [RefreshCurrentAlarmsDialogMode.None]: {
+ dialogTitle: '',
+ dialogDescription: '',
+ applyButtonText: '',
+ cancelButtonText: '',
+ enableMountIdEditor: false,
+ enableUsernameEditor: false,
+ enableExtendedEditor: false,
+ },
+ [RefreshCurrentAlarmsDialogMode.RefreshCurrentAlarmsTable]: {
+ dialogTitle: 'Do you want to refresh the Current Alarms List?',
+ dialogDescription: '',
+ applyButtonText: 'Yes',
+ cancelButtonText: 'Cancel',
+ enableMountIdEditor: true,
+ enableUsernameEditor: true,
+ enableExtendedEditor: true,
+ },
+};
+
+type RefreshCurrentAlarmsDialogComponentProps = Connect<undefined, typeof mapDispatch> & {
+ mode: RefreshCurrentAlarmsDialogMode;
+ onClose: () => void;
+};
+
+type RefreshCurrentAlarmsDialogComponentState = Fault & { isNameValid: boolean; isHostSet: boolean };
+
+class RefreshCurrentAlarmsDialogComponent extends React.Component<RefreshCurrentAlarmsDialogComponentProps, RefreshCurrentAlarmsDialogComponentState> {
+ render(): JSX.Element {
+ const setting = settings[this.props.mode];
+ return (
+ <Dialog open={this.props.mode !== RefreshCurrentAlarmsDialogMode.None}>
+ <DialogTitle id="form-dialog-title" aria-label={`${setting.dialogTitle.replace(/ /g, '-').toLowerCase()}-dialog`}>{setting.dialogTitle}</DialogTitle>
+ <DialogContent>
+ <DialogContentText>
+ {setting.dialogDescription}
+ </DialogContentText>
+ </DialogContent>
+ <DialogActions>
+ <Button aria-label="dialog-confirm-button" onClick={() => {
+ this.onRefresh();
+ }} color="inherit" > {setting.applyButtonText} </Button>
+ <Button aria-label="dialog-cancel-button" onClick={() => {
+ this.onCancel();
+ }} color="secondary"> {setting.cancelButtonText} </Button>
+ </DialogActions>
+ </Dialog>
+ );
+ }
+
+ private onRefresh = () => {
+ this.props.refreshCurrentAlarms();
+ this.props.onClose();
+ };
+
+ private onCancel = () => {
+ this.props.onClose();
+ };
+}
+
+export const RefreshCurrentAlarmsDialog = connect(undefined, mapDispatch)(RefreshCurrentAlarmsDialogComponent);
+export default RefreshCurrentAlarmsDialog; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentProblemsDialog.tsx b/sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentProblemsDialog.tsx
deleted file mode 100644
index e501ec0ad..000000000
--- a/sdnr/wt/odlux/apps/faultApp/src/components/refreshCurrentProblemsDialog.tsx
+++ /dev/null
@@ -1,117 +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 * as React from 'react';
-
-import Button from '@mui/material/Button';
-import Dialog from '@mui/material/Dialog';
-import DialogActions from '@mui/material/DialogActions';
-import DialogContent from '@mui/material/DialogContent';
-import DialogContentText from '@mui/material/DialogContentText';
-import DialogTitle from '@mui/material/DialogTitle';
-
-import { currentProblemsReloadAction } from '../handlers/currentProblemsHandler';
-import { IDispatcher, connect, Connect } from '../../../../framework/src/flux/connect';
-
-import { Fault } from '../models/fault';
-
-export enum RefreshCurrentProblemsDialogMode {
- None = "none",
- RefreshCurrentProblemsTable = "RefreshCurrentProblemsTable",
-}
-
-const mapDispatch = (dispatcher: IDispatcher) => ({
- refreshCurrentProblems: () => dispatcher.dispatch(currentProblemsReloadAction)
-});
-
-type DialogSettings = {
- dialogTitle: string,
- dialogDescription: string,
- applyButtonText: string,
- cancelButtonText: string,
- enableMountIdEditor: boolean,
- enableUsernameEditor: boolean,
- enableExtendedEditor: boolean,
-}
-
-const settings: { [key: string]: DialogSettings } = {
- [RefreshCurrentProblemsDialogMode.None]: {
- dialogTitle: "",
- dialogDescription: "",
- applyButtonText: "",
- cancelButtonText: "",
- enableMountIdEditor: false,
- enableUsernameEditor: false,
- enableExtendedEditor: false,
- },
- [RefreshCurrentProblemsDialogMode.RefreshCurrentProblemsTable]: {
- dialogTitle: "Do you want to refresh the Current Problems List?",
- dialogDescription: "",
- applyButtonText: "Yes",
- cancelButtonText: "Cancel",
- enableMountIdEditor: true,
- enableUsernameEditor: true,
- enableExtendedEditor: true,
- }
-}
-
-type RefreshCurrentProblemsDialogComponentProps = Connect<undefined, typeof mapDispatch> & {
- mode: RefreshCurrentProblemsDialogMode;
- onClose: () => void;
-};
-
-type RefreshCurrentProblemsDialogComponentState = Fault & { isNameValid: boolean, isHostSet: boolean };
-
-class RefreshCurrentProblemsDialogComponent extends React.Component<RefreshCurrentProblemsDialogComponentProps, RefreshCurrentProblemsDialogComponentState> {
- constructor(props: RefreshCurrentProblemsDialogComponentProps) {
- super(props);
- }
-
- render(): JSX.Element {
- const setting = settings[this.props.mode];
- return (
- <Dialog open={this.props.mode !== RefreshCurrentProblemsDialogMode.None}>
- <DialogTitle id="form-dialog-title" aria-label={`${setting.dialogTitle.replace(/ /g, "-").toLowerCase()}-dialog`}>{setting.dialogTitle}</DialogTitle>
- <DialogContent>
- <DialogContentText>
- {setting.dialogDescription}
- </DialogContentText>
- </DialogContent>
- <DialogActions>
- <Button aria-label="dialog-confirm-button" onClick={(event) => {
- this.onRefresh();
- }} color="inherit" > {setting.applyButtonText} </Button>
- <Button aria-label="dialog-cancel-button" onClick={(event) => {
- this.onCancel();
- }} color="secondary"> {setting.cancelButtonText} </Button>
- </DialogActions>
- </Dialog>
- );
- }
-
- private onRefresh = () => {
- this.props.refreshCurrentProblems();
- this.props.onClose();
- };
-
- private onCancel = () => {
- this.props.onClose();
- }
-}
-
-export const RefreshCurrentProblemsDialog = connect(undefined, mapDispatch)(RefreshCurrentProblemsDialogComponent);
-export default RefreshCurrentProblemsDialog; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/alarmLogEntriesHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/alarmLogEntriesHandler.ts
index 31b8259b2..bdd459669 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/alarmLogEntriesHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/alarmLogEntriesHandler.ts
@@ -15,7 +15,7 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import { createExternal,IExternalTableState } from '../../../../framework/src/components/material-table/utilities';
+import { createExternal, IExternalTableState } from '../../../../framework/src/components/material-table/utilities';
import { createSearchDataHandler } from '../../../../framework/src/utilities/elasticSearch';
import { Fault } from '../models/fault';
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/clearStuckAlarmsHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/clearStuckAlarmsHandler.ts
index 14634b4c4..0d5a8c70d 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/clearStuckAlarmsHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/clearStuckAlarmsHandler.ts
@@ -16,21 +16,22 @@
* ============LICENSE_END==========================================================================
*/
-import { IActionHandler } from "../../../../framework/src/flux/action"
-import { AreStuckAlarmsCleared } from "../actions/clearStuckAlarmsAction";
+import { IActionHandler } from '../../../../framework/src/flux/action';
+
+import { AreStuckAlarmsCleared } from '../actions/clearStuckAlarmsAction';
export interface IStuckAlarms {
- areAlarmsCleared: boolean
+ areAlarmsCleared: boolean;
}
const initialState: IStuckAlarms = {
- areAlarmsCleared: false
-}
+ areAlarmsCleared: false,
+};
export const stuckAlarmHandler: IActionHandler<IStuckAlarms> = (state = initialState, action) => {
- if (action instanceof AreStuckAlarmsCleared) {
- state = { ...state, areAlarmsCleared: action.isBusy }
- }
+ if (action instanceof AreStuckAlarmsCleared) {
+ state = { ...state, areAlarmsCleared: action.isBusy };
+ }
- return state;
-} \ No newline at end of file
+ return state;
+}; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/currentProblemsHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/currentAlarmsHandler.ts
index 3698a2798..70aa1c27e 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/currentProblemsHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/currentAlarmsHandler.ts
@@ -15,22 +15,22 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import { createExternal,IExternalTableState } from '../../../../framework/src/components/material-table/utilities';
+import { createExternal, IExternalTableState } from '../../../../framework/src/components/material-table/utilities';
import { createSearchDataHandler } from '../../../../framework/src/utilities/elasticSearch';
import { Fault } from '../models/fault';
-export interface ICurrentProblemsState extends IExternalTableState<Fault> { }
+export interface ICurrentAlarmsState extends IExternalTableState<Fault> { }
// create eleactic search data fetch handler
-const currentProblemsSearchHandler = createSearchDataHandler<Fault>('faultcurrent');
+const currentAlarmsSearchHandler = createSearchDataHandler<Fault>('faultcurrent');
export const {
- actionHandler: currentProblemsActionHandler,
- createActions: createCurrentProblemsActions,
- createProperties: createCurrentProblemsProperties,
- reloadAction: currentProblemsReloadAction,
+ actionHandler: currentAlarmsActionHandler,
+ createActions: createCurrentAlarmsActions,
+ createProperties: createCurrentAlarmsProperties,
+ reloadAction: currentAlarmsReloadAction,
// set value action, to change a value
-} = createExternal<Fault>(currentProblemsSearchHandler, appState => appState.fault.currentProblems);
+} = createExternal<Fault>(currentAlarmsSearchHandler, appState => appState.fault.currentAlarms);
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts
index 2ab1da2ed..e4a19ae5c 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts
@@ -17,22 +17,21 @@
*/
// main state handler
+import { IActionHandler } from '../../../../framework/src/flux/action';
import { combineActionHandler } from '../../../../framework/src/flux/middleware';
-
// ** do not remove **
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore';
-import { IActionHandler } from '../../../../framework/src/flux/action';
-import { IFaultNotifications, faultNotificationsHandler } from './notificationsHandler';
-import { ICurrentProblemsState, currentProblemsActionHandler } from './currentProblemsHandler';
-import { IAlarmLogEntriesState, alarmLogEntriesActionHandler } from './alarmLogEntriesHandler';
import { SetPanelAction } from '../actions/panelChangeActions';
-import { IFaultStatus, faultStatusHandler } from './faultStatusHandler';
-import { stuckAlarmHandler } from './clearStuckAlarmsHandler';
import { PanelId } from '../models/panelId';
+import { alarmLogEntriesActionHandler, IAlarmLogEntriesState } from './alarmLogEntriesHandler';
+import { currentAlarmsActionHandler, ICurrentAlarmsState } from './currentAlarmsHandler';
+import { faultStatusHandler, IFaultStatus } from './faultStatusHandler';
+import { faultNotificationsHandler, IFaultNotifications } from './notificationsHandler';
export interface IFaultAppStoreState {
- currentProblems: ICurrentProblemsState;
+ currentAlarms: ICurrentAlarmsState;
faultNotifications: IFaultNotifications;
alarmLogEntries: IAlarmLogEntriesState;
currentOpenPanel: PanelId | null;
@@ -44,7 +43,7 @@ const currentOpenPanelHandler: IActionHandler<PanelId | null> = (state = null, a
state = action.panelId;
}
return state;
-}
+};
declare module '../../../../framework/src/store/applicationStore' {
interface IApplicationStoreState {
@@ -53,7 +52,7 @@ declare module '../../../../framework/src/store/applicationStore' {
}
const actionHandlers = {
- currentProblems: currentProblemsActionHandler,
+ currentAlarms: currentAlarmsActionHandler,
faultNotifications: faultNotificationsHandler,
alarmLogEntries: alarmLogEntriesActionHandler,
currentOpenPanel: currentOpenPanelHandler,
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts
index 6fa95b685..21b033e6a 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultStatusHandler.ts
@@ -15,24 +15,25 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import { IActionHandler } from "../../../../framework/src/flux/action";
-import { SetFaultStatusAction } from "../actions/statusActions";
+import { IActionHandler } from '../../../../framework/src/flux/action';
+
+import { SetFaultStatusAction } from '../actions/statusActions';
export interface IFaultStatus {
- critical: number,
- major: number,
- minor: number,
- warning: number,
- isLoadingAlarmStatusChart: boolean,
- Connected: number,
- Connecting: number,
- Disconnected: number,
- Mounted: number,
- UnableToConnect: number,
- Undefined: number,
- Unmounted: number,
- total: number,
- isLoadingConnectionStatusChart: boolean
+ critical: number;
+ major: number;
+ minor: number;
+ warning: number;
+ isLoadingAlarmStatusChart: boolean;
+ Connected: number;
+ Connecting: number;
+ Disconnected: number;
+ Mounted: number;
+ UnableToConnect: number;
+ Undefined: number;
+ Unmounted: number;
+ total: number;
+ isLoadingConnectionStatusChart: boolean;
}
const faultStatusInit: IFaultStatus = {
@@ -49,7 +50,7 @@ const faultStatusInit: IFaultStatus = {
Undefined: 0,
Unmounted: 0,
total: 0,
- isLoadingConnectionStatusChart: false
+ isLoadingConnectionStatusChart: false,
};
export const faultStatusHandler: IActionHandler<IFaultStatus> = (state = faultStatusInit, action) => {
@@ -68,9 +69,9 @@ export const faultStatusHandler: IActionHandler<IFaultStatus> = (state = faultSt
Undefined: action.UndefinedCount,
Unmounted: action.UnmountedCount,
total: action.totalCount,
- isLoadingConnectionStatusChart: action.isLoadingConnectionStatusChart
- }
+ isLoadingConnectionStatusChart: action.isLoadingConnectionStatusChart,
+ };
}
return state;
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/notificationsHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/notificationsHandler.ts
index aa92d2a1c..3d960bfc4 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/notificationsHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/notificationsHandler.ts
@@ -16,6 +16,7 @@
* ============LICENSE_END==========================================================================
*/
import { IActionHandler } from '../../../../framework/src/flux/action';
+
import { AddFaultNotificationAction, ResetFaultNotificationsAction } from '../actions/notificationActions';
import { FaultAlarmNotification } from '../models/fault';
@@ -26,22 +27,22 @@ export interface IFaultNotifications {
const faultNotoficationsInit: IFaultNotifications = {
faults: [],
- since: new Date()
+ since: new Date(),
};
export const faultNotificationsHandler: IActionHandler<IFaultNotifications> = (state = faultNotoficationsInit, action) => {
if (action instanceof AddFaultNotificationAction) {
state = {
...state,
- faults: [...state.faults, action.fault]
+ faults: [...state.faults, action.fault],
};
- } else if (action instanceof ResetFaultNotificationsAction){
+ } else if (action instanceof ResetFaultNotificationsAction) {
state = {
...state,
faults: [],
- since: new Date()
+ since: new Date(),
};
}
return state;
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts b/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts
index 5f38e5fe9..c70253e58 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/models/fault.ts
@@ -25,7 +25,7 @@ export type Fault = {
severity: null | 'Warning' | 'Minor' | 'Major' | 'Critical' | 'NonAlarmed';
type: string;
sourceType?: string;
-}
+};
export type FaultAlarmNotification = {
id: string;
@@ -35,63 +35,63 @@ export type FaultAlarmNotification = {
objectId: string;
problem: string;
severity: string;
-}
+};
export type FaultAlarmNotificationWS = {
- "node-id": string;
- "data": {
- "counter": number;
- "time-stamp": string;
- "object-id-ref": string;
- "problem": string;
- "severity": null | 'Warning' | 'Minor' | 'Major' | 'Critical' | 'NonAlarmed';
+ 'node-id': string;
+ 'data': {
+ 'counter': number;
+ 'time-stamp': string;
+ 'object-id-ref': string;
+ 'problem': string;
+ 'severity': null | 'Warning' | 'Minor' | 'Major' | 'Critical' | 'NonAlarmed';
};
- "type": {
- "namespace": string;
- "revision": string;
- "type": string;
+ 'type': {
+ 'namespace': string;
+ 'revision': string;
+ 'type': string;
};
- "event-time": string;
-}
+ 'event-time': string;
+};
/**
* Fault status return type
*/
export type FaultsReturnType = {
- criticals: number,
- majors: number,
- minors: number,
- warnings: number,
- Connected: number,
- Connecting: number,
- Disconnected: number,
- Mounted: number,
- UnableToConnect: number,
- Undefined: number,
- Unmounted: number,
- total: number
+ criticals: number;
+ majors: number;
+ minors: 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,
- Connected: number,
- Connecting: number,
- Disconnected: number,
- Mounted: number,
- UnableToConnect: number,
- Undefined: number,
- Unmounted: number,
- total: number
+ Critical: number;
+ Major: number;
+ Minor: number;
+ Warning: number;
+ Connected: number;
+ Connecting: number;
+ Disconnected: number;
+ Mounted: number;
+ UnableToConnect: number;
+ Undefined: number;
+ Unmounted: number;
+ total: number;
};
export type Faults = {
- faults: FaultsReturnType,
- 'network-element-connections': FaultsReturnType
+ faults: FaultsReturnType;
+ 'network-element-connections': FaultsReturnType;
};
export type DeletedStuckAlarms = {
- nodenames: string[]
-} \ No newline at end of file
+ nodenames: string[];
+}; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/models/panelId.ts b/sdnr/wt/odlux/apps/faultApp/src/models/panelId.ts
index 186aa53d9..daebad0e5 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/models/panelId.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/models/panelId.ts
@@ -15,4 +15,4 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-export type PanelId = null | "CurrentProblem" | "AlarmNotifications" | "AlarmLog"; \ No newline at end of file
+export type PanelId = null | 'CurrentAlarms' | 'AlarmNotifications' | 'AlarmLog'; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
index ff901b097..ca1cfc171 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
@@ -17,92 +17,85 @@
*/
// app configuration and main entry point for the app
+import React from 'react';
+import { Redirect, Route, RouteComponentProps, Switch, withRouter } from 'react-router-dom';
-import * as React from "react";
-import { withRouter, RouteComponentProps, Route, Switch, Redirect } from 'react-router-dom';
-
-import connect, { Connect, IDispatcher } from '../../../framework/src/flux/connect';
-
-import { faBell } from '@fortawesome/free-solid-svg-icons'; // select app icon
+import { connect, Connect, IDispatcher } from '../../../framework/src/flux/connect';
import applicationManager from '../../../framework/src/services/applicationManager';
-import { subscribe, IFormatedMessage } from '../../../framework/src/services/notificationService';
-import { IApplicationStoreState } from "../../../framework/src/store/applicationStore";
-
+import { IFormatedMessage, subscribe } from '../../../framework/src/services/notificationService';
+import { IApplicationStoreState } from '../../../framework/src/store/applicationStore';
+
+import { AddFaultNotificationAction } from './actions/notificationActions';
+import { SetPanelAction } from './actions/panelChangeActions';
+import { refreshFaultStatusAsyncAction, SetFaultStatusAction } from './actions/statusActions';
+import DashboardHome from './components/dashboardHome';
+import { FaultStatus } from './components/faultStatus';
+import { createCurrentAlarmsActions, createCurrentAlarmsProperties, currentAlarmsReloadAction } from './handlers/currentAlarmsHandler';
import { faultAppRootHandler } from './handlers/faultAppRootHandler';
-import { FaultApplication } from "./views/faultApplication";
-
-import { FaultAlarmNotificationWS } from "./models/fault";
-import { PanelId } from "./models/panelId";
-
-import { SetPanelAction } from "./actions/panelChangeActions";
-import { AddFaultNotificationAction } from "./actions/notificationActions";
-
-import { createCurrentProblemsProperties, createCurrentProblemsActions, currentProblemsReloadAction } from "./handlers/currentProblemsHandler";
-import { FaultStatus } from "./components/faultStatus";
-import { refreshFaultStatusAsyncAction, SetFaultStatusAction } from "./actions/statusActions";
+import { FaultAlarmNotificationWS } from './models/fault';
+import { PanelId } from './models/panelId';
+import { FaultApplication } from './views/faultApplication';
-import DashboardHome from "./components/dashboardHome";
+const appIcon = require('./assets/icons/faultAppIcon.svg'); // select app icon
let currentMountId: string | undefined = undefined;
let currentSeverity: string | undefined = undefined;
let refreshInterval: ReturnType<typeof window.setInterval> | null = null;
const mapProps = (state: IApplicationStoreState) => ({
- currentProblemsProperties: createCurrentProblemsProperties(state),
+ currentAlarmsProperties: createCurrentAlarmsProperties(state),
});
-const mapDisp = (dispatcher: IDispatcher) => ({
- currentProblemsActions: createCurrentProblemsActions(dispatcher.dispatch, true),
+const mapDispatch = (dispatcher: IDispatcher) => ({
+ currentAlarmsActions: createCurrentAlarmsActions(dispatcher.dispatch, true),
setCurrentPanel: (panelId: PanelId) => dispatcher.dispatch(new SetPanelAction(panelId)),
});
-const FaultApplicationRouteAdapter = connect(mapProps, mapDisp)((props: RouteComponentProps<{ mountId?: string }> & Connect<typeof mapProps, typeof mapDisp>) => {
+const FaultApplicationRouteAdapter = connect(mapProps, mapDispatch)((props: RouteComponentProps<{ mountId?: string }> & Connect<typeof mapProps, typeof mapDispatch>) => {
if (currentMountId !== props.match.params.mountId) {
// route parameter has changed
currentMountId = props.match.params.mountId || undefined;
// Hint: This timeout is need, since it is not recommended to change the state while rendering is in progress !
window.setTimeout(() => {
if (currentMountId) {
- props.setCurrentPanel("CurrentProblem");
- props.currentProblemsActions.onFilterChanged("nodeId", currentMountId);
- if (!props.currentProblemsProperties.showFilter) {
- props.currentProblemsActions.onToggleFilter(false);
- props.currentProblemsActions.onRefresh();
- }
- else
- props.currentProblemsActions.onRefresh();
+ props.setCurrentPanel('CurrentAlarms');
+ props.currentAlarmsActions.onFilterChanged('nodeId', currentMountId);
+ if (!props.currentAlarmsProperties.showFilter) {
+ props.currentAlarmsActions.onToggleFilter(false);
+ props.currentAlarmsActions.onRefresh();
+ } else
+ props.currentAlarmsActions.onRefresh();
}
});
}
return (
<FaultApplication />
- )
+ );
});
-const FaulttApplicationAlarmStatusRouteAdapter = connect(mapProps, mapDisp)((props: RouteComponentProps<{ severity?: string }> & Connect<typeof mapProps, typeof mapDisp>) => {
+const FaultApplicationAlarmStatusRouteAdapter = connect(mapProps, mapDispatch)((props: RouteComponentProps<{ severity?: string }> & Connect<typeof mapProps, typeof mapDispatch>) => {
if (currentSeverity !== props.match.params.severity) {
currentSeverity = props.match.params.severity || undefined;
window.setTimeout(() => {
if (currentSeverity) {
- props.setCurrentPanel("CurrentProblem");
- props.currentProblemsActions.onFilterChanged("severity", currentSeverity);
- if (!props.currentProblemsProperties.showFilter) {
- props.currentProblemsActions.onToggleFilter(false);
- props.currentProblemsActions.onRefresh();
- }
- else
- props.currentProblemsActions.onRefresh();
+ props.setCurrentPanel('CurrentAlarms');
+ props.currentAlarmsActions.onFilterChanged('severity', currentSeverity);
+ if (!props.currentAlarmsProperties.showFilter) {
+ props.currentAlarmsActions.onToggleFilter(false);
+ props.currentAlarmsActions.onRefresh();
+ } else
+ props.currentAlarmsActions.onRefresh();
}
});
}
return (
<FaultApplication />
- )
+ );
});
const App = withRouter((props: RouteComponentProps) => (
<Switch>
- <Route path={`${props.match.path}/alarmStatus/:severity?`} component={FaulttApplicationAlarmStatusRouteAdapter} />
+ <Route path={`${props.match.path}/alarmStatus/:severity?`} component={FaultApplicationAlarmStatusRouteAdapter} />
<Route path={`${props.match.path}/:mountId?`} component={FaultApplicationRouteAdapter} />
<Redirect to={`${props.match.path}`} />
</Switch>
@@ -110,54 +103,48 @@ const App = withRouter((props: RouteComponentProps) => (
export function register() {
const applicationApi = applicationManager.registerApplication({
- name: "fault",
- icon: faBell,
+ name: 'fault',
+ icon: appIcon,
rootComponent: App,
rootActionHandler: faultAppRootHandler,
statusBarElement: FaultStatus,
dashbaordElement: DashboardHome,
- menuEntry: "Fault"
+ menuEntry: 'Fault',
});
let counter = 0;
// subscribe to the websocket notifications
- subscribe<FaultAlarmNotificationWS & IFormatedMessage>("problem-notification", (fault => {
+ subscribe<FaultAlarmNotificationWS & IFormatedMessage>('problem-notification', (fault => {
const store = applicationApi && applicationApi.applicationStore;
if (fault && store) {
store.dispatch(new AddFaultNotificationAction({
id: String(counter++),
- nodeName: fault["node-id"],
+ nodeName: fault['node-id'],
counter: +fault.data.counter,
- objectId: fault.data["object-id-ref"],
+ objectId: fault.data['object-id-ref'],
problem: fault.data.problem,
severity: fault.data.severity || '',
- timeStamp: fault.data["time-stamp"],
+ timeStamp: fault.data['time-stamp'],
}));
}
}));
applicationApi.applicationStoreInitialized.then(store => {
- store.dispatch(currentProblemsReloadAction);
+ store.dispatch(currentAlarmsReloadAction);
});
applicationApi.applicationStoreInitialized.then(store => {
store.dispatch(refreshFaultStatusAsyncAction);
});
- applicationApi.loginEvent.addHandler(e=>{
- refreshInterval = startRefreshInterval() as any;
- })
-
- applicationApi.logoutEvent.addHandler(e=>{
+ applicationApi.logoutEvent.addHandler(()=>{
applicationApi.applicationStoreInitialized.then(store => {
store.dispatch(new SetFaultStatusAction(0, 0, 0, 0, false, 0, 0, 0, 0, 0, 0, 0, 0, false));
clearInterval(refreshInterval!);
});
- })
-
-
+ });
function startRefreshInterval() {
const refreshFaultStatus = window.setInterval(() => {
@@ -170,4 +157,7 @@ export function register() {
return refreshFaultStatus;
}
+ applicationApi.loginEvent.addHandler(()=>{
+ refreshInterval = startRefreshInterval() as any;
+ });
}
diff --git a/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts b/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts
index 880ed7715..0c7a215f8 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/services/faultStatusService.ts
@@ -15,14 +15,15 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import { requestRest } from "../../../../framework/src/services/restService";
-import { Result, SingeResult } from "../../../../framework/src/models/elasticSearch";
-import { FaultType, Faults, DeletedStuckAlarms } from "../models/fault";
+import { Result } from '../../../../framework/src/models/elasticSearch';
+import { requestRest } from '../../../../framework/src/services/restService';
+
+import { Faults, FaultType } from '../models/fault';
export const getFaultStateFromDatabase = async (): Promise<FaultType | null> => {
const path = 'rests/operations/data-provider:read-status';
- const result = await requestRest<Result<Faults>>(path, { method: "POST" });
+ const result = await requestRest<Result<Faults>>(path, { method: 'POST' });
let faultType: FaultType = {
Critical: 0,
@@ -36,34 +37,33 @@ export const getFaultStateFromDatabase = async (): Promise<FaultType | null> =>
UnableToConnect: 0,
Undefined: 0,
Unmounted: 0,
- total: 0
- }
+ total: 0,
+ };
let faults: Faults[] | null = null;
- if (result && result["data-provider:output"] && result["data-provider:output"].data) {
- faults = result["data-provider:output"].data;
+ if (result && result['data-provider:output'] && result['data-provider:output'].data) {
+ faults = result['data-provider:output'].data;
faultType = {
Critical: faults[0].faults.criticals,
Major: faults[0].faults.majors,
Minor: faults[0].faults.minors,
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,
- }
+ 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,
+ };
}
return faultType;
-}
+};
export const clearStuckAlarms = async (nodeNames: string[]) => {
- const path = 'rests/operations/devicemanager:clear-current-fault-by-nodename'
- const result = await requestRest<any>(path, { method: 'Post', body: JSON.stringify({ input: { nodenames: nodeNames } }) })
+ const path = 'rests/operations/devicemanager:clear-current-fault-by-nodename';
+ const result = await requestRest<any>(path, { method: 'Post', body: JSON.stringify({ input: { nodenames: nodeNames } }) });
return result;
-
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
index b9cd5e4da..b9f115ed7 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
@@ -15,44 +15,37 @@
* the License.
* ============LICENSE_END==========================================================================
*/
-import * as React from 'react';
+import React from 'react';
+import { RouteComponentProps, withRouter } from 'react-router-dom';
-import { withRouter, RouteComponentProps } from 'react-router-dom';
-
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
-
-import { MaterialTable, ColumnType, MaterialTableCtorType } from '../../../../framework/src/components/material-table';
-import { Panel } from '../../../../framework/src/components/material-ui';
+import Refresh from '@mui/icons-material/Refresh';
+import Sync from '@mui/icons-material/Sync';
+import { AppBar, Tab, Tabs } from '@mui/material';
+import { ColumnType, MaterialTable, MaterialTableCtorType } from '../../../../framework/src/components/material-table';
+import { connect, Connect, IDispatcher } from '../../../../framework/src/flux/connect';
import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore';
-import connect, { Connect, IDispatcher } from '../../../../framework/src/flux/connect';
-import { Fault, FaultAlarmNotification } from '../models/fault';
-import { PanelId } from '../models/panelId';
-
-import { createCurrentProblemsProperties, createCurrentProblemsActions, currentProblemsReloadAction } from '../handlers/currentProblemsHandler';
-import { createAlarmLogEntriesProperties, createAlarmLogEntriesActions, alarmLogEntriesReloadAction } from '../handlers/alarmLogEntriesHandler';
import { setPanelAction } from '../actions/panelChangeActions';
-import { Tooltip, IconButton, AppBar, Tabs, Tab } from '@mui/material';
-import Sync from '@mui/icons-material/Sync';
-import Refresh from '@mui/icons-material/Refresh';
-
import ClearStuckAlarmsDialog, { ClearStuckAlarmsDialogMode } from '../components/clearStuckAlarmsDialog';
import RefreshAlarmLogDialog, { RefreshAlarmLogDialogMode } from '../components/refreshAlarmLogDialog';
-import RefreshCurrentProblemsDialog, { RefreshCurrentProblemsDialogMode } from '../components/refreshCurrentProblemsDialog';
+import RefreshCurrentAlarmsDialog, { RefreshCurrentAlarmsDialogMode } from '../components/refreshCurrentAlarmsDialog';
+import { alarmLogEntriesReloadAction, createAlarmLogEntriesActions, createAlarmLogEntriesProperties } from '../handlers/alarmLogEntriesHandler';
+import { createCurrentAlarmsActions, createCurrentAlarmsProperties, currentAlarmsReloadAction } from '../handlers/currentAlarmsHandler';
+import { Fault, FaultAlarmNotification } from '../models/fault';
+import { PanelId } from '../models/panelId';
const mapProps = (state: IApplicationStoreState) => ({
panelId: state.fault.currentOpenPanel,
- currentProblemsProperties: createCurrentProblemsProperties(state),
+ currentAlarmsProperties: createCurrentAlarmsProperties(state),
faultNotifications: state.fault.faultNotifications,
- alarmLogEntriesProperties: createAlarmLogEntriesProperties(state)
+ alarmLogEntriesProperties: createAlarmLogEntriesProperties(state),
});
const mapDisp = (dispatcher: IDispatcher) => ({
- currentProblemsActions: createCurrentProblemsActions(dispatcher.dispatch),
+ currentAlarmsActions: createCurrentAlarmsActions(dispatcher.dispatch),
alarmLogEntriesActions: createAlarmLogEntriesActions(dispatcher.dispatch),
- reloadCurrentProblems: () => dispatcher.dispatch(currentProblemsReloadAction),
+ reloadCurrentAlarms: () => dispatcher.dispatch(currentAlarmsReloadAction),
reloadAlarmLogEntries: () => dispatcher.dispatch(alarmLogEntriesReloadAction),
switchActivePanel: (panelId: PanelId) => {
dispatcher.dispatch(setPanelAction(panelId));
@@ -62,63 +55,59 @@ const mapDisp = (dispatcher: IDispatcher) => ({
type FaultApplicationComponentProps = RouteComponentProps & Connect<typeof mapProps, typeof mapDisp>;
type FaultApplicationState = {
- clearAlarmDialogMode: ClearStuckAlarmsDialogMode,
- stuckAlarms: string[],
- refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode,
- refreshCurrentProblemsEditorMode: RefreshCurrentProblemsDialogMode
-}
+ clearAlarmDialogMode: ClearStuckAlarmsDialogMode;
+ stuckAlarms: string[];
+ refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode;
+ refreshCurrentAlarmsEditorMode: RefreshCurrentAlarmsDialogMode;
+};
const FaultTable = MaterialTable as MaterialTableCtorType<Fault>;
const FaultAlarmNotificationTable = MaterialTable as MaterialTableCtorType<FaultAlarmNotification>;
-let currentProblemsInitalSorted = false;
+let currentAlarmsInitalSorted = false;
let alarmLogInitialSorted = false;
-class FaultApplicationComponent extends React.Component<FaultApplicationComponentProps, FaultApplicationState>{
-
- /**
- *
- */
+class FaultApplicationComponent extends React.Component<FaultApplicationComponentProps, FaultApplicationState> {
constructor(props: FaultApplicationComponentProps) {
super(props);
this.state = {
clearAlarmDialogMode: ClearStuckAlarmsDialogMode.None,
stuckAlarms: [],
refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode.None,
- refreshCurrentProblemsEditorMode: RefreshCurrentProblemsDialogMode.None
- }
+ refreshCurrentAlarmsEditorMode: RefreshCurrentAlarmsDialogMode.None,
+ };
}
onDialogClose = () => {
- this.setState({ clearAlarmDialogMode: ClearStuckAlarmsDialogMode.None, stuckAlarms: [] })
- }
+ this.setState({ clearAlarmDialogMode: ClearStuckAlarmsDialogMode.None, stuckAlarms: [] });
+ };
onDialogOpen = () => {
- const stuckAlarms = [...new Set(this.props.currentProblemsProperties.rows.map(item => item.nodeId))];
- this.setState({ clearAlarmDialogMode: ClearStuckAlarmsDialogMode.Show, stuckAlarms: stuckAlarms })
- }
+ const stuckAlarms = [...new Set(this.props.currentAlarmsProperties.rows.map(item => item.nodeId))];
+ this.setState({ clearAlarmDialogMode: ClearStuckAlarmsDialogMode.Show, stuckAlarms: stuckAlarms });
+ };
private onHandleTabChange = (event: React.SyntheticEvent, newValue: PanelId) => {
this.onToggleTabs(newValue);
- }
+ };
private onToggleTabs = (panelId: PanelId) => {
const nextActivePanel = panelId;
this.props.switchActivePanel(nextActivePanel);
switch (nextActivePanel) {
- case 'CurrentProblem':
- if (!currentProblemsInitalSorted) {
- currentProblemsInitalSorted = true;
- this.props.currentProblemsActions.onHandleExplicitRequestSort("timestamp", "desc");
+ case 'CurrentAlarms':
+ if (!currentAlarmsInitalSorted) {
+ currentAlarmsInitalSorted = true;
+ this.props.currentAlarmsActions.onHandleExplicitRequestSort('timestamp', 'desc');
} else {
- this.props.reloadCurrentProblems();
+ this.props.reloadCurrentAlarms();
}
break;
case 'AlarmLog':
if (!alarmLogInitialSorted) {
alarmLogInitialSorted = true;
- this.props.alarmLogEntriesActions.onHandleExplicitRequestSort("timestamp", "desc");
+ this.props.alarmLogEntriesActions.onHandleExplicitRequestSort('timestamp', 'desc');
} else {
this.props.reloadAlarmLogEntries();
}
@@ -136,27 +125,27 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
render(): JSX.Element {
const clearAlarmsAction = {
- icon: Sync, tooltip: 'Clear stuck alarms', ariaLabel:'clear-stuck-alarms', onClick: this.onDialogOpen
+ icon: Sync, tooltip: 'Clear stuck alarms', ariaLabel:'clear-stuck-alarms', onClick: this.onDialogOpen,
};
- const refreshCurrentProblemsAction = {
- icon: Refresh, tooltip: 'Refresh Current Problems List', ariaLabel:'refresh', onClick: () => {
+ const refreshCurrentAlarmsAction = {
+ icon: Refresh, tooltip: 'Refresh Current Alarms List', ariaLabel:'refresh', onClick: () => {
this.setState({
- refreshCurrentProblemsEditorMode: RefreshCurrentProblemsDialogMode.RefreshCurrentProblemsTable
+ refreshCurrentAlarmsEditorMode: RefreshCurrentAlarmsDialogMode.RefreshCurrentAlarmsTable,
});
- }
+ },
};
const refreshAlarmLogAction = {
icon: Refresh, tooltip: 'Refresh Alarm log table', ariaLabel:'refresh', onClick: () => {
this.setState({
- refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode.RefreshAlarmLogTable
+ refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode.RefreshAlarmLogTable,
});
- }
+ },
};
- const areFaultsAvailable = this.props.currentProblemsProperties.rows && this.props.currentProblemsProperties.rows.length > 0
- const customActions = areFaultsAvailable ? [clearAlarmsAction, refreshCurrentProblemsAction] : [refreshCurrentProblemsAction];
+ const areFaultsAvailable = this.props.currentAlarmsProperties.rows && this.props.currentAlarmsProperties.rows.length > 0;
+ const customActions = areFaultsAvailable ? [clearAlarmsAction, refreshCurrentAlarmsAction] : [refreshCurrentAlarmsAction];
const { panelId: activePanelId } = this.props;
@@ -164,26 +153,26 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
<>
<AppBar enableColorOnDark position="static" >
<Tabs indicatorColor="secondary" textColor="inherit" value={activePanelId} onChange={this.onHandleTabChange} aria-label="fault-tabs">
- <Tab aria-label="current-problem-list-tab" label="Current Problem List" value="CurrentProblem" />
+ <Tab aria-label="current-alarms-list-tab" label="Current Alarms" value="CurrentAlarms" />
<Tab aria-label="alarm-notifications-list-tab" label={`Alarm Notifications (${this.props.faultNotifications.faults.length})`} value="AlarmNotifications" />
<Tab aria-label="alarm-log-tab" label="Alarm Log" value="AlarmLog" />
</Tabs>
</AppBar>
{
- activePanelId === 'CurrentProblem' &&
+ activePanelId === 'CurrentAlarms' &&
<>
- <FaultTable stickyHeader tableId="current-problems-table" idProperty="id" customActionButtons={customActions} columns={[
+ <FaultTable stickyHeader tableId="current-alarms-table" idProperty="id" customActionButtons={customActions} columns={[
// { 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 },
- ]} {...this.props.currentProblemsProperties} {...this.props.currentProblemsActions} />
- <RefreshCurrentProblemsDialog
- mode={this.state.refreshCurrentProblemsEditorMode}
- onClose={this.onCloseRefreshCurrentProblemsDialog}
+ { 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 },
+ ]} {...this.props.currentAlarmsProperties} {...this.props.currentAlarmsActions} />
+ <RefreshCurrentAlarmsDialog
+ mode={this.state.refreshCurrentAlarmsEditorMode}
+ onClose={this.onCloseRefreshCurrentAlarmsDialog}
/>
</>
}
@@ -191,12 +180,12 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
<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: "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', type: ColumnType.text },
+ { property: 'timeStamp', title: 'Timestamp', type: ColumnType.text },
+ { property: 'nodeName', title: 'Node Name', type: ColumnType.text },
+ { property: 'counter', title: 'Count', width: '100px', type: ColumnType.numeric },
+ { property: 'objectId', title: 'Object Id', type: ColumnType.text },
+ { property: 'problem', title: 'Alarm Type', type: ColumnType.text },
]} />
}
@@ -205,13 +194,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: "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: "sourceType", title: "Source", width: "140px" },
+ { 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: 'sourceType', title: 'Source', width: '140px' },
]} {...this.props.alarmLogEntriesProperties} {...this.props.alarmLogEntriesActions} />
<RefreshAlarmLogDialog
mode={this.state.refreshAlarmLogEditorMode}
@@ -224,34 +213,34 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
this.state.clearAlarmDialogMode !== ClearStuckAlarmsDialogMode.None && <ClearStuckAlarmsDialog mode={this.state.clearAlarmDialogMode} numberDevices={this.state.stuckAlarms.length} stuckAlarms={this.state.stuckAlarms} onClose={this.onDialogClose} />
}
</>
- )
-
- };
+ );
+ }
public componentDidMount() {
if (this.props.panelId === null) { //set default tab if none is set
- this.onToggleTabs("CurrentProblem");
- }else{
+ this.onToggleTabs('CurrentAlarms');
+ } else {
this.onToggleTabs(this.props.panelId);
}
}
- private renderIcon = (props: { rowData: Fault | FaultAlarmNotification }) => {
- return (
- <FontAwesomeIcon icon={faExclamationTriangle} />
- );
- };
+ // private renderIcon = (props: { rowData: Fault | FaultAlarmNotification }) => {
+ // return (
+ // <FontAwesomeIcon icon={faExclamationTriangle} />
+ // );
+ // };
private onCloseRefreshAlarmLogDialog = () => {
this.setState({
- refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode.None
+ refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode.None,
});
- }
- private onCloseRefreshCurrentProblemsDialog = () => {
+ };
+
+ private onCloseRefreshCurrentAlarmsDialog = () => {
this.setState({
- refreshCurrentProblemsEditorMode: RefreshCurrentProblemsDialogMode.None
+ refreshCurrentAlarmsEditorMode: RefreshCurrentAlarmsDialogMode.None,
});
- }
+ };
}
export const FaultApplication = withRouter(connect(mapProps, mapDisp)(FaultApplicationComponent));
diff --git a/sdnr/wt/odlux/apps/faultApp/tsconfig.json b/sdnr/wt/odlux/apps/faultApp/tsconfig.json
index a66b5d828..ca65092e0 100644
--- a/sdnr/wt/odlux/apps/faultApp/tsconfig.json
+++ b/sdnr/wt/odlux/apps/faultApp/tsconfig.json
@@ -4,7 +4,7 @@
"outDir": "./dist",
"sourceMap": true,
"forceConsistentCasingInFileNames": true,
- "allowSyntheticDefaultImports": false,
+ "allowSyntheticDefaultImports": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"noFallthroughCasesInSwitch": true,
diff --git a/sdnr/wt/odlux/apps/faultApp/webpack.config.js b/sdnr/wt/odlux/apps/faultApp/webpack.config.js
index d34d31c91..bc26de1cb 100644
--- a/sdnr/wt/odlux/apps/faultApp/webpack.config.js
+++ b/sdnr/wt/odlux/apps/faultApp/webpack.config.js
@@ -57,6 +57,16 @@ module.exports = (env) => {
use: [{
loader: "babel-loader"
}]
+ },{
+ //don't minify images
+ test: /\.(png|gif|jpg|svg)$/,
+ use: [{
+ loader: 'url-loader',
+ options: {
+ limit: 10,
+ name: './images/[name].[ext]'
+ }
+ }]
}]
},
optimization: {
@@ -125,27 +135,27 @@ module.exports = (env) => {
},
proxy: {
"/oauth2/": {
- target: "http://sdnr:8181",
+ target: "http://sdnc-web:8080",
secure: false
},
"/database/": {
- target: "http://sdnr:8181",
+ target: "http://sdnc-web:8080",
secure: false
},
"/restconf/": {
- target: "http://sdnr:8181",
+ target: "http://sdnc-web:8080",
secure: false
},
"/rests/": {
- target: "http://sdnr:8181",
+ target: "http://sdnc-web:8080",
secure: false
},
"/help/": {
- target: "http://sdnr:8181",
+ target: "http://sdnc-web:8080",
secure: false
},
"/websocket": {
- target: "http://sdnr:8181",
+ target: "http://sdnc-web:8080",
ws: true,
changeOrigin: true,
secure: false