#!/usr/bin/env node // Copyright 2015 The MemDB Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // implied. See the License for the specific language governing // permissions and limitations under the License. See the AUTHORS file // for names of contributors. 'use strict'; var minimist = require('minimist'); var helpContent = '\ MemDB Index Builder\n\n\ Usage: memdbindex [rebuild | drop] [options]\n\ Options:\n\ -c, --conf path Config file path\n\ -t, --coll collection Collection name\n\ -k, --keys key1.key2 Index keys (split with ".")\n'; var getIndexOpts = function(conf, collName, keys){ var indexes = conf.collections && conf.collections[collName] && conf.collections[collName].indexes; if(!indexes){ return null; } for(var i in indexes){ var index = indexes[i]; if(JSON.stringify(index.keys.sort()) === JSON.stringify(keys.sort())){ return index; } } return null; }; if (require.main === module){ var argv = minimist(process.argv.slice(3)); var cmd = process.argv[2]; if(process.argv.length <= 3 || argv.help || argv.h){ console.log(helpContent); process.exit(0); } var config = require('../app/config'); config.init(argv.conf || argv.c); var conf = config.shardConfig(config.getShardIds()[0]); var collName = argv.coll || argv.t; if(!collName){ throw new Error('collection not specified'); } var keys = argv.keys || argv.k; if(!keys){ throw new Error('keys not specified'); } keys = keys.split('.').sort(); var indexbuilder = require('../app/indexbuilder'); if(cmd === 'rebuild'){ var opts = getIndexOpts(conf, collName, keys); if(!opts){ throw new Error('specified index is not configured'); } indexbuilder.rebuild(conf, collName, keys, opts); } else if(cmd === 'drop'){ indexbuilder.drop(conf, collName, keys); } else{ throw new Error('invalid cmd - ' + cmd); } }