1313package org .quickperf .jvm .jmcrule ;
1414
1515import org .openjdk .jmc .common .item .IItemCollection ;
16+ import org .openjdk .jmc .common .unit .IQuantity ;
1617import org .openjdk .jmc .common .util .IPreferenceValueProvider ;
17- import org .openjdk .jmc .flightrecorder .rules .IRule ;
18- import org .openjdk .jmc .flightrecorder .rules .Result ;
19- import org .openjdk .jmc .flightrecorder .rules .RuleRegistry ;
20- import org .openjdk .jmc .flightrecorder .rules .Severity ;
18+ import org .openjdk .jmc .flightrecorder .rules .*;
19+ import org .openjdk .jmc .flightrecorder .rules .jdk .cpu .HighJvmCpuRule ;
20+ import org .openjdk .jmc .flightrecorder .rules .jdk .memory .GarbageCollectionInfoRule ;
21+ import org .openjdk .jmc .flightrecorder .rules .jdk .memory .GcStallRule ;
22+ import org .openjdk .jmc .flightrecorder .rules .jdk .memory .HeapInspectionRule ;
23+ import org .openjdk .jmc .flightrecorder .rules .jdk .memory .SystemGcRule ;
2124import org .quickperf .ExtractablePerformanceMeasure ;
2225import org .quickperf .jvm .jfr .JfrRecording ;
2326import org .quickperf .unit .Count ;
2427
2528import java .io .PrintWriter ;
2629import java .io .StringWriter ;
27- import java .util .ArrayList ;
28- import java .util .List ;
30+ import java .util .*;
2931import java .util .concurrent .ExecutionException ;
3032import java .util .concurrent .RunnableFuture ;
33+ import java .util .stream .Collectors ;
3134
3235public class JmcRuleCountMeasureExtractor implements ExtractablePerformanceMeasure <JfrRecording , JmcRulesMeasure > {
3336
3437 public static final JmcRuleCountMeasureExtractor INSTANCE = new JmcRuleCountMeasureExtractor ();
35-
36- private JmcRuleCountMeasureExtractor () {}
38+ private static final List <Class <? extends IRule >> IGNORED_RULES = Arrays .asList (
39+ HighJvmCpuRule .class ,
40+ GcStallRule .class ,
41+ GarbageCollectionInfoRule .class ,
42+ HeapInspectionRule .class ,
43+ SystemGcRule .class
44+ );
45+
46+ private JmcRuleCountMeasureExtractor () {
47+ }
3748
3849 @ Override
3950 public JmcRulesMeasure extractPerfMeasureFrom (JfrRecording jfrRecording ) {
4051
4152 IItemCollection jfrEvents = jfrRecording .getJfrEvents ();
42- List <Result > ruleEvaluations = evaluateJmcRules (jfrEvents );
53+ List <IResult > ruleEvaluations = evaluateJmcRules (jfrEvents );
4354
4455 List <Count > jmcRules = buildJmcRuleCountsFrom (ruleEvaluations );
4556
4657 return new JmcRulesMeasure (jmcRules );
4758
4859 }
4960
50- private List <Result > evaluateJmcRules (IItemCollection jfrEvents ) {
51- List <Result > ruleEvaluations = new ArrayList <>();
52- for (IRule rule : RuleRegistry .getRules ()) {
53- RunnableFuture <Result > future = rule .evaluate (jfrEvents , IPreferenceValueProvider .DEFAULT_VALUES );
61+ private List <IResult > evaluateJmcRules (IItemCollection jfrEvents ) {
62+ List <IResult > ruleEvaluations = new ArrayList <>();
63+ Collection <IRule > rules = RuleRegistry .getRules ().stream ()
64+ .filter (r -> !IGNORED_RULES .contains (r .getClass ()))
65+ .collect (Collectors .toList ());
66+ for (IRule rule : rules ) {
67+ RunnableFuture <IResult > future = rule .createEvaluation (jfrEvents ,
68+ IPreferenceValueProvider .DEFAULT_VALUES , new ResultProvider ());
5469 future .run ();
55- Result result ;
70+ IResult result ;
5671 try {
5772 result = future .get ();
5873 } catch (InterruptedException | ExecutionException e ) {
@@ -63,11 +78,11 @@ private List<Result> evaluateJmcRules(IItemCollection jfrEvents) {
6378 return ruleEvaluations ;
6479 }
6580
66- private List <Count > buildJmcRuleCountsFrom (List <Result > ruleEvaluations ) {
81+ private List <Count > buildJmcRuleCountsFrom (List <IResult > ruleEvaluations ) {
6782 List <Count > jmcRules = new ArrayList <>();
68- for (Result ruleEvaluation : ruleEvaluations ) {
83+ for (IResult ruleEvaluation : ruleEvaluations ) {
6984 Count ruleScore = buildJmcRuleCountFrom (ruleEvaluation );
70- if (!ruleToExclude (ruleScore )) {
85+ if (!ruleToExclude (ruleScore )) {
7186 jmcRules .add (ruleScore );
7287 }
7388 }
@@ -76,26 +91,30 @@ private List<Count> buildJmcRuleCountsFrom(List<Result> ruleEvaluations) {
7691
7792 private boolean ruleToExclude (Count ruleScore ) {
7893 String ruleDescription = ruleScore .getComment ();
79- return ruleDescription .contains ("Rule: TLAB Allocation Ratio" )
80- || ruleDescription .contains ("Rule: Competing Processes" )
81- || ruleDescription .contains ("Rule: Command Line Options Check" )
82- || ruleDescription .contains ("Rule: Metaspace Live Set Trend" );
94+ return ruleDescription .contains ("Rule: TLAB Allocation Ratio" )
95+ || ruleDescription .contains ("Rule: Competing Processes" )
96+ || ruleDescription .contains ("Rule: Command Line Options Check" )
97+ || ruleDescription .contains ("Rule: Metaspace Live Set Trend" );
8398 }
8499
85- private Count buildJmcRuleCountFrom (Result result ) {
100+ private Count buildJmcRuleCountFrom (IResult result ) {
86101 StringWriter stringWriter = new StringWriter ();
87102
88103 PrintWriter printWriter = new PrintWriter (stringWriter );
89104 printWriter .println ("Rule: " + result .getRule ().getName ());
90- printWriter .println ("Severity: " + Severity .get (result .getScore ()));
91- long score = (long ) result .getScore ();
105+ printWriter .println ("Severity: " + result .getSeverity ());
106+ long score = Optional .ofNullable (result .getResult (TypedResult .SCORE ))
107+ .map (IQuantity ::longValue )
108+ .orElse (-1L );
92109 printWriter .println ("Score: " + score );
93- String longDescriptionAsHtml = result .getLongDescription ();
110+ final String longDescriptionAsHtml = Optional .ofNullable (result .getSummary ()).orElse ("" )
111+ + Optional .ofNullable (result .getExplanation ()).orElse ("" )
112+ + Optional .ofNullable (result .getSolution ()).orElse ("" );
94113 String textDesc = HtmlToPlainTextTransformer .INSTANCE .convertHtmlToPlainText (longDescriptionAsHtml );
95114 printWriter .println ("Message: " + textDesc );
96115
97116 String description = stringWriter .toString ();
98117 return new Count (score , description );
99118 }
100119
101- }
120+ }
0 commit comments