runsDatastore.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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 '252':
  43. errorMessage = "Error 252: page timeout in Phantomas";
  44. break;
  45. case '253':
  46. errorMessage = "Error 253: Phantomas config error";
  47. break;
  48. case '254':
  49. errorMessage = "Error 254: page loading failed in PhantomJS";
  50. break;
  51. case '255':
  52. errorMessage = "Error 255: Phantomas error";
  53. break;
  54. case '1001':
  55. errorMessage = "Error 1001: JavaScript profiling failed";
  56. break;
  57. case '1002':
  58. errorMessage = "Error 1002: missing Phantomas metrics";
  59. break;
  60. default:
  61. errorMessage = err;
  62. }
  63. run.status = {
  64. statusCode: STATUS_FAILED,
  65. error: errorMessage
  66. };
  67. runs[runId] = run;
  68. };
  69. this.delete = function(runId) {
  70. delete runs[runId];
  71. };
  72. this.list = function() {
  73. var runsArray = [];
  74. Object.keys(runs).forEach(function(key) {
  75. runsArray.push(runs[key]);
  76. });
  77. return runsArray;
  78. };
  79. }
  80. module.exports = RunsDatastore;