60 import org.openjdk.jmc.flightrecorder.rules.jdk.messages.internal.Messages;
61 import org.openjdk.jmc.flightrecorder.rules.util.JfrRuleTopics;
62 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit;
63 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit.EventAvailability;
64
65 public class LongGcPauseRule implements IRule {
66
67 private static final String RESULT_ID = "LongGcPause"; //$NON-NLS-1$
68
69 public static final TypedPreference<IQuantity> GC_PAUSE_INFO_LIMIT = new TypedPreference<>("gc.pause.info.limit", //$NON-NLS-1$
70 Messages.getString(Messages.LongGcPauseRule_CONFIG_INFO_LIMIT),
71 Messages.getString(Messages.LongGcPauseRule_CONFIG_INFO_LIMIT_LONG), TIMESPAN,
72 UnitLookup.MILLISECOND.quantity(1000));
73
74 private static final List<TypedPreference<?>> CONFIG_ATTRIBUTES = Arrays
75 .<TypedPreference<?>> asList(GC_PAUSE_INFO_LIMIT);
76
77 private Result getResult(IItemCollection items, IPreferenceValueProvider vp) {
78 EventAvailability eventAvailability = RulesToolkit.getEventAvailability(items, JdkTypeIDs.GC_PAUSE,
79 JdkTypeIDs.GC_CONF, JdkTypeIDs.HEAP_CONF, JdkTypeIDs.GC_PAUSE_L1);
80 if (eventAvailability == EventAvailability.DISABLED || eventAvailability == EventAvailability.UNAVAILABLE) {
81 return RulesToolkit.getEventAvailabilityResult(this, items, EventAvailability.DISABLED, JdkTypeIDs.GC_PAUSE,
82 JdkTypeIDs.GC_CONF, JdkTypeIDs.HEAP_CONF, JdkTypeIDs.GC_PAUSE_L1);
83 }
84 IQuantity maxPause = items.getAggregate(JdkAggregators.LONGEST_GC_PAUSE);
85 if (maxPause != null) {
86 String message = MessageFormat.format(Messages.getString(Messages.LongGcPauseRuleFactory_TEXT_INFO),
87 maxPause.displayUsing(IDisplayable.AUTO));
88 double gcPauseScore = RulesToolkit.mapExp74(maxPause.doubleValueIn(MILLISECOND),
89 vp.getPreferenceValue(GC_PAUSE_INFO_LIMIT).doubleValueIn(MILLISECOND));
90 String longMessage = message;
91 if (gcPauseScore >= 25) {
92 longMessage = appendMessage(longMessage, getLivesetMessage(items));
93 longMessage = appendMessage(longMessage, getSemiRefsMessage(items));
94 longMessage = appendMessage(longMessage, getCollectorMessage(items));
95 }
96 return new Result(this, gcPauseScore, message, longMessage);
97 }
98 return new Result(this, 0, Messages.getString(Messages.LongGcPauseRuleFactory_TEXT_OK));
99 }
100
|
60 import org.openjdk.jmc.flightrecorder.rules.jdk.messages.internal.Messages;
61 import org.openjdk.jmc.flightrecorder.rules.util.JfrRuleTopics;
62 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit;
63 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit.EventAvailability;
64
65 public class LongGcPauseRule implements IRule {
66
67 private static final String RESULT_ID = "LongGcPause"; //$NON-NLS-1$
68
69 public static final TypedPreference<IQuantity> GC_PAUSE_INFO_LIMIT = new TypedPreference<>("gc.pause.info.limit", //$NON-NLS-1$
70 Messages.getString(Messages.LongGcPauseRule_CONFIG_INFO_LIMIT),
71 Messages.getString(Messages.LongGcPauseRule_CONFIG_INFO_LIMIT_LONG), TIMESPAN,
72 UnitLookup.MILLISECOND.quantity(1000));
73
74 private static final List<TypedPreference<?>> CONFIG_ATTRIBUTES = Arrays
75 .<TypedPreference<?>> asList(GC_PAUSE_INFO_LIMIT);
76
77 private Result getResult(IItemCollection items, IPreferenceValueProvider vp) {
78 EventAvailability eventAvailability = RulesToolkit.getEventAvailability(items, JdkTypeIDs.GC_PAUSE,
79 JdkTypeIDs.GC_CONF, JdkTypeIDs.HEAP_CONF, JdkTypeIDs.GC_PAUSE_L1);
80 if (eventAvailability == EventAvailability.DISABLED || eventAvailability == EventAvailability.UNKNOWN) {
81 return RulesToolkit.getEventAvailabilityResult(this, items, EventAvailability.DISABLED, JdkTypeIDs.GC_PAUSE,
82 JdkTypeIDs.GC_CONF, JdkTypeIDs.HEAP_CONF, JdkTypeIDs.GC_PAUSE_L1);
83 }
84 IQuantity maxPause = items.getAggregate(JdkAggregators.LONGEST_GC_PAUSE);
85 if (maxPause != null) {
86 String message = MessageFormat.format(Messages.getString(Messages.LongGcPauseRuleFactory_TEXT_INFO),
87 maxPause.displayUsing(IDisplayable.AUTO));
88 double gcPauseScore = RulesToolkit.mapExp74(maxPause.doubleValueIn(MILLISECOND),
89 vp.getPreferenceValue(GC_PAUSE_INFO_LIMIT).doubleValueIn(MILLISECOND));
90 String longMessage = message;
91 if (gcPauseScore >= 25) {
92 longMessage = appendMessage(longMessage, getLivesetMessage(items));
93 longMessage = appendMessage(longMessage, getSemiRefsMessage(items));
94 longMessage = appendMessage(longMessage, getCollectorMessage(items));
95 }
96 return new Result(this, gcPauseScore, message, longMessage);
97 }
98 return new Result(this, 0, Messages.getString(Messages.LongGcPauseRuleFactory_TEXT_OK));
99 }
100
|