runner.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. var Q = require('q');
  2. var debug = require('debug')('ylt:runner');
  3. var phantomasWrapper = require('./tools/phantomas/phantomasWrapper');
  4. var colorDiff = require('./tools/colorDiff');
  5. var domAccessAgregator = require('./tools/domAccessAgregator');
  6. var mediaQueriesChecker = require('./tools/mediaQueriesChecker');
  7. var redownload = require('./tools/redownload/redownload');
  8. var rulesChecker = require('./rulesChecker');
  9. var scoreCalculator = require('./scoreCalculator');
  10. var Runner = function(params) {
  11. 'use strict';
  12. var deferred = Q.defer();
  13. // The pivot format
  14. var data = {
  15. params: params,
  16. toolsResults: {}
  17. };
  18. // Execute Phantomas first
  19. phantomasWrapper.execute(data)
  20. .then(function(phantomasResults) {
  21. data.toolsResults.phantomas = phantomasResults;
  22. // Mix all DOM Access metrics together
  23. data = domAccessAgregator.agregate(data);
  24. // Compare colors
  25. data = colorDiff.compareAllColors(data);
  26. // Check media queries
  27. data = mediaQueriesChecker.analyzeMediaQueries(data);
  28. // Redownload every file
  29. return redownload.recheckAllFiles(data);
  30. })
  31. .then(function(data) {
  32. // Rules checker
  33. var policies = require('./metadata/policies');
  34. data.rules = rulesChecker.check(data, policies);
  35. // Scores calculator
  36. var scoreProfileGeneric = require('./metadata/scoreProfileGeneric.json');
  37. data.scoreProfiles = {
  38. generic : scoreCalculator.calculate(data, scoreProfileGeneric, true)
  39. };
  40. // Calculate "If you fix this issue, your new score is..." on each rule
  41. debug('Calculate "If you fix this issue..." scores');
  42. Object.keys(data.rules).forEach(function(ruleName) {
  43. // Save current values
  44. var oldScore = data.rules[ruleName].score;
  45. var oldAbnormalityScore = data.rules[ruleName].abnormalityScore;
  46. // Simulate a 100/100 score on a specific rule
  47. data.rules[ruleName].score = 100;
  48. data.rules[ruleName].abnormalityScore = 0;
  49. // Calculate new score
  50. data.rules[ruleName].globalScoreIfFixed = scoreCalculator.calculate(data, scoreProfileGeneric, false).globalScore;
  51. // Revert values
  52. data.rules[ruleName].score = oldScore;
  53. data.rules[ruleName].abnormalityScore = oldAbnormalityScore;
  54. });
  55. debug('Calculating is finished');
  56. if (data.toolsResults.phantomas.offenders.blockedRequests) {
  57. data.blockedRequests = data.toolsResults.phantomas.offenders.blockedRequests;
  58. }
  59. // Finished!
  60. deferred.resolve(data);
  61. })
  62. .fail(function(err) {
  63. debug('Run failed');
  64. debug(err);
  65. deferred.reject(err);
  66. });
  67. return deferred.promise;
  68. };
  69. module.exports = Runner;