blob: 1dc58936dbffa57d873d13433ab55894fce8a558 [file] [log] [blame]
package org.apache.bigtop.bigpetstore.qstream;
import java.net.URL;
import java.nio.file.Paths;
import java.util.Random;
/*
* 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.
*/
/**
* Build a load generator based on command line args.
* This class decides, i.e. wether to use HTTP, FileLoadGen, and so on.
*
* We avoided using reflection for this, for all the obvious reasons :).
*/
public class LoadGenFactory {
static final String[] DEFAULT = new String[]{"/tmp","1000","100000","1500","13241234"};
static final String DEFAULT_EXPECTED = "10 to 25K transactions per second on i7 chip w/ SSD";
public static void printUsage() {
String usage =
"BigPetStore Data Generator.\n" +
"Usage: outputDir nStores nCustomers simulationLength [seed]\n" +
"outputDir - (string) directory to write files\n" +
"nStores - (int) number of stores to generate\n" +
"nCustomers - (int) number of customers to generate\n" +
"simulationLength - (float) number of days to simulate\n" +
"seed - (long) seed for RNG. If not given, one is reandomly generated.\n";
System.err.println(usage);
}
public static LoadGen parseArgs(String[] args) throws Throwable {
if(args.length==0){
System.out.println("Running default simulation, which should result in " + DEFAULT_EXPECTED);
return parseArgs(DEFAULT);
}
int nStores = 1000;
int nCustomers = 1000;
double simulationLength = -1;
long seed = System.currentTimeMillis();
String outputARG = "/shared";
int PARAMS=5;
if (args.length != PARAMS && args.length != (PARAMS - 1)) {
printUsage();
System.exit(1);
}
//Was Dir, now ARG, since we can support http or file paths.
outputARG = args[0];
try {
nStores = Integer.parseInt(args[1]);
} catch (Throwable t) {
System.err.println("Unable to parse '" + args[1] + "' as an integer for nStores.\n");
printUsage();
System.exit(1);
}
try {
nCustomers = Integer.parseInt(args[2]);
} catch (Throwable t) {
System.err.println("Unable to parse '" + args[2] + "' as an integer for nCustomers.\n");
printUsage();
System.exit(1);
}
try {
simulationLength = Double.parseDouble(args[3]);
} catch (Throwable t) {
System.err.println("Unable to parse '" + args[3] + "' as a float for simulationLength.\n");
printUsage();
System.exit(1);
}
//If seed isnt present, then no is used seed.
if (args.length == PARAMS) {
try {
seed = Long.parseLong(args[4]);
} catch (Throwable t) {
System.err.println("Unable to parse '" + args[4] + "' as a long for seed.\n");
printUsage();
System.exit(1);
}
} else {
seed = new Random().nextLong();
}
if(outputARG.startsWith("http://")){
return new HttpLoadGen(nStores,nCustomers,simulationLength,seed, new URL(outputARG));
}
else{
return new FileLoadGen(nStores,nCustomers,simulationLength,seed, Paths.get(outputARG));
}
}
}