runsDatastore.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. function RunsDatastore() {
  2. 'use strict';
  3. // NOT PERSISTING RUNS
  4. // For the moment, maybe one day
  5. var runs = {};
  6. var STATUS_AWAITING = 'awaiting';
  7. var STATUS_RUNNING = 'running';
  8. var STATUS_COMPLETE = 'complete';
  9. var STATUS_FAILED = 'failed';
  10. this.add = function(run, position) {
  11. runs[run.runId] = run;
  12. this.updatePosition(run.runId, position);
  13. };
  14. this.get = function(runId) {
  15. return runs[runId];
  16. };
  17. this.updatePosition = function(runId, position) {
  18. var run = runs[runId];
  19. if (position > 0) {
  20. run.status = {
  21. statusCode: STATUS_AWAITING,
  22. position: position
  23. };
  24. } else {
  25. run.status = {
  26. statusCode: STATUS_RUNNING
  27. };
  28. }
  29. runs[runId] = run;
  30. };
  31. // When the test is launched, set the progress bar
  32. this.updateRunProgress = function(runId, progress) {
  33. var run = runs[runId];
  34. run.progress = progress;
  35. runs[runId] = run;
  36. };
  37. this.markAsComplete = function(runId) {
  38. var run = runs[runId];
  39. run.status = {
  40. statusCode: STATUS_COMPLETE
  41. };
  42. runs[runId] = run;
  43. };
  44. this.markAsFailed = function(runId, err) {
  45. var run = runs[runId];
  46. var errorMessage;
  47. switch(err) {
  48. case '1':
  49. errorMessage = "Error 1: unknown error";
  50. break;
  51. case '252':
  52. errorMessage = "Error 252: page timeout in Phantomas";
  53. break;
  54. case '253':
  55. errorMessage = "Error 253: Phantomas config error";
  56. break;
  57. case '254':
  58. errorMessage = "Error 254: page loading failed in PhantomJS";
  59. break;
  60. case '255':
  61. errorMessage = "Error 255: Phantomas error";
  62. break;
  63. case '1001':
  64. errorMessage = "Error 1001: JavaScript profiling failed";
  65. break;
  66. case '1002':
  67. errorMessage = "Error 1002: missing Phantomas metrics";
  68. break;
  69. case '1003':
  70. errorMessage = "Error 1003: Phantomas not returning";
  71. break;
  72. default:
  73. errorMessage = err;
  74. }
  75. run.status = {
  76. statusCode: STATUS_FAILED,
  77. error: errorMessage
  78. };
  79. runs[runId] = run;
  80. };
  81. this.delete = function(runId) {
  82. delete runs[runId];
  83. };
  84. this.list = function() {
  85. var runsArray = [];
  86. Object.keys(runs).forEach(function(key) {
  87. runsArray.push(runs[key]);
  88. });
  89. return runsArray;
  90. };
  91. }
  92. module.exports = RunsDatastore;