class Cluster(): def __init__(self, config, cluster='main'): self.ring = ConsistentHashingRouter(config.replication_factor(cluster)) try: dest_list = config.destinations(cluster) self.destinations = util.parseDestinations(dest_list) except ValueError as e: raise SystemExit("Unable to parse destinations!" + str(e)) for d in self.destinations: self.ring.addDestination(d) def getDestinations(self, metric): return self.ring.getDestinations(metric)
metric_key = arg # Check required key if not metric_key: print('Usage: python graphite-router.py -k <metric key>') sys.exit(2) ## Settings # Absolute path to the Graphite Data Directory DATA_DIR = join(ROOT_DIR, 'storage/whisper') # Parse config settings.readFrom(join(ROOT_DIR, 'conf/carbon.conf'), 'relay') # Read in destinations from config destinations = util.parseDestinations(settings.DESTINATIONS) # Setup Router router = ConsistentHashingRouter(settings.REPLICATION_FACTOR) for destination in destinations: router.addDestination(destination); # Echo routes print('routes for ' + metric_key) routes = router.getDestinations(metric_key) for route in routes: print(route)
WHISPER_PATH = '/opt/graphite/storage/whisper' DESTINATIONS = [ "vnode-01:3001:01", "vnode-02:3002:02", "vnode-03:3003:03", "vnode-04:3004:04", "vnode-05:3005:05", "vnode-06:3006:06", "vnode-07:3007:07", "vnode-08:3008:08", "vnode-09:3009:09", "vnode-10:3010:10", "vnode-11:3011:11", "vnode-12:3012:12", "vnode-13:3013:13", "vnode-14:3014:14", "vnode-15:3015:15", "vnode-16:3016:16", "vnode-17:3017:17", "vnode-18:3018:18", "vnode-19:3019:19", "vnode-20:3020:20", "vnode-21:3021:21", "vnode-22:3022:22", "vnode-23:3023:23", "vnode-24:3024:24", "vnode-25:3025:25", "vnode-26:3026:26", "vnode-27:3027:27", "vnode-28:3028:28", "vnode-29:3029:29", "vnode-30:3030:30", "vnode-31:3031:31", "vnode-32:3032:32" ] # use the ConsistentHashingRouter from carbon-relay router = ConsistentHashingRouter(replication_factor=REPLICATION_FACTOR) for dest in DESTINATIONS: router.addDestination(dest.split(':')) file_map = {} count = 0 print "Beginning scan of: %s" % WHISPER_PATH for dirname, dirnames, filenames in os.walk(WHISPER_PATH): for filename in filenames: pathname = os.path.join(dirname, filename) rel_pathname = os.path.relpath(pathname, WHISPER_PATH) basename, ext = os.path.splitext(filename) if '.wsp' != ext: print('skipping %s' % pathname) # convert filesystem path to metric style path. remove WHISPER_DIR prefix, then # convert / to .