Github user cestella commented on a diff in the pull request: https://github.com/apache/metron/pull/958#discussion_r174186422 --- Diff: metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/load/LoadOptions.java --- @@ -0,0 +1,504 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.metron.performance.load; + +import com.google.common.base.Joiner; +import org.apache.commons.cli.*; +import org.apache.metron.common.utils.JSONUtils; +import org.apache.metron.common.utils.cli.CLIOptions; +import org.apache.metron.performance.sampler.BiasedSampler; +import org.apache.metron.stellar.common.utils.ConversionUtils; +import org.apache.metron.common.utils.cli.OptionHandler; + +import javax.annotation.Nullable; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; +import java.util.Optional; + +public enum LoadOptions implements CLIOptions<LoadOptions> { + HELP(new OptionHandler<LoadOptions>() { + + @Override + public String getShortCode() { + return "h"; + } + + @Nullable + @Override + public Option apply(@Nullable String s) { + return new Option(s, "help", false, "Generate Help screen"); + } + }), + ZK(new OptionHandler<LoadOptions>() { + @Nullable + @Override + public Option apply(@Nullable String s) { + Option o = new Option(s, "zk_quorum", true, "zookeeper quorum"); + o.setArgName("QUORUM"); + o.setRequired(false); + return o; + } + + @Override + public Optional<Object> getValue(LoadOptions option, CommandLine cli) { + if(option.has(cli)) { + return Optional.ofNullable(option.get(cli)); + } + else { + return Optional.empty(); + } + } + + @Override + public String getShortCode() { + return "z"; + } + }), + CONSUMER_GROUP(new OptionHandler<LoadOptions>() { + @Nullable + @Override + public Option apply(@Nullable String s) { + Option o = new Option(s, "consumer_group", true, "Consumer Group. The default is " + LoadGenerator.CONSUMER_GROUP); + o.setArgName("GROUP_ID"); + o.setRequired(false); + return o; + } + + @Override + public Optional<Object> getValue(LoadOptions option, CommandLine cli) { + if(option.has(cli)) { + return Optional.ofNullable(option.get(cli)); + } + else { + return Optional.of(LoadGenerator.CONSUMER_GROUP); + } + } + + @Override + public String getShortCode() { + return "cg"; + } + }), + BIASED_SAMPLE(new OptionHandler<LoadOptions>() { + @Nullable + @Override + public Option apply(@Nullable String s) { + Option o = new Option(s, "sample_bias", true, "The discrete distribution to bias the sampling. " + + "This is a CSV of 2 columns. The first column is the % of the templates " + + "and the 2nd column is the probability (0-100) that it's chosen. For instance:\n" + + " 20,80\n" + + " 80,20\n" + + "implies that 20% of the templates will comprise 80% of the output and the remaining 80% of the templates will comprise 20% of the output."); + o.setArgName("BIAS_FILE"); + o.setRequired(false); + return o; + } + + @Override + public Optional<Object> getValue(LoadOptions option, CommandLine cli) { + if(!option.has(cli)) { + return Optional.empty(); + } + File discreteDistributionFile = new File(option.get(cli)); + if(discreteDistributionFile.exists()) { + try { + + return Optional.ofNullable(BiasedSampler.readDistribution(discreteDistributionFile)); + } catch (FileNotFoundException e) { + throw new IllegalStateException("Unable to read distribution file: " + option.get(cli), e); + } catch (IOException e) { --- End diff -- done
---