diff --git a/pandora_console/include/rest-api/index.php b/pandora_console/include/rest-api/index.php index a2503accef..06c789bf4c 100644 --- a/pandora_console/include/rest-api/index.php +++ b/pandora_console/include/rest-api/index.php @@ -262,57 +262,7 @@ if ($getVisualConsole === true) { echo json_encode($result); return; } else if ($getAllVisualConsole === true) { - // Extract all VC except own. - $result = db_get_all_rows_filter( - 'tlayout', - 'id != '.(int) $visualConsole, - [ - 'id', - 'name', - ] - ); - - // Extract all VC for each node. - if (is_metaconsole() === true) { - enterprise_include_once('include/functions_metaconsole.php'); - $meta_servers = metaconsole_get_servers(); - foreach ($meta_servers as $server) { - if (metaconsole_load_external_db($server) !== NOERR) { - metaconsole_restore_db(); - continue; - } - - $node_visual_maps = db_get_all_rows_filter( - 'tlayout', - [], - [ - 'id', - 'name', - ] - ); - - if (isset($node_visual_maps) === true - && is_array($node_visual_maps) === true - ) { - foreach ($node_visual_maps as $node_visual_map) { - // Add nodeID. - $node_visual_map['nodeId'] = (int) $server['id']; - - // Name = vc_name - (node). - $node_visual_map['name'] = $node_visual_map['name']; - $node_visual_map['name'] .= ' - ('; - $node_visual_map['name'] .= $server['server_name'].')'; - - $result[] = $node_visual_map; - } - } - - metaconsole_restore_db(); - } - } - - echo json_encode(io_safe_output($result)); - return; + // TODO: Remove. } else if ($getImagesVisualConsole) { // TODO: Remove. } else if ($autocompleteAgentsVisualConsole) { diff --git a/pandora_console/include/rest-api/models/VisualConsole/Item.php b/pandora_console/include/rest-api/models/VisualConsole/Item.php index 9c22b4cd3e..e3152ddcae 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Item.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Item.php @@ -1912,6 +1912,14 @@ class Item extends CachedModel break; case 'general': + $inputs[] = [ + 'arguments' => [ + 'type' => 'hidden', + 'name' => 'tabGeneral', + 'value' => true, + ], + ]; + // Size. $inputs[] = [ 'block_id' => 'size-item', @@ -2100,4 +2108,203 @@ class Item extends CachedModel } + /** + * Get all VC except own. + * + * @param integer $id Id Visual Console. + * + * @return array Array all VCs. + */ + public function getAllVisualConsole(int $id):array + { + // Extract all VC except own. + $result = db_get_all_rows_filter( + 'tlayout', + 'id != '.(int) $id, + [ + 'id', + 'name', + ] + ); + + // Extract all VC for each node. + if (is_metaconsole() === true) { + enterprise_include_once('include/functions_metaconsole.php'); + $meta_servers = metaconsole_get_servers(); + foreach ($meta_servers as $server) { + if (metaconsole_load_external_db($server) !== NOERR) { + metaconsole_restore_db(); + continue; + } + + $node_visual_maps = db_get_all_rows_filter( + 'tlayout', + [], + [ + 'id', + 'name', + ] + ); + + if (isset($node_visual_maps) === true + && is_array($node_visual_maps) === true + ) { + foreach ($node_visual_maps as $node_visual_map) { + // Add nodeID. + $node_visual_map['nodeId'] = (int) $server['id']; + + // Name = vc_name - (node). + $node_visual_map['name'] = $node_visual_map['name']; + $node_visual_map['name'] .= ' - ('; + $node_visual_map['name'] .= $server['server_name'].')'; + + $result[] = $node_visual_map; + } + } + + metaconsole_restore_db(); + } + } + + if ($result === false && $result === '') { + $result = []; + } + + return $result; + } + + + /** + * Inputs for Linked Visual Console. + * + * @param array $values Array values item. + * + * @return array Inputs. + */ + public function inputsLinkedVisualConsole(array $values):array + { + // LinkConsoleInputGroup. + $fields = self::getAllVisualConsole($values['vCId']); + \array_unshift($fields, ['id' => 0, 'name' => __('None')]); + + $getAllVisualConsoleValue = $values['linkedLayoutId']; + if (\is_metaconsole() === true) { + $getAllVisualConsoleValue = $values['linkedLayoutId']; + $getAllVisualConsoleValue .= '|'; + $getAllVisualConsoleValue .= $values['linkedLayoutNodeId']; + } + + $inputs[] = [ + 'label' => __('Linked visual console'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'getAllVisualConsole', + 'selected' => $getAllVisualConsoleValue, + 'script' => 'linkedVisualConsoleChange()', + 'return' => true, + ], + ]; + + $inputs[] = [ + 'arguments' => [ + 'type' => 'hidden', + 'name' => 'linkedLayoutId', + 'value' => $values['linkedLayoutId'], + ], + ]; + + $inputs[] = [ + 'arguments' => [ + 'type' => 'hidden', + 'name' => 'linkedLayoutNodeId', + 'value' => $values['linkedLayoutNodeId'], + ], + ]; + + // Initial hidden. + $hiddenType = true; + $hiddenWeight = true; + $hiddenCritical = true; + $hiddenWarning = true; + if (isset($values['linkedLayoutId']) === true + && $values['linkedLayoutId'] !== 0 + ) { + $hiddenType = false; + if ($values['linkedLayoutStatusType'] === 'service') { + $hiddenCritical = false; + $hiddenWarning = false; + } + + if ($values['linkedLayoutStatusType'] === 'weight') { + $hiddenWeight = false; + } + } + + // Type of the status calculation of the linked visual console. + $fields = [ + 'default' => __('By default'), + 'weight' => __('By status weight'), + 'service' => __('By critical elements'), + ]; + + $inputs[] = [ + 'id' => 'li-linkedLayoutStatusType', + 'hidden' => $hiddenType, + 'label' => __( + 'Type of the status calculation of the linked visual console' + ), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'linkedLayoutStatusType', + 'selected' => $values['linkedLayoutStatusType'], + 'script' => 'linkedVisualConsoleTypeChange()', + 'return' => true, + ], + ]; + + // Linked visual console weight. + $inputs[] = [ + 'id' => 'li-linkedLayoutStatusTypeWeight', + 'hidden' => $hiddenWeight, + 'label' => __('Linked visual console weight'), + 'arguments' => [ + 'name' => 'linkedLayoutStatusTypeWeight', + 'type' => 'number', + 'value' => $values['linkedLayoutStatusTypeWeight'], + 'return' => true, + ], + ]; + + // Critical weight. + $inputs[] = [ + 'id' => 'li-linkedLayoutStatusTypeCriticalThreshold', + 'hidden' => $hiddenCritical, + 'label' => __('Critical weight'), + 'arguments' => [ + 'name' => 'linkedLayoutStatusTypeCriticalThreshold', + 'type' => 'number', + 'value' => $values['linkedLayoutStatusTypeCriticalThreshold'], + 'return' => true, + ], + ]; + + // Warning weight. + $inputs[] = [ + 'id' => 'li-linkedLayoutStatusTypeWarningThreshold', + 'hidden' => $hiddenWarning, + 'label' => __('Warning weight'), + 'arguments' => [ + 'name' => 'linkedLayoutStatusTypeWarningThreshold', + 'type' => 'number', + 'value' => $values['linkedLayoutStatusTypeWarningThreshold'], + 'return' => true, + ], + ]; + + return $inputs; + } + + } diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/DonutGraph.php b/pandora_console/include/rest-api/models/VisualConsole/Items/DonutGraph.php index aba1948be5..724dc94db9 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/DonutGraph.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/DonutGraph.php @@ -254,7 +254,13 @@ final class DonutGraph extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php b/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php index afc0049478..adafa10587 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php @@ -230,7 +230,13 @@ final class EventsHistory extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup. + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php b/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php index f5557cbaa7..1c4aa63c3c 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php @@ -492,7 +492,13 @@ final class Group extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php b/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php index 1930da009c..707ba2c97f 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php @@ -163,7 +163,13 @@ final class Icon extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php b/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php index 8038163157..0f7611fbea 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php @@ -466,7 +466,13 @@ final class ModuleGraph extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php b/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php index 4ece421327..0a4d17ff68 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php @@ -576,7 +576,13 @@ final class Percentile extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/SimpleValue.php b/pandora_console/include/rest-api/models/VisualConsole/Items/SimpleValue.php index 3d13bbaa75..0df15d2e0e 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/SimpleValue.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/SimpleValue.php @@ -369,7 +369,13 @@ final class SimpleValue extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php b/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php index 5475faac04..1edcaaaadb 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php @@ -307,7 +307,13 @@ final class StaticGraph extends Item ], ]; - // TODO:XXXX LinkConsoleInputGroup + // Inputs LinkedVisualConsole. + $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( + $values + ); + foreach ($inputsLinkedVisualConsole as $key => $value) { + $inputs[] = $value; + } } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/View.php b/pandora_console/include/rest-api/models/VisualConsole/View.php index abfd85473b..173d288aa1 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/View.php +++ b/pandora_console/include/rest-api/models/VisualConsole/View.php @@ -44,7 +44,6 @@ class View extends \HTML public function loadTabs() { $type = (int) \get_parameter('type', 0); - hd($type, true); $itemId = (int) \get_parameter('itemId', 0); $vCId = (int) \get_parameter('vCId', 0); // TODO:XXX; @@ -159,9 +158,12 @@ class View extends \HTML $values = $item->toArray(); } else { $values['type'] = $type; + $values['isLinkEnabled'] = true; + $values['isOnTop'] = true; } $values['tabSelected'] = $tabSelected; + $values['vCId'] = $vCId; // Retrieve inputs. $inputs = $itemClass::getFormInputs($values); @@ -193,6 +195,59 @@ class View extends \HTML $('#MGcustomGraph').show(); } }"; + + $jsforms .= 'function linkedVisualConsoleChange(){ + $("#li-linkedLayoutStatusType").removeClass("hidden"); + if ($("#getAllVisualConsole :selected").val() != 0) { + $("#li-linkedLayoutStatusType").show(); + } else { + $("#li-linkedLayoutStatusType").hide(); + $("#li-linkedLayoutStatusTypeWeight").removeClass("hidden"); + $("#li-linkedLayoutStatusTypeCriticalThreshold") + .removeClass("hidden"); + $("#li-linkedLayoutStatusTypeWarningThreshold") + .removeClass("hidden"); + $("#li-linkedLayoutStatusTypeCriticalThreshold").hide(); + $("#li-linkedLayoutStatusTypeWarningThreshold").hide(); + $("#li-linkedLayoutStatusTypeWeight").hide(); + } + + var linkedLayoutExtract = $("#getAllVisualConsole :selected") + .val() + .split("|"); + + var linkedLayoutNodeId = 0; + var linkedLayoutId = 0; + if (linkedLayoutExtract instanceof Array) { + linkedLayoutId = (linkedLayoutExtract[0]) ? linkedLayoutExtract[0] : 0; + linkedLayoutNodeId = (linkedLayoutExtract[1]) ? linkedLayoutExtract[1] : 0; + } + + $("#hidden-linkedLayoutId").val(linkedLayoutId); + $("#hidden-linkedLayoutNodeId").val(linkedLayoutNodeId); + }'; + + $jsforms .= 'function linkedVisualConsoleTypeChange(){ + $("#li-linkedLayoutStatusTypeWeight").removeClass("hidden"); + $("#li-linkedLayoutStatusTypeCriticalThreshold") + .removeClass("hidden"); + $("#li-linkedLayoutStatusTypeWarningThreshold") + .removeClass("hidden"); + if ($("#linkedLayoutStatusType :selected").val() == "service") { + $("#li-linkedLayoutStatusTypeCriticalThreshold").show(); + $("#li-linkedLayoutStatusTypeWarningThreshold").show(); + $("#li-linkedLayoutStatusTypeWeight").hide(); + } else if ($("#linkedLayoutStatusType :selected").val() == "weight") { + $("#li-linkedLayoutStatusTypeCriticalThreshold").hide(); + $("#li-linkedLayoutStatusTypeWarningThreshold").hide(); + $("#li-linkedLayoutStatusTypeWeight").show(); + } else { + $("#li-linkedLayoutStatusTypeCriticalThreshold").hide(); + $("#li-linkedLayoutStatusTypeWarningThreshold").hide(); + $("#li-linkedLayoutStatusTypeWeight").hide(); + } + }'; + $jsforms .= ''; return $form.$jsforms; @@ -222,12 +277,22 @@ class View extends \HTML $data['label'] = \get_parameter('label'); // Page general for each item. + $tabGeneral = (bool) \get_parameter('tabGeneral', false); $data['width'] = \get_parameter('width'); $data['height'] = \get_parameter('height'); $data['x'] = \get_parameter('x'); $data['y'] = \get_parameter('y'); - $data['isLinkEnabled'] = \get_parameter_switch('isLinkEnabled', 0); - $data['isOnTop'] = \get_parameter_switch('isOnTop', 0); + + if ($tabGeneral === true) { + $data['isLinkEnabled'] = \get_parameter_switch('isLinkEnabled'); + $data['isOnTop'] = \get_parameter_switch('isOnTop'); + } else { + if ($itemId === 0) { + $data['isLinkEnabled'] = true; + $data['isOnTop'] = true; + } + } + $data['parentId'] = \get_parameter('parentId'); $data['aclGroupId'] = \get_parameter('aclGroupId'); $data['cacheExpiration_select'] = \get_parameter( @@ -239,6 +304,29 @@ class View extends \HTML 'cacheExpiration_units' ); + // Linked other VC. + $data['linkedLayoutId'] = \get_parameter( + 'linkedLayoutId', + 0 + ); + $data['linkedLayoutNodeId'] = \get_parameter( + 'linkedLayoutNodeId', + 0 + ); + $data['linkedLayoutStatusType'] = \get_parameter( + 'linkedLayoutStatusType', + 'default' + ); + $data['linkedLayoutStatusTypeWeight'] = \get_parameter( + 'linkedLayoutStatusTypeWeight' + ); + $data['linkedLayoutStatusTypeCriticalThreshold'] = \get_parameter( + 'linkedLayoutStatusTypeCriticalThreshold' + ); + $data['linkedLayoutStatusTypeWarningThreshold'] = \get_parameter( + 'linkedLayoutStatusTypeWarningThreshold' + ); + // Page specific data for each item. switch ($type) { case STATIC_GRAPH: diff --git a/visual_console_client/src/Item.ts b/visual_console_client/src/Item.ts index 31dcdd900d..d6ae5000de 100644 --- a/visual_console_client/src/Item.ts +++ b/visual_console_client/src/Item.ts @@ -477,7 +477,7 @@ export class LinkConsoleInputGroup extends InputGroup< // Create Principal element label - select. const linkConsoleLabel = document.createElement("label"); - linkConsoleLabel.textContent = t("Linked visual console "); + linkConsoleLabel.textContent = t("Linked visual console"); // Create element Spinner. const spinner = fontAwesomeIcon(faCircleNotch, t("Spinner"), {