runner.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. var Q = require('q');
  2. var debug = require('debug')('ylt:runner');
  3. var phantomasWrapper = require('./tools/phantomasWrapper');
  4. var rulesChecker = require('./rulesChecker');
  5. var scoreCalculator = require('./scoreCalculator');
  6. var Runner = function(params) {
  7. 'use strict';
  8. var deferred = Q.defer();
  9. // The pivot format
  10. var data = {
  11. params: params,
  12. toolsResults: {}
  13. };
  14. // Execute Phantomas first
  15. phantomasWrapper.execute(data).then(function(phantomasResults) {
  16. data.toolsResults.phantomas = phantomasResults;
  17. // Other tools go there
  18. // Rules checker
  19. var policies = require('./metadata/policies.json');
  20. data.rules = rulesChecker.check(data, policies);
  21. // Scores calculator
  22. var scoreProfileGeneric = require('./metadata/scoreProfileGeneric.json');
  23. data.scoreProfiles = {
  24. generic : scoreCalculator.calculate(data, scoreProfileGeneric)
  25. };
  26. // Get the JS Execution Tree from offenders and put in the main object
  27. try {
  28. data.javascriptExecutionTree = JSON.parse(data.toolsResults.phantomas.offenders.javascriptExecutionTree[0]);
  29. } catch(e) {
  30. debug('Could not find nor parse phantomas.offenders.javascriptExecutionTree');
  31. }
  32. delete data.toolsResults.phantomas.metrics.javascriptExecutionTree;
  33. delete data.toolsResults.phantomas.offenders.javascriptExecutionTree;
  34. //Finished!
  35. deferred.resolve(data);
  36. }).fail(function(err) {
  37. debug('Run failed');
  38. debug(err);
  39. deferred.reject(err);
  40. });
  41. return deferred.promise;
  42. };
  43. module.exports = Runner;