resultsController.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var app = angular.module('Results', []);
  2. app.controller('ResultsCtrl', function ($scope) {
  3. // Grab results from nodeJS served page
  4. $scope.phantomasResults = window._phantomas_results;
  5. $scope.slowRequestsOn = false;
  6. $scope.slowRequestsLimit = 5;
  7. if ($scope.phantomasResults.offenders && $scope.phantomasResults.offenders.javascriptExecutionTree) {
  8. $scope.javascript = JSON.parse($scope.phantomasResults.offenders.javascriptExecutionTree);
  9. }
  10. $scope.onNodeDetailsClick = function(node) {
  11. var isOpen = node.data.showDetails;
  12. if (!isOpen) {
  13. // Close all other nodes
  14. $scope.javascript.children.forEach(function(currentNode) {
  15. currentNode.data.showDetails = false;
  16. });
  17. // Parse the backtrace
  18. if (!node.data.parsedBacktrace) {
  19. node.data.parsedBacktrace = parseBacktrace(node.data.backtrace);
  20. }
  21. }
  22. node.data.showDetails = !isOpen;
  23. };
  24. function parseBacktrace(str) {
  25. if (!str) {
  26. return null;
  27. }
  28. var out = [];
  29. var splited = str.split(' / ');
  30. splited.forEach(function(trace) {
  31. var result = /^(\S*)\s?\(?(https?:\/\/\S+):(\d+)\)?$/g.exec(trace);
  32. if (result && result[2].length > 0) {
  33. var filePath = result[2];
  34. var chunks = filePath.split('/');
  35. var fileName = chunks[chunks.length - 1];
  36. out.push({
  37. fnName: result[1],
  38. fileName: fileName,
  39. filePath: filePath,
  40. line: result[3]
  41. });
  42. }
  43. });
  44. return out;
  45. }
  46. });