resultsController.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. var splited = str.split(' / ');
  26. var out = [];
  27. splited.forEach(function(trace) {
  28. var result = /^(\S*)\s?\(?(https?:\/\/\S+):(\d+)\)?$/g.exec(trace);
  29. if (result && result[2].length > 0) {
  30. var filePath = result[2];
  31. var chunks = filePath.split('/');
  32. var fileName = chunks[chunks.length - 1];
  33. out.push({
  34. fnName: result[1],
  35. fileName: fileName,
  36. filePath: filePath,
  37. line: result[3]
  38. });
  39. }
  40. });
  41. return out;
  42. }
  43. });