Github user justinleet commented on a diff in the pull request:

    https://github.com/apache/metron/pull/958#discussion_r173920926
  
    --- 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 --
    
    This is nitpicky, but the two catch branches are the same.  Is it worth 
either making them more unique or collapsing them?


---

Reply via email to