| package org.apache.cassandra.stress.settings; |
| /* |
| * |
| * 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. |
| * |
| */ |
| |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import com.google.common.collect.ImmutableList; |
| |
| public enum Command |
| { |
| |
| READ(false, "standard1", |
| "Multiple concurrent reads - the cluster must first be populated by a write test", |
| CommandCategory.BASIC |
| ), |
| WRITE(true, "standard1", |
| "insert", |
| "Multiple concurrent writes against the cluster", |
| CommandCategory.BASIC |
| ), |
| MIXED(true, null, |
| "Interleaving of any basic commands, with configurable ratio and distribution - the cluster must first be populated by a write test", |
| CommandCategory.MIXED |
| ), |
| COUNTER_WRITE(true, "counter1", |
| "counter_add", |
| "Multiple concurrent updates of counters.", |
| CommandCategory.BASIC |
| ), |
| COUNTER_READ(false, "counter1", |
| "counter_get", |
| "Multiple concurrent reads of counters. The cluster must first be populated by a counterwrite test.", |
| CommandCategory.BASIC |
| ), |
| USER(true, null, |
| "Interleaving of user provided queries, with configurable ratio and distribution", |
| CommandCategory.USER |
| ), |
| |
| HELP(false, null, "-?", "Print help for a command or option", null), |
| PRINT(false, null, "Inspect the output of a distribution definition", null), |
| LEGACY(false, null, "Legacy support mode", null), |
| VERSION(false, null, "Print the version of cassandra stress", null) |
| ; |
| |
| private static final Map<String, Command> LOOKUP; |
| static |
| { |
| final Map<String, Command> lookup = new HashMap<>(); |
| for (Command cmd : values()) |
| { |
| for (String name : cmd.names) |
| lookup.put(name, cmd); |
| } |
| LOOKUP = lookup; |
| } |
| |
| public static Command get(String command) |
| { |
| return LOOKUP.get(command.toLowerCase()); |
| } |
| |
| public final boolean updates; |
| public final CommandCategory category; |
| public final List<String> names; |
| public final String description; |
| public final String table; |
| |
| Command(boolean updates, String table, String description, CommandCategory category) |
| { |
| this(updates, table, null, description, category); |
| } |
| |
| Command(boolean updates, String table, String extra, String description, CommandCategory category) |
| { |
| this.table = table; |
| this.updates = updates; |
| this.category = category; |
| List<String> names = new ArrayList<>(); |
| names.add(this.toString().toLowerCase()); |
| names.add(this.toString().replaceAll("_", "").toLowerCase()); |
| if (extra != null) |
| { |
| names.add(extra.toLowerCase()); |
| names.add(extra.replaceAll("_", "").toLowerCase()); |
| } |
| this.names = ImmutableList.copyOf(names); |
| this.description = description; |
| } |
| |
| public void printHelp() |
| { |
| helpPrinter().run(); |
| } |
| |
| public final Runnable helpPrinter() |
| { |
| switch (this) |
| { |
| case PRINT: |
| return SettingsMisc.printHelpPrinter(); |
| case HELP: |
| return SettingsMisc.helpHelpPrinter(); |
| case LEGACY: |
| return Legacy.helpPrinter(); |
| } |
| switch (category) |
| { |
| case USER: |
| return SettingsCommandUser.helpPrinter(); |
| case BASIC: |
| return SettingsCommandPreDefined.helpPrinter(this); |
| case MIXED: |
| return SettingsCommandPreDefinedMixed.helpPrinter(); |
| } |
| throw new AssertionError(); |
| } |
| |
| } |