node.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /**
  2. * @fileoverview
  3. *
  4. */
  5. 'use strict';
  6. angular.module('etcd.module')
  7. .factory('nodeSvc', function($http, $q, $, _, pathSvc, toastSvc) {
  8. function createNode(node) {
  9. var payload = {
  10. ttl: node.ttl
  11. };
  12. if (node.dir) {
  13. payload.dir = true;
  14. } else {
  15. payload.value = node.value;
  16. }
  17. return getLeaderUri()
  18. .then(function(leaderUri) {
  19. return $http({
  20. url: leaderUri + pathSvc.getFullKeyPath(node.key),
  21. data: $.param(payload),
  22. method: 'PUT',
  23. headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
  24. });
  25. });
  26. }
  27. function saveNode(node) {
  28. var payload = {
  29. ttl: node.ttl,
  30. prevExist: true
  31. };
  32. if (node.dir) {
  33. payload.dir = true;
  34. } else {
  35. payload.value = node.value;
  36. }
  37. return getLeaderUri()
  38. .then(function(leaderUri) {
  39. return $http({
  40. url: leaderUri + pathSvc.getFullKeyPath(node.key),
  41. data: $.param(payload),
  42. method: 'PUT',
  43. headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
  44. });
  45. });
  46. }
  47. function deleteNode(node) {
  48. var params;
  49. if (node.dir) {
  50. params = {
  51. dir: true,
  52. recursive: true
  53. };
  54. }
  55. return getLeaderUri()
  56. .then(function(leaderUri) {
  57. return $http({
  58. url: leaderUri + pathSvc.getFullKeyPath(node.key),
  59. method: 'DELETE',
  60. params: params,
  61. headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
  62. });
  63. });
  64. }
  65. function fetchNode(key) {
  66. return $http.get(pathSvc.getFullKeyPath(key), {
  67. supressNotifications: true
  68. })
  69. .then(function(resp) {
  70. return resp.data.node;
  71. });
  72. }
  73. function fetchStat(name) {
  74. return $http.get(pathSvc.getStatFullKeyPath(name));
  75. }
  76. function getLeaderUri() {
  77. return fetchStat('leader')
  78. .then(function(resp) {
  79. return fetchNode('/_etcd/machines/' + resp.data.leader)
  80. .then(function(leaderNode) {
  81. var data = decodeURIComponent(leaderNode.value);
  82. data = data.replace(/&/g, '\",\"').replace(/=/g,'\":\"');
  83. data = JSON.parse('{"' + data + '"}');
  84. return data.etcd;
  85. });
  86. })
  87. .catch(function() {
  88. toastSvc.error('Error fetching leader.');
  89. });
  90. }
  91. return {
  92. fetch: fetchNode,
  93. fetchStat: fetchStat,
  94. getLeaderUri: getLeaderUri,
  95. create: createNode,
  96. save: saveNode,
  97. delete: deleteNode
  98. };
  99. });