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  });