UNPKG

vnhr

Version:

virtual node hash ring

62 lines (51 loc) 1.32 kB
var merge = require('deepmerge'), type = require('type-component'), sha1 = require('sha1') /** * gossip contructor arguments parser */ exports.args = function () { var args = { servers: [], options: { replicas: 3, vnodes: 1024 } } Array.prototype.slice.apply(arguments).forEach(function (argument) { if(type(argument) === 'string') args.servers = [argument] if(type(argument) === 'array') args.servers = argument if(type(argument) === 'object') args.options = merge(args.options, argument) }) return args } exports.metadata = function (server) { return { name: server, hostname: server.split(':').shift(), port: server.split(':').pop(), id: sha1(server) } } exports.array = function (length, n) { if(type(n) !== 'number') n = 0 return Array.apply(null, Array(length)).map(Number.prototype.valueOf, n) } exports.slice = function(array, from, count) { var to = from + count; var result = []; if(from === 0) { from = (from - Math.floor(count/2)) to = (from + Math.ceil(count/2) + 1) } else if(from > 0) { from -= 1 to -= 1 } for(; from < to; from += 1) { var i = from if(from < 0 || from >= array.length) i = array.length - Math.abs(from) result.push(array[i]); } return result; }