| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /**
- * @fileoverview
- *
- */
- 'use strict';
- angular.module('etcd.module')
- .factory('nodeSvc', function($http, $q, $, _, pathSvc, toastSvc) {
- function createNode(node) {
- var payload = {
- ttl: node.ttl
- };
- if (node.dir) {
- payload.dir = true;
- } else {
- payload.value = node.value;
- }
- return getLeaderUri()
- .then(function(leaderUri) {
- return $http({
- url: leaderUri + pathSvc.getFullKeyPath(node.key),
- data: $.param(payload),
- method: 'PUT',
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
- });
- });
- }
- function saveNode(node) {
- var payload = {
- ttl: node.ttl,
- prevExist: true
- };
- if (node.dir) {
- payload.dir = true;
- } else {
- payload.value = node.value;
- }
- return getLeaderUri()
- .then(function(leaderUri) {
- return $http({
- url: leaderUri + pathSvc.getFullKeyPath(node.key),
- data: $.param(payload),
- method: 'PUT',
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
- });
- });
- }
- function deleteNode(node) {
- var params;
- if (node.dir) {
- params = {
- dir: true,
- recursive: true
- };
- }
- return getLeaderUri()
- .then(function(leaderUri) {
- return $http({
- url: leaderUri + pathSvc.getFullKeyPath(node.key),
- method: 'DELETE',
- params: params,
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
- });
- });
- }
- function fetchNode(key) {
- return $http.get(pathSvc.getFullKeyPath(key), {
- supressNotifications: true
- })
- .then(function(resp) {
- return resp.data.node;
- });
- }
- function fetchStat(name) {
- return $http.get(pathSvc.getStatFullKeyPath(name));
- }
- function getLeaderUri() {
- return fetchStat('leader')
- .then(function(resp) {
- return fetchNode('/_etcd/machines/' + resp.data.leader)
- .then(function(leaderNode) {
- var data = decodeURIComponent(leaderNode.value);
- data = data.replace(/&/g, '\",\"').replace(/=/g,'\":\"');
- data = JSON.parse('{"' + data + '"}');
- return data.etcd;
- });
- })
- .catch(function() {
- toastSvc.error('Error fetching leader.');
- });
- }
- return {
- fetch: fetchNode,
- fetchStat: fetchStat,
- getLeaderUri: getLeaderUri,
- create: createNode,
- save: saveNode,
- delete: deleteNode
- };
- });
|