yarn-queue.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import DS from 'ember-data';
  2. export default DS.JSONAPISerializer.extend({
  3. normalizeSingleResponse(store, primaryModelClass, payload, id,
  4. requestType) {
  5. var children = [];
  6. if (payload.queues) {
  7. payload.queues.queue.forEach(function(queue) {
  8. children.push(queue.queueName);
  9. });
  10. }
  11. var includedData = [];
  12. var relationshipUserData = [];
  13. // update user models
  14. if (payload.users && payload.users.user) {
  15. payload.users.user.forEach(function(u) {
  16. includedData.push({
  17. type: "YarnUser",
  18. id: u.username + "_" + payload.queueName,
  19. attributes: {
  20. name: u.username,
  21. queueName: payload.queueName,
  22. usedMemoryMB: u.resourcesUsed.memory || 0,
  23. usedVCore: u.resourcesUsed.vCores || 0,
  24. }
  25. });
  26. relationshipUserData.push({
  27. type: "YarnUser",
  28. id: u.username + "_" + payload.queueName,
  29. })
  30. });
  31. }
  32. var fixedPayload = {
  33. id: id,
  34. type: primaryModelClass.modelName, // yarn-queue
  35. attributes: {
  36. name: payload.queueName,
  37. parent: payload.myParent,
  38. children: children,
  39. capacity: payload.capacity,
  40. usedCapacity: payload.usedCapacity,
  41. maxCapacity: payload.maxCapacity,
  42. absCapacity: payload.absoluteCapacity,
  43. absMaxCapacity: payload.absoluteMaxCapacity,
  44. absUsedCapacity: payload.absoluteUsedCapacity,
  45. state: payload.state,
  46. userLimit: payload.userLimit,
  47. userLimitFactor: payload.userLimitFactor,
  48. preemptionDisabled: payload.preemptionDisabled,
  49. numPendingApplications: payload.numPendingApplications,
  50. numActiveApplications: payload.numActiveApplications,
  51. },
  52. // Relationships
  53. relationships: {
  54. users: {
  55. data: relationshipUserData
  56. }
  57. }
  58. };
  59. return {
  60. queue: this._super(store, primaryModelClass, fixedPayload, id, requestType),
  61. includedData: includedData
  62. }
  63. },
  64. handleQueue(store, primaryModelClass, payload, id, requestType) {
  65. var data = [];
  66. var includedData = []
  67. var result = this.normalizeSingleResponse(store, primaryModelClass,
  68. payload, id, requestType);
  69. data.push(result.queue);
  70. includedData = includedData.concat(result.includedData);
  71. if (payload.queues) {
  72. for (var i = 0; i < payload.queues.queue.length; i++) {
  73. var queue = payload.queues.queue[i];
  74. queue.myParent = payload.queueName;
  75. var childResult = this.handleQueue(store, primaryModelClass, queue,
  76. queue.queueName,
  77. requestType);
  78. data = data.concat(childResult.data);
  79. includedData = includedData.concat(childResult.includedData);
  80. }
  81. }
  82. return {
  83. data: data,
  84. includedData, includedData
  85. }
  86. },
  87. normalizeArrayResponse(store, primaryModelClass, payload, id,
  88. requestType) {
  89. var normalizedArrayResponse = {};
  90. var result = this.handleQueue(store,
  91. primaryModelClass,
  92. payload.scheduler.schedulerInfo, "root", requestType);
  93. normalizedArrayResponse.data = result.data;
  94. normalizedArrayResponse.included = result.includedData;
  95. console.log(normalizedArrayResponse);
  96. return normalizedArrayResponse;
  97. /*
  98. // return expected is { data: [ {}, {} ] }
  99. var normalizedArrayResponse = {};
  100. // payload has apps : { app: [ {},{},{} ] }
  101. // need some error handling for ex apps or app may not be defined.
  102. normalizedArrayResponse.data = payload.apps.app.map(singleApp => {
  103. return this.normalizeSingleResponse(store, primaryModelClass, singleApp, singleApp.id, requestType);
  104. }, this);
  105. return normalizedArrayResponse;
  106. */
  107. }
  108. });