Source
756
756
* If user has no rights to see the details of particular selement, add only info that is needed to render map
757
757
* icons.
758
758
*/
759
759
if (PERM_READ > $selement['permission']) {
760
760
$info[$selementid] = getSelementInfo($selement_info + ['iconid_off' => $selement['iconid_off']]);
761
761
762
762
continue;
763
763
}
764
764
765
765
$host_count = count($selement['hosts']);
766
-
767
-
if ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_TRIGGER
768
-
|| $selement['elementtype'] == SYSMAP_ELEMENT_TYPE_MAP) {
769
-
$trigger_hosts = [];
770
-
foreach ($selement['triggers'] as $trigger) {
771
-
foreach ($trigger['hosts'] as $host) {
772
-
if (!array_key_exists($host['hostid'], $trigger_hosts)
773
-
&& !array_key_exists($host['hostid'], $selement['hosts'])) {
774
-
$trigger_hosts[$host['hostid']] = true;
775
-
$host_count++;
776
-
777
-
if ($host['status'] == HOST_STATUS_MONITORED
778
-
&& $host['maintenance_status'] == HOST_MAINTENANCE_STATUS_ON
779
-
&& ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_TRIGGER
780
-
|| ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_MAP
781
-
&& array_key_exists(SYSMAP_ELEMENT_TYPE_TRIGGER, $trigger['source'])))) {
782
-
$selement_info['maintenance']++;
783
-
}
784
-
}
785
-
}
786
-
}
787
-
}
766
+
$trigger_hosts = [];
767
+
$selement_info['maintenance'] = getTriggerMaintenance($selement, $selement_info, $sysmaps_data, $trigger_hosts);
788
768
789
769
foreach ($selement['hosts'] as $hostid) {
790
770
$host = $hosts[$hostid];
791
771
792
772
if ($host['status'] == HOST_STATUS_NOT_MONITORED) {
793
773
$selement_info['disabled']++;
794
774
}
795
775
elseif ($host['maintenance_status'] == HOST_MAINTENANCE_STATUS_ON) {
796
776
$selement_info['maintenance']++;
797
777
}
912
892
$info[$selement['selementid']]['name'] = array_key_exists($hostid, $hosts)
913
893
? $hosts[$hostid]['name']
914
894
: [];
915
895
}
916
896
}
917
897
}
918
898
919
899
return $info;
920
900
}
921
901
922
-
function getElementHosts($selement, $sysmaps_data, $hosts_by_groupids) {
902
+
function getTriggerMaintenance($selement, $selement_info, $sysmaps_data, &$trigger_hosts): int {
903
+
if ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_TRIGGER) {
904
+
foreach ($selement['triggers'] as $trigger) {
905
+
foreach ($trigger['hosts'] as $host) {
906
+
if (!array_key_exists($host['hostid'], $trigger_hosts)
907
+
&& !array_key_exists($host['hostid'], $selement['hosts'])
908
+
&& $host['status'] == HOST_STATUS_MONITORED
909
+
&& $host['maintenance_status'] == HOST_MAINTENANCE_STATUS_ON) {
910
+
$selement_info['maintenance']++;
911
+
}
912
+
913
+
$trigger_hosts[$host['hostid']] = true;
914
+
}
915
+
}
916
+
}
917
+
elseif ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_MAP) {
918
+
$sysmapid = $selement['elements'][0]['sysmapid'];
919
+
920
+
if (array_key_exists($sysmapid, $sysmaps_data)) {
921
+
foreach ($sysmaps_data[$sysmapid]['selements'] as $nested_element) {
922
+
foreach ($nested_element['hosts'] as $key => $host) {
923
+
$trigger_hosts[$key] = true;
924
+
}
925
+
926
+
$selement_info['maintenance'] = getTriggerMaintenance($nested_element, $selement_info, $sysmaps_data,
927
+
$trigger_hosts
928
+
);
929
+
}
930
+
}
931
+
}
932
+
933
+
return $selement_info['maintenance'];
934
+
}
935
+
936
+
function getElementHosts($selement, $sysmaps_data, $hosts_by_groupids): array {
923
937
$host_ids = [];
924
938
925
939
if ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_HOST) {
926
940
$hostid = $selement['elements'][0]['hostid'];
927
941
$host_ids[$hostid] = $hostid;
928
942
}
929
943
elseif ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_HOST_GROUP) {
930
944
$groupid = $selement['elements'][0]['groupid'];
931
945
$host_ids = $hosts_by_groupids[$groupid];
932
946
}