Parcourir la source

If you fix this rule, your global score increases by X points

Gaël Métais il y a 4 ans
Parent
commit
e8d464a244
3 fichiers modifiés avec 38 ajouts et 7 suppressions
  1. 10 1
      front/src/views/rule.html
  2. 19 1
      lib/runner.js
  3. 9 5
      lib/scoreCalculator.js

+ 10 - 1
front/src/views/rule.html

@@ -20,7 +20,16 @@
                 <span ng-if="rule.policy.unit != 'bytes'">{{rule.policy.isOkThreshold}}<span ng-if="rule.policy.unit"> {{rule.policy.unit}}</span></span>
                 <span ng-if="rule.policy.isOkThreshold > 0 && rule.policy.isOkThreshold < rule.policy.isBadThreshold">or less</span>
                 <span ng-if="rule.policy.isOkThreshold > rule.policy.isBadThreshold">or more</span>
-                to get the 100/100 score.
+                to get the 100/100 score on this issue.
+            </div>
+            <div class="okThreshold" ng-if="rule.globalScoreIfFixed > result.scoreProfiles.generic.globalScore && rule.globalScoreIfFixed > 0">
+                Your new global would increase by {{rule.globalScoreIfFixed - result.scoreProfiles.generic.globalScore}} points ({{rule.globalScoreIfFixed}}/100).
+            </div>
+            <div class="okThreshold" ng-if="rule.globalScoreIfFixed > result.scoreProfiles.generic.globalScore && rule.globalScoreIfFixed <= 0">
+                Your new global score would increase, but still not enough to reach 0/100. That's embarassing...
+            </div>
+            <div class="okThreshold" ng-if="rule.globalScoreIfFixed == result.scoreProfiles.generic.globalScore && rule.score < 100">
+                Your new global score would slightly increase, but not enough to gain a single point.
             </div>
             <div ng-bind-html="rule.policy.message" class="message"></div>
         </div>

+ 19 - 1
lib/runner.js

@@ -51,10 +51,28 @@ var Runner = function(params) {
         // Scores calculator
         var scoreProfileGeneric = require('./metadata/scoreProfileGeneric.json');
         data.scoreProfiles = {
-            generic : scoreCalculator.calculate(data, scoreProfileGeneric)
+            generic : scoreCalculator.calculate(data, scoreProfileGeneric, true)
         };
 
 
+        // Calculate "If you fix this issue, your new score is..." on each rule
+        debug('Calculate "If you fix this issue..." scores');
+        Object.keys(data.rules).forEach(function(ruleName) {
+            // Save current values
+            var oldScore = data.rules[ruleName].score;
+            var oldAbnormalityScore = data.rules[ruleName].abnormalityScore;
+            // Simulate a 100/100 score on a specific rule
+            data.rules[ruleName].score = 100;
+            data.rules[ruleName].abnormalityScore = 0;
+            // Calculate new score
+            data.rules[ruleName].globalScoreIfFixed = scoreCalculator.calculate(data, scoreProfileGeneric, false).globalScore;
+            // Revert values
+            data.rules[ruleName].score = oldScore;
+            data.rules[ruleName].abnormalityScore = oldAbnormalityScore;
+        });
+        debug('Calculating is finished');
+
+
         if (data.toolsResults.phantomas.offenders.blockedRequests) {
             data.blockedRequests = data.toolsResults.phantomas.offenders.blockedRequests;
         }

+ 9 - 5
lib/scoreCalculator.js

@@ -4,7 +4,7 @@ var debug = require('debug')('ylt:scoreCalculator');
 var ScoreCalculator = function() {
     'use strict';
 
-    this.calculate = function(data, profile) {
+    this.calculate = function(data, profile, debugFlag) {
 
         var results = {
             categories: {}
@@ -13,7 +13,9 @@ var ScoreCalculator = function() {
         var categoryName;
         var weight;
 
-        debug('Starting calculating scores');
+        if (debugFlag) {
+            debug('Starting calculating scores');
+        }
 
         // Calculate categories
         for (categoryName in profile.categories) {
@@ -31,7 +33,7 @@ var ScoreCalculator = function() {
                 if (data.rules[policyName]) {
                     policyScore = data.rules[policyName].score + (data.rules[policyName].abnormalityScore * 2);
                     categoryScore.push(policyScore, weight);
-                } else {
+                } else if (debugFlag) {
                     debug('Warning: could not find rule %s', policyName);
                 }
 
@@ -59,8 +61,10 @@ var ScoreCalculator = function() {
         results.globalScore = Math.round(globalScore.getScore());
 
 
-        debug('Score calculation finished:');
-        debug(results);
+        if (debugFlag) {
+            debug('Score calculation finished:');
+            debug(results);
+        }
 
         return results;
     };