Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
BenchmarkOption |
|
| 1.5;1.5 |
1 | /* | |
2 | * Licensed to the Apache Software Foundation (ASF) under one | |
3 | * or more contributor license agreements. See the NOTICE file | |
4 | * distributed with this work for additional information | |
5 | * regarding copyright ownership. The ASF licenses this file | |
6 | * to you under the Apache License, Version 2.0 (the | |
7 | * "License"); you may not use this file except in compliance | |
8 | * with the License. You may obtain a copy of the License at | |
9 | * | |
10 | * http://www.apache.org/licenses/LICENSE-2.0 | |
11 | * | |
12 | * Unless required by applicable law or agreed to in writing, software | |
13 | * distributed under the License is distributed on an "AS IS" BASIS, | |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
15 | * See the License for the specific language governing permissions and | |
16 | * limitations under the License. | |
17 | */ | |
18 | ||
19 | package org.apache.giraph.benchmark; | |
20 | ||
21 | import org.apache.commons.cli.CommandLine; | |
22 | import org.apache.commons.cli.Options; | |
23 | import org.apache.log4j.Logger; | |
24 | ||
25 | /** | |
26 | * Command line options for benchmarks | |
27 | */ | |
28 | public class BenchmarkOption { | |
29 | /** Option for help */ | |
30 | 0 | public static final BenchmarkOption HELP = |
31 | new BenchmarkOption("h", "help", false, "Help"); | |
32 | /** Option for verbose */ | |
33 | 0 | public static final BenchmarkOption VERBOSE = |
34 | new BenchmarkOption("v", "verbose", false, "Verbose"); | |
35 | /** Option for number of workers */ | |
36 | 0 | public static final BenchmarkOption WORKERS = |
37 | new BenchmarkOption("w", "workers", true, "Number of workers", | |
38 | "Need to choose the number of workers (-w)"); | |
39 | /** Option for number of supersteps */ | |
40 | 0 | public static final BenchmarkOption SUPERSTEPS = |
41 | new BenchmarkOption("s", "supersteps", true, | |
42 | "Supersteps to execute before finishing", | |
43 | "Need to set the number of supersteps (-s)"); | |
44 | /** Option for number of vertices */ | |
45 | 0 | public static final BenchmarkOption VERTICES = |
46 | new BenchmarkOption("V", "aggregateVertices", true, | |
47 | "Aggregate vertices", "Need to set the aggregate vertices (-V)"); | |
48 | /** Option for number of edges per vertex */ | |
49 | 0 | public static final BenchmarkOption EDGES_PER_VERTEX = |
50 | new BenchmarkOption("e", "edgesPerVertex", true, | |
51 | "Edges per vertex", | |
52 | "Need to set the number of edges per vertex (-e)"); | |
53 | /** Option for minimum ratio of partition-local edges */ | |
54 | 0 | public static final BenchmarkOption LOCAL_EDGES_MIN_RATIO = |
55 | new BenchmarkOption( | |
56 | "l", "localEdgesMinRatio", true, | |
57 | "Minimum ratio of partition-local edges (default is 0)"); | |
58 | /** Option for using Jython */ | |
59 | 0 | public static final BenchmarkOption JYTHON = |
60 | new BenchmarkOption("j", "jython", false, "Use jython implementation"); | |
61 | /** Option for path to script for computation */ | |
62 | 0 | public static final BenchmarkOption SCRIPT_PATH = |
63 | new BenchmarkOption("sp", "scriptPath", true, | |
64 | "Path to script for computation, can be local or HDFS path"); | |
65 | ||
66 | /** Short option */ | |
67 | private String shortOption; | |
68 | /** Long option */ | |
69 | private String longOption; | |
70 | /** True iff option requires an argument */ | |
71 | private boolean hasArgument; | |
72 | /** Description of the option */ | |
73 | private String description; | |
74 | /** | |
75 | * Message to print if the option is missing, null if the option is not | |
76 | * required | |
77 | */ | |
78 | private String missingMessage; | |
79 | ||
80 | /** | |
81 | * Constructor for option which is not required | |
82 | * | |
83 | * @param shortOption Short option | |
84 | * @param longOption Long option | |
85 | * @param hasArgument True iff option requires argument | |
86 | * @param description Description of the option | |
87 | */ | |
88 | public BenchmarkOption(String shortOption, String longOption, | |
89 | boolean hasArgument, String description) { | |
90 | 0 | this(shortOption, longOption, hasArgument, description, null); |
91 | 0 | } |
92 | ||
93 | /** | |
94 | * Constructor for option which is not required | |
95 | * | |
96 | * @param shortOption Short option | |
97 | * @param longOption Long option | |
98 | * @param hasArgument True iff option requires argument | |
99 | * @param description Description of the option | |
100 | * @param missingMessage Message to print if the option is missing | |
101 | */ | |
102 | public BenchmarkOption(String shortOption, String longOption, | |
103 | 0 | boolean hasArgument, String description, String missingMessage) { |
104 | 0 | this.shortOption = shortOption; |
105 | 0 | this.longOption = longOption; |
106 | 0 | this.hasArgument = hasArgument; |
107 | 0 | this.description = description; |
108 | 0 | this.missingMessage = missingMessage; |
109 | 0 | } |
110 | ||
111 | /** | |
112 | * Check if the option is required | |
113 | * | |
114 | * @return True iff the option is required | |
115 | */ | |
116 | public boolean isRequired() { | |
117 | 0 | return missingMessage != null; |
118 | } | |
119 | ||
120 | /** | |
121 | * Add option to cli Options | |
122 | * | |
123 | * @param options Cli Options | |
124 | */ | |
125 | public void addToOptions(Options options) { | |
126 | 0 | options.addOption(shortOption, longOption, hasArgument, description); |
127 | 0 | } |
128 | ||
129 | /** | |
130 | * If option is not required just return true. | |
131 | * If option is required, check if it's present in CommandLine, | |
132 | * and if it's not print the missingMessage to log. | |
133 | * | |
134 | * @param cmd CommandLine | |
135 | * @param log Logger to print the missing message to | |
136 | * @return False iff the option is required but is not specified in cmd | |
137 | */ | |
138 | public boolean checkOption(CommandLine cmd, Logger log) { | |
139 | 0 | if (!isRequired()) { |
140 | 0 | return true; |
141 | } | |
142 | 0 | if (!cmd.hasOption(shortOption)) { |
143 | 0 | log.info(missingMessage); |
144 | 0 | return false; |
145 | } | |
146 | 0 | return true; |
147 | } | |
148 | ||
149 | /** | |
150 | * Check if the option is present in CommandLine | |
151 | * | |
152 | * @param cmd CommandLine | |
153 | * @return True iff the option is present in CommandLine | |
154 | */ | |
155 | public boolean optionTurnedOn(CommandLine cmd) { | |
156 | 0 | return cmd.hasOption(shortOption); |
157 | } | |
158 | ||
159 | /** | |
160 | * Retrieve the argument, if any, of this option | |
161 | * | |
162 | * @param cmd CommandLine | |
163 | * @return Value of the argument if option is set and has an argument, | |
164 | * otherwise null | |
165 | */ | |
166 | public String getOptionValue(CommandLine cmd) { | |
167 | 0 | return cmd.getOptionValue(shortOption); |
168 | } | |
169 | ||
170 | /** | |
171 | * Retrieve the argument of this option as integer value | |
172 | * | |
173 | * @param cmd CommandLine | |
174 | * @return Value of the argument as integer value | |
175 | */ | |
176 | public int getOptionIntValue(CommandLine cmd) { | |
177 | 0 | return Integer.parseInt(getOptionValue(cmd)); |
178 | } | |
179 | ||
180 | /** | |
181 | * Retrieve the argument of this option as integer value, | |
182 | * or default value if option is not set | |
183 | * | |
184 | * @param cmd CommandLine | |
185 | * @param defaultValue Default value | |
186 | * @return Value of the argument as integer value, | |
187 | * or default value if option is not set | |
188 | */ | |
189 | public int getOptionIntValue(CommandLine cmd, int defaultValue) { | |
190 | 0 | return optionTurnedOn(cmd) ? getOptionIntValue(cmd) : defaultValue; |
191 | } | |
192 | ||
193 | /** | |
194 | * Retrieve the argument of this option as long value | |
195 | * | |
196 | * @param cmd CommandLine | |
197 | * @return Value of the argument as long value | |
198 | */ | |
199 | public long getOptionLongValue(CommandLine cmd) { | |
200 | 0 | return Long.parseLong(getOptionValue(cmd)); |
201 | } | |
202 | ||
203 | /** | |
204 | * Retrieve the argument of this option as float value | |
205 | * | |
206 | * @param cmd CommandLine | |
207 | * @return Value of the argument as float value | |
208 | */ | |
209 | public float getOptionFloatValue(CommandLine cmd) { | |
210 | 0 | return Float.parseFloat(getOptionValue(cmd)); |
211 | } | |
212 | ||
213 | /** | |
214 | * Retrieve the argument of this option as float value, | |
215 | * or default value if option is not set | |
216 | * | |
217 | * @param cmd CommandLine | |
218 | * @param defaultValue Default value | |
219 | * @return Value of the argument as float value, | |
220 | * or default value if option is not set | |
221 | */ | |
222 | public float getOptionFloatValue(CommandLine cmd, float defaultValue) { | |
223 | 0 | return optionTurnedOn(cmd) ? getOptionFloatValue(cmd) : defaultValue; |
224 | } | |
225 | } |