# python3 # Copyright 2019 Google LLC # # Licensed 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. """Module with the guts of `click` commands. Overrides of the click.core.Command. This is done so flags are inherited between similar commands (the run command). The classes below are meant to be used in click templates like so. @runner.command("run-mock", RunCommand) def run_mock(**kwargs): # mock implementation """ import click class RunCommand(click.core.Command): """Base Run Command with flags. Attributes: method: regex of which suite to choose (e.g. sysbench would run sysbench.cpu, sysbench.memory, and sysbench.mutex) See list command for details. metric: metric(s) to extract. See list command for details. runtime: the runtime(s) on which to run. runs: the number of runs to do of each method. stat: how to compile results in the case of multiple run (e.g. median). """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) method = click.core.Argument(("method",)) metric = click.core.Option(("--metric",), help="The metric to extract.", multiple=True) runtime = click.core.Option(("--runtime",), default=["runc"], help="The runtime to use.", multiple=True) runs = click.core.Option(("--runs",), default=1, help="The number of times to run each benchmark.") stat = click.core.Option( ("--stat",), default="median", help="How to aggregate the data from all runs." "\nmedian - returns the median of all runs (default)" "\nall - returns all results comma separated" "\nmeanstd - returns result as mean,std") self.params.extend([method, runtime, runs, stat, metric]) self.ignore_unknown_options = True self.allow_extra_args = True class LocalCommand(RunCommand): """LocalCommand inherits all flags from RunCommand. Attributes: limit: limits the number of machines on which to run benchmarks. This limits for local how many benchmarks may run at a time. e.g. "startup" requires one machine -- passing two machines would limit two startup jobs at a time. Default is infinity. """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.params.append( click.core.Option( ("--limit",), default=1, help="Limit of number of benchmarks that can run at a given time."))