github.com/sym3tri/etcd@v0.2.1-0.20140422215517-a563d82f95d6/mod/dashboard/app/module/etcd-api.js (about) 1 /** 2 * @fileoverview 3 * 4 */ 5 6 'use strict'; 7 8 angular.module('etcd.module') 9 .factory('etcdApiSvc', function($http, $q, $, _, pathSvc) { 10 11 function createNode(node) { 12 var payload = { 13 ttl: node.ttl 14 }; 15 if (node.dir) { 16 payload.dir = true; 17 } else { 18 payload.value = node.value; 19 } 20 return getLeaderUri() 21 .then(function(leaderUri) { 22 return $http({ 23 url: leaderUri + pathSvc.getFullKeyPath(node.key), 24 data: $.param(payload), 25 method: 'PUT', 26 headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 27 }); 28 }); 29 } 30 31 function saveNode(node) { 32 var payload = { 33 ttl: node.ttl, 34 prevExist: true 35 }; 36 if (node.dir) { 37 payload.dir = true; 38 } else { 39 payload.value = node.value; 40 } 41 return getLeaderUri() 42 .then(function(leaderUri) { 43 return $http({ 44 url: leaderUri + pathSvc.getFullKeyPath(node.key), 45 data: $.param(payload), 46 method: 'PUT', 47 headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 48 }); 49 }); 50 } 51 52 function deleteNode(node) { 53 var params; 54 if (node.dir) { 55 params = { 56 dir: true, 57 recursive: true 58 }; 59 } 60 return getLeaderUri() 61 .then(function(leaderUri) { 62 return $http({ 63 url: leaderUri + pathSvc.getFullKeyPath(node.key), 64 method: 'DELETE', 65 params: params, 66 headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 67 }); 68 }); 69 } 70 71 function fetchNode(key) { 72 return $http.get(pathSvc.getFullKeyPath(key), { 73 supressNotifications: true 74 }) 75 .then(function(resp) { 76 return resp.data.node; 77 }); 78 } 79 80 function fetchStat(name) { 81 return $http.get(pathSvc.getStatFullKeyPath(name), { 82 supressNotifications: true 83 }); 84 } 85 86 function getPeerUri(peerName) { 87 return fetchNode('/_etcd/machines/' + peerName) 88 .then(function(peerInfo) { 89 var data = decodeURIComponent(peerInfo.value); 90 data = data.replace(/&/g, '\",\"').replace(/=/g,'\":\"'); 91 data = JSON.parse('{"' + data + '"}'); 92 return data.etcd; 93 }); 94 } 95 96 function getLeaderUri() { 97 return fetchLeaderStats() 98 .then(function(stats) { 99 return getPeerUri(stats.leaderName); 100 }); 101 } 102 103 function fetchPeerDetailStats(peerName) { 104 return getPeerUri(peerName).then(function(peerUri) { 105 return $http.get(peerUri + pathSvc.getStatFullKeyPath('self')) 106 .then(function(resp) { 107 return resp.data; 108 }); 109 }); 110 } 111 112 function fetchLeaderStats() { 113 return fetchStat('leader').then(function(resp) { 114 var result = { 115 followers: [], 116 leaderName: resp.data.leader 117 }; 118 _.each(resp.data.followers, function(value, key) { 119 value.name = key; 120 result.followers.push(value); 121 }); 122 return result; 123 }); 124 } 125 126 return { 127 fetch: fetchNode, 128 129 fetchStat: fetchStat, 130 131 fetchLeaderStats: fetchLeaderStats, 132 133 fetchPeerDetailStats: fetchPeerDetailStats, 134 135 getLeaderUri: getLeaderUri, 136 137 create: createNode, 138 139 save: saveNode, 140 141 delete: deleteNode 142 }; 143 144 });