def main(): parser = argparse.ArgumentParser(description='generate exp_sys pb file') parser.add_argument('--conf', type=str, required=True, help='config file') parser.add_argument('--input', type=str, help='input file name') parser.add_argument('--output', type=str, required=True, help='output file name') parser.add_argument('--dry', action='store_true', help='whether dry run') parser.add_argument('--verbose', action='store_true', help='print verbose log') args = parser.parse_args() config = ConfigParser.ConfigParser() config.read(args.conf) dbconf = DbConf._make([config.get('mysql', 'host'), config.get('mysql', 'port'), config.get('mysql', 'user'), config.get('mysql', 'passwd'), config.get('mysql', 'dbname')]) db = ExpDb(dbconf) json = None try: json = ExpJson(args.input) except: logger.warn('failed to load json file %s', args.input) ed = ExpDeploy(db, json) data = ed.build() logger.info('dump deployment (%d bytes) to file %s', len(data), args.output) with open(args.output, 'w') as fp: fp.write(data)
def _build_experiments(self): # merge with existed experiments db_exps = {} for e in self.db.get_experiments(): db_exps[e.id] = e json_exps = [] if self.json: for e in self.json.get_experiments(): json_exps.append(Experiment.from_json(e)) for e in json_exps: layer = self.layers.get(e.layer_id) if not layer: logger.warn('layer %d is not exists for exp %d', e.layer_id, e.id) continue if e.id in db_exps and self._eq_exp(e, db_exps[e.id]): cnt = layer.load(e.id, e.ranges) self.exps[e.id] = e del db_exps[e.id] logger.info('load existed experiment %d, assigned %d buckets', e.id, cnt) for row in db_exps.values(): exp = Experiment.from_db(row) layer = self.layers.get(row.layer_id) # TODO catch exception bucketRanges = layer.assign(row.id, row.buckets_num) exp.set_bucket_ranges(bucketRanges) self.exps[row.id] = exp logger.info('assign new experiment %d in layer %d', row.id, row.layer_id)
def main(): parser = argparse.ArgumentParser(description='generate exp_sys pb file') parser.add_argument('--conf', type=str, required=True, help='config file') parser.add_argument('--input', type=str, help='input file name') parser.add_argument('--output', type=str, required=True, help='output file name') parser.add_argument('--dry', action='store_true', help='whether dry run') parser.add_argument('--verbose', action='store_true', help='print verbose log') args = parser.parse_args() config = ConfigParser.ConfigParser() config.read(args.conf) dbconf = DbConf._make([ config.get('mysql', 'host'), config.get('mysql', 'port'), config.get('mysql', 'user'), config.get('mysql', 'passwd'), config.get('mysql', 'dbname') ]) db = ExpDb(dbconf) json = None try: json = ExpJson(args.input) except: logger.warn('failed to load json file %s', args.input) ed = ExpDeploy(db, json) data = ed.build() logger.info('dump deployment (%d bytes) to file %s', len(data), args.output) with open(args.output, 'w') as fp: fp.write(data)
def to_json(self): bucketRanges = self.buckets.get_bucket_ranges() if len(bucketRanges) > 1: logger.warn('domain %d, something wrong? to many buckets', self.id) return {'id': self.id, 'range': bucketRanges[0].to_json()}