VisRenderTrace.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. 'use strict';
  2. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  3. /*
  4. *+------------------------------------------------------------------------+
  5. *| Licensed Materials - Property of IBM
  6. *| IBM Cognos Products: Dashboard
  7. *| (C) Copyright IBM Corp. 2018
  8. *|
  9. *| US Government Users Restricted Rights - Use, duplication or disclosure
  10. *| restricted by GSA ADP Schedule Contract with IBM Corp.
  11. *+------------------------------------------------------------------------+
  12. */
  13. define(['underscore'], function (_) {
  14. 'use strict';
  15. return function () {
  16. function VisRenderTrace(renderState) {
  17. _classCallCheck(this, VisRenderTrace);
  18. // disable tracer by default
  19. this._enabledTrace = false;
  20. this._trace = {};
  21. this._renderState = renderState;
  22. }
  23. /**
  24. * Enable or disable the tracer
  25. * note: tracer is disabled by default
  26. * @param {boolean} [enable = true] boolean flag to enable tracing when it's true otherwise disable tracing
  27. */
  28. VisRenderTrace.prototype.enable = function enable() {
  29. var _enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  30. return this._enabledTrace = _enable;
  31. };
  32. /**
  33. * Clear all trace
  34. */
  35. VisRenderTrace.prototype.clear = function clear() {
  36. return this._trace = {};
  37. };
  38. /**
  39. * Get all recorded render sequence trace
  40. * @return {Object} render sequence trace
  41. */
  42. VisRenderTrace.prototype.getTrace = function getTrace() {
  43. return this._trace;
  44. };
  45. /**
  46. * Starts a trace for a single render senquence run
  47. * @param {Object[]} tasks array of all tasks to run in the current render sequence
  48. * @param {Object} renderContext render context object
  49. * @param {Object} renderOptions render options given by the caller on the render request
  50. */
  51. VisRenderTrace.prototype.startRender = function startRender(tasks, renderContext, options) {
  52. var _this = this;
  53. if (this._enabledTrace) {
  54. var renderId = renderContext.id;
  55. // prepare the render sequence trace object
  56. if (this._trace[renderId] === undefined) {
  57. this._trace[renderId] = {
  58. options: options,
  59. steps: []
  60. };
  61. }
  62. // prepare the render sequence task trace object for each tasks
  63. _.each(tasks, function (task) {
  64. _this._trace[renderId].steps.push({
  65. step: task.id
  66. });
  67. });
  68. }
  69. };
  70. /**
  71. * Starts a trace for a single render sequemce task
  72. * @param {Object} task render sequence task
  73. * @param {Object} renderContext render context object
  74. */
  75. VisRenderTrace.prototype.startTask = function startTask(task, renderContext) {
  76. if (this._enabledTrace) {
  77. var trace = this._getRenderTaskTrace(renderContext.id, task.id);
  78. if (trace) {
  79. // record the task start time
  80. trace.start = new Date().toISOString();
  81. }
  82. }
  83. };
  84. /**
  85. * trace a task dependency
  86. */
  87. VisRenderTrace.prototype.taskDependency = function taskDependency(task, renderContext, dependency) {
  88. if (this._enabledTrace) {
  89. var trace = this._getRenderTaskTrace(renderContext.id, task.id);
  90. if (trace) {
  91. if (trace.dependencies === undefined) {
  92. trace.dependencies = [];
  93. }
  94. trace.dependencies.push(dependency);
  95. }
  96. }
  97. };
  98. /**
  99. * Ends a trace for a sing render sequence task
  100. * @param {Object} task render sequence task
  101. * @param {Object} renderContext render context object
  102. * @param {string} status status string of the task
  103. * @param {Error=} err optional error object
  104. */
  105. VisRenderTrace.prototype.endTask = function endTask(task, renderContext, status, err) {
  106. if (this._enabledTrace) {
  107. var trace = this._getRenderTaskTrace(renderContext.id, task.id);
  108. if (trace) {
  109. // record the task end time, status and currentContext
  110. trace.end = new Date().toISOString();
  111. trace.status = status;
  112. trace.currentContext = _.clone(this._renderState._currentContext);
  113. // record the error object (if applicable)
  114. if (err) {
  115. trace.error = err;
  116. }
  117. // record the render laps time after each task
  118. var renderTrace = this._getRenderTrace(renderContext.id);
  119. if (renderTrace) {
  120. renderTrace.elapsed = new Date(trace.end).getTime() - new Date(renderTrace.steps[0].start).getTime();
  121. }
  122. }
  123. }
  124. };
  125. /**
  126. * Get a root trace object for particular render sequence
  127. * @param {string} renderId render identifier
  128. * @return {object} render sequence trace object
  129. */
  130. VisRenderTrace.prototype._getRenderTrace = function _getRenderTrace(renderId) {
  131. return this._trace[renderId];
  132. };
  133. /**
  134. * Get a trace object for a particular render sequence and task
  135. * @param {string} renderId render identifier
  136. * @param {string} taskId render sequence task identifier
  137. * @return {object} render sequence task trace object
  138. */
  139. VisRenderTrace.prototype._getRenderTaskTrace = function _getRenderTaskTrace(renderId, taskId) {
  140. var renderTrace = this._getRenderTrace(renderId);
  141. if (renderTrace) {
  142. return _.find(renderTrace.steps, function (entry) {
  143. return entry.step === taskId;
  144. });
  145. }
  146. };
  147. return VisRenderTrace;
  148. }();
  149. });
  150. //# sourceMappingURL=VisRenderTrace.js.map