runsDatastore.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. this.markAsComplete = function(runId) {
  32. var run = runs[runId];
  33. run.status = {
  34. statusCode: STATUS_COMPLETE
  35. };
  36. runs[runId] = run;
  37. };
  38. this.markAsFailed = function(runId, err) {
  39. var run = runs[runId];
  40. var errorMessage;
  41. switch(err) {
  42. case '1':
  43. errorMessage = "Error 1: unknown error";
  44. break;
  45. case '252':
  46. errorMessage = "Error 252: page timeout in Phantomas";
  47. break;
  48. case '253':
  49. errorMessage = "Error 253: Phantomas config error";
  50. break;
  51. case '254':
  52. errorMessage = "Error 254: page loading failed in PhantomJS";
  53. break;
  54. case '255':
  55. errorMessage = "Error 255: Phantomas error";
  56. break;
  57. case '1001':
  58. errorMessage = "Error 1001: JavaScript profiling failed";
  59. break;
  60. case '1002':
  61. errorMessage = "Error 1002: missing Phantomas metrics";
  62. break;
  63. case '1003':
  64. errorMessage = "Error 1003: Phantomas not returning";
  65. break;
  66. default:
  67. errorMessage = err;
  68. }
  69. run.status = {
  70. statusCode: STATUS_FAILED,
  71. error: errorMessage
  72. };
  73. runs[runId] = run;
  74. };
  75. this.delete = function(runId) {
  76. delete runs[runId];
  77. };
  78. this.list = function() {
  79. var runsArray = [];
  80. Object.keys(runs).forEach(function(key) {
  81. runsArray.push(runs[key]);
  82. });
  83. return runsArray;
  84. };
  85. }
  86. module.exports = RunsDatastore;