| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 'use strict';
- angular.module('etcd', [])
- .factory('EtcdV2', ['$http', '$q', function($http, $q) {
- var keyPrefix = '/v2/keys/'
- var statsPrefix = '/v2/stats/'
- var baseURL = '/v2/'
- var leaderURL = ''
- delete $http.defaults.headers.common['X-Requested-With'];
- function cleanupPath(path) {
- var parts = path.split('/');
- if (parts.length === 0) {
- return '';
- }
- parts = parts.filter(function(v){return v!=='';});
- parts = parts.join('/');
- return parts
- }
- function newKey(keyName) {
- var self = {};
- self.name = cleanupPath(keyName);
- self.getParent = function() {
- var parts = self.name.split('/');
- if (parts.length === 0) {
- return newKey('');
- }
- parts.pop();
- return newKey(parts.join('/'));
- };
- self.path = function() {
- var path = '/' + cleanupPath(keyPrefix + self.name);
- if (path === keyPrefix.substring(0, keyPrefix.length - 1)) {
- return keyPrefix
- }
- return path
- };
- self.get = function() {
- return $http.get(self.path());
- };
- self.set = function(keyValue) {
- return getLeader().then(function(leader) {
- return $http({
- url: leader + self.path(),
- data: $.param({value: keyValue}),
- method: 'PUT',
- headers: {'Content-Type': 'application/x-www-form-urlencoded'}
- });
- });
- };
- self.deleteKey = function(keyValue) {
- return getLeader().then(function(leader) {
- return $http({
- url: leader + self.path(),
- method: 'DELETE',
- headers: {'Content-Type': 'application/x-www-form-urlencoded'}
- });
- });
- };
- return self;
- }
- function newStat(statName) {
- var self = {};
- self.name = cleanupPath(statName);
- self.path = function() {
- return '/' + cleanupPath(statsPrefix + self.name);
- };
- self.get = function() {
- return $http.get(self.path());
- };
- return self
- }
- function getLeader() {
- return newStat('leader').get().then(function(response) {
- return newKey('/_etcd/machines/' + response.data.leader).get().then(function(response) {
- // TODO: do something better here p.s. I hate javascript
- var data = JSON.parse('{"' + decodeURI(response.data.value.replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}');
- return data.etcd;
- });
- });
- }
- return {
- getStat: newStat,
- getKey: newKey,
- }
- }]);
|