43 import org.openjdk.jmc.common.item.IItemCollection;
44 import org.openjdk.jmc.common.unit.IQuantity;
45 import org.openjdk.jmc.common.unit.UnitLookup;
46 import org.openjdk.jmc.common.util.IPreferenceValueProvider;
47 import org.openjdk.jmc.common.util.TypedPreference;
48 import org.openjdk.jmc.flightrecorder.jdk.JdkAggregators;
49 import org.openjdk.jmc.flightrecorder.jdk.JdkTypeIDs;
50 import org.openjdk.jmc.flightrecorder.rules.IRule;
51 import org.openjdk.jmc.flightrecorder.rules.Result;
52 import org.openjdk.jmc.flightrecorder.rules.jdk.messages.internal.Messages;
53 import org.openjdk.jmc.flightrecorder.rules.util.JfrRuleTopics;
54 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit;
55 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit.EventAvailability;
56
57 public class MetaspaceOomRule implements IRule {
58
59 private static final String RESULT_ID = "MetaspaceOom"; //$NON-NLS-1$
60
61 private Result getResult(IItemCollection items, IPreferenceValueProvider valueProvider) {
62 EventAvailability eventAvailability = RulesToolkit.getEventAvailability(items, JdkTypeIDs.METASPACE_OOM);
63 if (eventAvailability == EventAvailability.UNAVAILABLE || eventAvailability == EventAvailability.DISABLED) {
64 return RulesToolkit.getEventAvailabilityResult(this, items, eventAvailability, JdkTypeIDs.METASPACE_OOM);
65 }
66
67 IQuantity oomCount = items.getAggregate(JdkAggregators.METASPACE_OOM_COUNT);
68 if (oomCount != null && oomCount.doubleValue() > 0) {
69 // FIXME: Configuration attribute instead of hard coded 1 as warning limit
70 double score = RulesToolkit.mapExp100(oomCount.clampedLongValueIn(UnitLookup.NUMBER_UNITY), 1);
71 String message = MessageFormat.format(Messages.getString(Messages.MetaspaceOomRuleFactory_TEXT_WARN),
72 oomCount.displayUsing(IDisplayable.AUTO));
73 String longMessage = message + " " + Messages.getString(Messages.MetaspaceOomRuleFactory_TEXT_WARN_LONG); //$NON-NLS-1$
74 return new Result(this, score, message, longMessage);
75 }
76 return new Result(this, 0, Messages.getString(Messages.MetaspaceOomRuleFactory_TEXT_OK));
77 }
78
79 @Override
80 public RunnableFuture<Result> evaluate(final IItemCollection items, final IPreferenceValueProvider valueProvider) {
81 FutureTask<Result> evaluationTask = new FutureTask<>(new Callable<Result>() {
82 @Override
83 public Result call() throws Exception {
|
43 import org.openjdk.jmc.common.item.IItemCollection;
44 import org.openjdk.jmc.common.unit.IQuantity;
45 import org.openjdk.jmc.common.unit.UnitLookup;
46 import org.openjdk.jmc.common.util.IPreferenceValueProvider;
47 import org.openjdk.jmc.common.util.TypedPreference;
48 import org.openjdk.jmc.flightrecorder.jdk.JdkAggregators;
49 import org.openjdk.jmc.flightrecorder.jdk.JdkTypeIDs;
50 import org.openjdk.jmc.flightrecorder.rules.IRule;
51 import org.openjdk.jmc.flightrecorder.rules.Result;
52 import org.openjdk.jmc.flightrecorder.rules.jdk.messages.internal.Messages;
53 import org.openjdk.jmc.flightrecorder.rules.util.JfrRuleTopics;
54 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit;
55 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit.EventAvailability;
56
57 public class MetaspaceOomRule implements IRule {
58
59 private static final String RESULT_ID = "MetaspaceOom"; //$NON-NLS-1$
60
61 private Result getResult(IItemCollection items, IPreferenceValueProvider valueProvider) {
62 EventAvailability eventAvailability = RulesToolkit.getEventAvailability(items, JdkTypeIDs.METASPACE_OOM);
63 if (eventAvailability == EventAvailability.UNKNOWN || eventAvailability == EventAvailability.DISABLED) {
64 return RulesToolkit.getEventAvailabilityResult(this, items, eventAvailability, JdkTypeIDs.METASPACE_OOM);
65 }
66
67 IQuantity oomCount = items.getAggregate(JdkAggregators.METASPACE_OOM_COUNT);
68 if (oomCount != null && oomCount.doubleValue() > 0) {
69 // FIXME: Configuration attribute instead of hard coded 1 as warning limit
70 double score = RulesToolkit.mapExp100(oomCount.clampedLongValueIn(UnitLookup.NUMBER_UNITY), 1);
71 String message = MessageFormat.format(Messages.getString(Messages.MetaspaceOomRuleFactory_TEXT_WARN),
72 oomCount.displayUsing(IDisplayable.AUTO));
73 String longMessage = message + " " + Messages.getString(Messages.MetaspaceOomRuleFactory_TEXT_WARN_LONG); //$NON-NLS-1$
74 return new Result(this, score, message, longMessage);
75 }
76 return new Result(this, 0, Messages.getString(Messages.MetaspaceOomRuleFactory_TEXT_OK));
77 }
78
79 @Override
80 public RunnableFuture<Result> evaluate(final IItemCollection items, final IPreferenceValueProvider valueProvider) {
81 FutureTask<Result> evaluationTask = new FutureTask<>(new Callable<Result>() {
82 @Override
83 public Result call() throws Exception {
|