001
014
015 package com.liferay.portal.fabric.agent.selectors;
016
017 import com.liferay.portal.fabric.agent.FabricAgent;
018 import com.liferay.portal.fabric.status.AdvancedOperatingSystemMXBean;
019 import com.liferay.portal.fabric.status.FabricStatus;
020 import com.liferay.portal.kernel.process.ProcessCallable;
021
022 import java.util.Collection;
023 import java.util.Collections;
024 import java.util.Comparator;
025
026
029 public class MaxFreePhysicalMemoryFabricAgentSelector
030 implements FabricAgentSelector {
031
032 @Override
033 public Collection<FabricAgent> select(
034 Collection<FabricAgent> fabricAgents,
035 ProcessCallable<?> processCallable) {
036
037 if (fabricAgents.isEmpty()) {
038 return fabricAgents;
039 }
040
041 return Collections.singleton(
042 Collections.max(fabricAgents, _COMPARATOR));
043 }
044
045 private static final Comparator<FabricAgent> _COMPARATOR =
046 new MaxFreePhysicalMemoryComparator();
047
048 private static class MaxFreePhysicalMemoryComparator
049 implements Comparator<FabricAgent> {
050
051 @Override
052 public int compare(FabricAgent fabricAgent1, FabricAgent fabricAgent2) {
053 FabricStatus fabricStatus1 = fabricAgent1.getFabricStatus();
054
055 AdvancedOperatingSystemMXBean advancedOperatingSystemMXBean1 =
056 fabricStatus1.getAdvancedOperatingSystemMXBean();
057
058 Long freePhysicalMemorySize1 =
059 advancedOperatingSystemMXBean1.getFreePhysicalMemorySize();
060
061 FabricStatus fabricStatus2 = fabricAgent2.getFabricStatus();
062
063 AdvancedOperatingSystemMXBean advancedOperatingSystemMXBean2 =
064 fabricStatus2.getAdvancedOperatingSystemMXBean();
065
066 Long freePhysicalMemorySize2 =
067 advancedOperatingSystemMXBean2.getFreePhysicalMemorySize();
068
069 if ((freePhysicalMemorySize1 == null) &&
070 (freePhysicalMemorySize2 == null)) {
071
072 return 0;
073 }
074
075 if (freePhysicalMemorySize1 == null) {
076 return -1;
077 }
078
079 if (freePhysicalMemorySize2 == null) {
080 return 1;
081 }
082
083 return freePhysicalMemorySize1.compareTo(freePhysicalMemorySize2);
084 }
085
086 }
087
088 }