From 21e10bd59dc6c3094337c8340a28a588ddd7cfa4 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Apr 22 2019 14:59:02 +0000 Subject: Ticket 50327 - Add replication conflict support to UI Description: Added a page under the monitor tab to view and management replication conflict and glue entries. https://pagure.io/389-ds-base/issue/50327 Reviewed by: spichugi(Thanks!) --- diff --git a/src/cockpit/389-console/src/css/ds.css b/src/cockpit/389-console/src/css/ds.css index e0ceeb8..1ad8d5c 100644 --- a/src/cockpit/389-console/src/css/ds.css +++ b/src/cockpit/389-console/src/css/ds.css @@ -701,8 +701,9 @@ td { width: 450px; } -.ds-modal-wide { - min-width: 850px; +.ds-modal-wide .modal-content{ + width: 850px !important; + min-width: 850px !important; vertical-align: middle; } @@ -1025,8 +1026,9 @@ td { line-height: 0; } -.ds-accordian-div { +.ds-modal-row { margin-left: 20px; + margin-right: 0px !important; } .ds-chaining-list { @@ -1105,6 +1107,24 @@ textarea { overflow-y: scroll; } +.ds-conflict { + margin-top: 5px; + padding-top: 5px; + vertical-align: top; + width: 375px; + height: 275px; + max-height: 350px !important; + white-space: pre; + line-height: 1.5; + font-family: monospace !important; + overflow-y: auto; + overflow-x: scroll; +} + +.ds-conflict-btn { + width: 110px; +} + option { color: #181818; } diff --git a/src/cockpit/389-console/src/lib/database/chaining.jsx b/src/cockpit/389-console/src/lib/database/chaining.jsx index f20fca6..3dd3ec4 100644 --- a/src/cockpit/389-console/src/lib/database/chaining.jsx +++ b/src/cockpit/389-console/src/lib/database/chaining.jsx @@ -1041,7 +1041,7 @@ export class ChainingConfig extends React.Component {
-
+
diff --git a/src/cockpit/389-console/src/lib/monitor/monitorModals.jsx b/src/cockpit/389-console/src/lib/monitor/monitorModals.jsx index a63c67a..5593cb0 100644 --- a/src/cockpit/389-console/src/lib/monitor/monitorModals.jsx +++ b/src/cockpit/389-console/src/lib/monitor/monitorModals.jsx @@ -491,6 +491,165 @@ class WinsyncAgmtDetailsModal extends React.Component { } } +class ConflictCompareModal extends React.Component { + render() { + const { + showModal, + conflictEntry, + validEntry, + swapFunc, + convertFunc, + deleteFunc, + handleConvertChange, + closeHandler, + } = this.props; + + let ignoreAttrs = ['createtimestamp', 'creatorsname', 'modifytimestamp', + 'modifiersname', 'entryid', 'entrydn', 'parentid', 'numsubordinates']; + let conflict = "dn: " + conflictEntry.dn + "\n"; + let valid = "dn: " + validEntry.dn + "\n"; + let conflictChildren = "0"; + let validChildren = "0"; + + for (const key in conflictEntry.attrs) { + if (key == "numsubordinates") { + conflictChildren = conflictEntry.attrs[key]; + } + if (!ignoreAttrs.includes(key)) { + for (let attr of conflictEntry.attrs[key]) { + conflict += key + ": " + attr + "\n"; + } + } + } + for (const key in validEntry.attrs) { + if (key == "numsubordinates") { + validChildren = {validEntry.attrs[key]}; + } + if (!ignoreAttrs.includes(key)) { + for (let attr of validEntry.attrs[key]) { + valid += key + ": " + attr + "\n"; + } + } + } + + return ( + +
+ + + + Resolve Replication Conflicts + + + +
+
+ + + +

Conflict Entry

+
+ +