From 2fefa11aeac3004b898f3ef707925c2612e39335 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 24 Dec 2018 16:55:20 +0300 Subject: [PATCH] problems panel: enable acknowledges --- src/panel-triggers/components/Modal.tsx | 4 +++- src/panel-triggers/components/ProblemDetails.tsx | 9 ++++++++- src/panel-triggers/components/Problems.tsx | 7 +++++++ src/panel-triggers/triggers_panel_ctrl.js | 4 ++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/panel-triggers/components/Modal.tsx b/src/panel-triggers/components/Modal.tsx index 5c63a04..69064da 100644 --- a/src/panel-triggers/components/Modal.tsx +++ b/src/panel-triggers/components/Modal.tsx @@ -4,7 +4,7 @@ import ReactDOM from 'react-dom'; interface ModalProps { isOpen?: boolean; withBackdrop?: boolean; - onSubmit: (data?: AckProblemData) => void; + onSubmit: (data?: AckProblemData) => Promise | any; onClose?: () => void; } @@ -42,6 +42,8 @@ export class Modal extends PureComponent { console.log('submit', this.state.value); this.props.onSubmit({ message: this.state.value + }).then(() => { + this.dismiss(); }); } diff --git a/src/panel-triggers/components/ProblemDetails.tsx b/src/panel-triggers/components/ProblemDetails.tsx index e6b5fc5..59bbde5 100644 --- a/src/panel-triggers/components/ProblemDetails.tsx +++ b/src/panel-triggers/components/ProblemDetails.tsx @@ -11,6 +11,7 @@ interface ProblemDetailsProps extends RTRow { rootWidth: number; timeRange: GFTimeRange; getProblemEvents: (problem: Trigger) => Promise; + onProblemAck: (problem: Trigger, data: AckProblemData) => Promise | any; } interface ProblemDetailsState { @@ -47,7 +48,13 @@ export default class ProblemDetails extends PureComponent { const problem = this.props.original as Trigger; - console.log(problem.lastEvent && problem.lastEvent.eventid, data); + console.log('acknowledge: ', problem.lastEvent && problem.lastEvent.eventid, data); + return this.props.onProblemAck(problem, data).then(result => { + this.closeAckDialog(); + }).catch(err => { + console.log(err); + this.closeAckDialog(); + }); } showAckDialog = () => { diff --git a/src/panel-triggers/components/Problems.tsx b/src/panel-triggers/components/Problems.tsx index 840e68f..13a3cbc 100644 --- a/src/panel-triggers/components/Problems.tsx +++ b/src/panel-triggers/components/Problems.tsx @@ -4,6 +4,7 @@ import * as utils from '../../datasource-zabbix/utils'; import { ProblemsPanelOptions, Trigger, ZBXEvent, GFTimeRange, RTCell } from '../types'; import EventTag from './EventTag'; import ProblemDetails from './ProblemDetails'; +import { AckProblemData } from './Modal'; export interface ProblemListProps { problems: Trigger[]; @@ -11,6 +12,7 @@ export interface ProblemListProps { loading?: boolean; timeRange?: GFTimeRange; getProblemEvents: (ids: string[]) => ZBXEvent[]; + onProblemAck: (problem: Trigger, data: AckProblemData) => void; } interface ProblemListState { @@ -34,6 +36,10 @@ export class ProblemList extends PureComponent { + return this.props.onProblemAck(problem, data); + } + buildColumns() { const result = []; const options = this.props.panelOptions; @@ -99,6 +105,7 @@ export class ProblemList extends PureComponent } expanded={this.getExpandedPage(this.state.page)} diff --git a/src/panel-triggers/triggers_panel_ctrl.js b/src/panel-triggers/triggers_panel_ctrl.js index 34ab56f..ba1f18d 100644 --- a/src/panel-triggers/triggers_panel_ctrl.js +++ b/src/panel-triggers/triggers_panel_ctrl.js @@ -732,6 +732,10 @@ export class TriggerPanelCtrl extends PanelCtrl { panelOptions, timeRange: { timeFrom, timeTo }, getProblemEvents: ctrl.getProblemEvents.bind(ctrl), + onProblemAck: (trigger, data) => { + const message = data.message; + return ctrl.acknowledgeTrigger(trigger, message); + } }; const problemsReactElem = React.createElement(ProblemList, problemsListProps); ReactDOM.render(problemsReactElem, elem.find('.panel-content')[0]);