rulesChecker.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. var Q = require('q');
  2. var RulesChecker = function() {
  3. 'use strict';
  4. this.check = function(data, policies) {
  5. var results = {};
  6. var err = null;
  7. for (var metricName in policies) {
  8. var policy = policies[metricName];
  9. if (data.toolsResults[policy.tool] &&
  10. data.toolsResults[policy.tool].metrics &&
  11. (data.toolsResults[policy.tool].metrics[metricName] || data.toolsResults[policy.tool].metrics[metricName] === 0)) {
  12. var rule = {
  13. value: data.toolsResults[policy.tool].metrics[metricName],
  14. policy: policy
  15. };
  16. if (data.toolsResults[policy.tool].offenders &&
  17. data.toolsResults[policy.tool].offenders[metricName] &&
  18. data.toolsResults[policy.tool].offenders[metricName].length > 0) {
  19. rule.offenders = data.toolsResults[policy.tool].offenders[metricName];
  20. }
  21. rule.bad = rule.value > policy.isOkThreshold;
  22. rule.abnormal = policy.isAbnormalThreshold && rule.value >= policy.isAbnormalThreshold;
  23. // A value between 0 (bad) and 100 (very good).
  24. var score = (policy.isBadThreshold - rule.value) * 100 / (policy.isBadThreshold - policy.isOkThreshold);
  25. rule.score = Math.min(Math.max(Math.round(score), 0), 100);
  26. // A value between 0 (abnormal) and negative-infinity (your website is a blackhole)
  27. var abnormalityScore = (policy.isAbnormalThreshold - rule.value) * 100 / (policy.isAbnormalThreshold - policy.isOkThreshold);
  28. rule.abnormalityScore = Math.min(Math.round(abnormalityScore), 0);
  29. results[metricName] = rule;
  30. }
  31. }
  32. return results;
  33. };
  34. };
  35. module.exports = new RulesChecker();