blob: 56685bd89fd7341af0ae70685ea3fdc7616e205a [file] [log] [blame]
/*
* 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.uima.ducc.cli;
import org.apache.uima.ducc.IErrorHandler;
import org.apache.uima.ducc.transport.event.cli.JobReplyProperties;
import org.apache.uima.ducc.transport.event.cli.JobRequestProperties;
import org.apache.uima.ducc.transport.event.cli.JobSpecificationProperties;
import org.apache.uima.ducc.transport.event.cli.ReservationRequestProperties;
import org.apache.uima.ducc.transport.event.cli.ReservationSpecificationProperties;
import org.apache.uima.ducc.transport.event.cli.ServiceRequestProperties;
import org.apache.uima.ducc.transport.event.cli.SpecificationProperties;
/*
* These are the constants supported by the 'not-using-a-props-file' form of registration in DuccServiceApi.
*
* There are here so that hopefully we can avoid touching anything in common or transport when updating
* the registration parameters.
*/
public interface IUiOptions
{
//
// decode() mean convert the enum into the string the user uses
// encode() means take the user's string and turn it into th enum
// description() is a short description of the option for the commons cli parser
// argname() is a name for the argument for the usage() part of cli parser
//
static final int help_width = 120;
//
// NOTE regarding noargs() and optargs: if the option can occur in a properties file
// the option should be configured with
// optargs true
// deflt "true"
// or
// deflt ""
// because the Java properties class will NPE if you have a key and no value. This
// Java restriction makes it hard to create a true boolean value.
//
// This doesn't matter if the properties is a file because the properties reader
// inserts a "" which we interpret as "no argument provided", but in the API,
// you want to provide a meaningful value, or no value, not "".
//
enum UiOption
implements IUiOption
{
Administrators {
public String pname() { return "administrators"; }
public String argname() { return "list of ids"; }
public String description() { return "Blank-delimited list of userids allowed to manage this service."; }
public String example() { return "bob mary jimbo"; }
},
AllInOne {
public String pname() { return "all_in_one"; }
public String argname() { return "local|remote"; }
public String description() { return "Run driver and pipeline in single process."; }
},
AttachConsole {
public String pname() { return "attach_console"; }
public boolean optargs() { return true; }
public String deflt() { return "true"; }
public String description() { return "If specified, redirect remote stdout and stderr to the local submitting console."; }
},
Autostart {
public String pname() { return "autostart"; }
public String argname() { return "boolean: true or false"; }
public String description() { return "If True, start the service when DUCC starts."; }
},
CancelOnInterrupt {
public String pname() { return SpecificationProperties.key_cancel_on_interrupt; }
public boolean optargs() { return true; }
public String deflt() { return "true"; }
public String description() { return "Cancel on interrupt (Ctrl-C). Implies "+WaitForCompletion.pname(); }
},
Classpath {
public String pname() { return JobSpecificationProperties.key_classpath; }
public String description() { return "Classpath for the Job. Default is current classpath."; }
public String argname() { return "java classpath"; }
},
Debug {
public String pname() { return "debug"; }
public boolean noargs() { return true; }
public String description() { return "Enable CLI Debugging messages."; }
},
DjPid {
public String pname() { return JobRequestProperties.key_dpid; }
public String argname() { return "number"; }
public String description() { return "DUCC Process Id. If specified only this DUCC process will be canceled. If not specified, then entire job will be canceled.";}
public String example() { return "22"; }
},
DriverDebug {
public String pname() { return "driver_debug"; }
public String argname() { return "debugger-port-number"; }
public String description() { return "Listening port number the remote driver process is to connect to."; }
public String example() { return "8001"; }
},
Description {
public String pname() { return JobSpecificationProperties.key_description; }
public String argname() { return "string"; }
public String description() { return "Description of the run."; }
public String example() { return "My excellent job!"; }
public String deflt() { return "[Empty Description]"; }
},
DriverDescriptorCR {
public String pname() { return JobSpecificationProperties.key_driver_descriptor_CR; }
public String description() { return "Driver (collection reader) descriptor."; }
public String argname() { return "descriptor xml"; }
public String example() { return "/home/" + System.getProperty("user.name") + "/descriptors/MyCR.xml"; }
public boolean required() { return true; }
},
DriverDescriptorCROverrides {
public String pname() { return JobSpecificationProperties.key_driver_descriptor_CR_overrides; }
public String argname() { return "list of overrides"; }
public String description() { return "Driver Collection Reader configuration parameter name/value pair overrides. Parameters must already be defined in the CR descriptor."; }
public String example() { return "name1=value1 name2=\"value2a value2b value2c\" name3=value3..."; }
},
DriverExceptionHandler {
public String pname() { return JobSpecificationProperties.key_driver_exception_handler; }
public String description() { return "Driver exception handler class. Must implement "+IErrorHandler.class.getName(); }
public String argname() { return "classname"; }
public String example() { return "org.myOrg.myProject.MyErrorHandler"; }
},
DriverExceptionHandlerArguments {
public String pname() { return JobSpecificationProperties.key_driver_exception_handler_arguments; }
public String argname() { return "list of arguments"; }
public String description() { return "Blank-delimited list of arguments to be passed to the built-in or custom exception handler. The example gives the defaults for the built-in exception handler."; }
public String example() { return "max_job_errors=15 max_timeout_retrys_per_workitem=0"; }
},
DriverJvmArgs {
public String pname() { return JobSpecificationProperties.key_driver_jvm_args; }
public String argname() { return "jvm arguments"; }
public String description() { return "Blank-delimited list of JVM Arguments passed to the job driver."; }
public String example() { return "-Xmx100M -DMYVAR=foo"; }
},
Environment {
public String pname() { return JobSpecificationProperties.key_environment; }
public String argname() { return "env vars"; }
public String description() { return "Blank-delimited list of environment variables."; }
public String example() { return "TERM=xterm DISPLAY=me.org.net:1.0 LANG UIMA*"; }
},
Help {
public String pname() { return "help"; }
public boolean noargs() { return true; }
public String description() { return "Print this help message"; }
},
Instances {
public String pname() { return "instances"; }
public String argname() { return "integer"; }
public String description() { return "Number of service processes."; }
},
InstanceFailureLimit {
public String pname() { return "instance_failures_limit"; }
public String description() { return "Number of consecutive instance failures that will cause the service to be stopped."; }
public String argname() { return "integer"; }
},
InstanceInitFailureLimit {
public String pname() { return "instance_init_failures_limit"; }
public String description() { return "Number of consecutive instance initialization failures that will cause SM to cease starting the service."; }
public String argname() { return "integer"; }
},
InstanceFailureWindow {
public String pname() { return "instance_failures_window"; }
public String argname() { return "integer"; }
public String description() { return "Size of the window (in minutes) used to manage service instance runtime failures."; }
public String example() { return "30"; }
},
JobId {
public String pname() { return JobRequestProperties.key_id; }
public String argname() { return "string"; }
public String description() { return "The id of the job"; }
public boolean required() { return true; }
},
ManagedReservationId {
public String pname() { return JobRequestProperties.key_id; }
public String argname() { return "string"; }
public String description() { return "The id of the managed reservation"; }
public boolean required() { return true; }
},
Jvm {
public String pname() { return JobSpecificationProperties.key_jvm; }
public String argname() { return "path-name-to-java"; }
public String description() { return "The jvm to use. Must be a full path to the 'java' executable. Default is the jvm that DUCC is using."; }
public String example() { return "/opt/vendor/jdk-1.7/bin/java"; }
},
LogDirectory {
public String pname() { return JobSpecificationProperties.key_log_directory; }
public String argname() { return "path"; }
public String description() { return "The directory where logs are written."; }
public String deflt() { return "${HOME}/ducc/logs"; }
},
Message {
public String pname() { return JobReplyProperties.key_message; }
public String argname() { return "string"; }
public String description() { return "Orchestrator response string - internally generated."; }
},
Modify {
public String pname() { return "modify"; }
public String argname() { return "service-id-or-endpoint" ; }
public String description() { return "Modify meta properties for a registered service." ; }
public boolean required() { return true; }
},
/*
@Deprecated
NumberOfInstances {
public String pname() { return ReservationSpecificationProperties.key_number_of_instances; }
public String argname() { return "integer"; }
public String description() { return "Number of instances to reserve"; }
public String example() { return "1"; }
public String deflt() { return "1"; }
},
*/
Quiet {
public String pname() { return "quiet"; }
public String argname() { return null; }
public boolean optargs() { return true; }
public String deflt() { return "true"; }
public String description() { return "Disable CLI Informational messages."; }
},
Register {
public String pname() { return "register"; }
public String argname() { return "specification-file"; }
public boolean optargs() { return true; }
public String deflt() { return ""; } // No specification file
public String description() { return "Register a service."; }
},
ReservationId {
public String pname() { return JobRequestProperties.key_id; }
public String argname() { return "string"; }
public String description() { return "The id of the reservation"; }
public boolean required() { return true; }
},
ServicePingArguments {
public String pname() { return "service_ping_arguments"; }
public String argname() { return "string"; }
public String description() { return "Any (service-dependent) ping arguments, to be passed to the pinger."; }
public String example() { return "q_thresh=12,svc_thresh=.01"; }
},
ServiceId { // for use only by SM when spawing a service
public String pname() { return "service_id"; }
public String argname() { return "number"; }
public String description() { return "The numeric id of the service being spawned"; }
public String example() { return "123"; }
},
ServicePingClass {
public String pname() { return "service_ping_class"; }
public String argname() { return "classname"; }
public String description() { return "Class to ping ervice, must extend AServicePing.java"; }
public String example() { return "org.bob.Pinger"; }
},
ServicePingClasspath {
public String pname() { return "service_ping_classpath"; }
public String argname() { return "classpath"; }
public String description() { return "Classpath containing service_custom_ping class and dependencies."; }
public String example() { return "Bob.jar"; }
},
ServicePingJvmArgs {
public String pname() { return "service_ping_jvm_args"; }
public String argname() { return "java-system-property-assignments"; }
public String description() { return "-D jvm system property assignments to pass to jvm"; }
public String example() { return "-DxmX=3G -DxnS=1M"; }
},
ServicePingTimeout {
public String pname() { return "service_ping_timeout"; }
public String argname() { return "time-in-ms"; }
public String description() { return "Time in milliseconds to wait for a ping to the service."; }
// public String deflt() { return "500"; }
// Avoid warning about ignored argument when using default pinger (but most ping arguments ignored for all internal pingers!)
},
ServicePingDoLog {
public String pname() { return "service_ping_dolog"; }
public String argname() { return "boolean"; }
public String description() { return "If specified, log the pinger, else suppress the log."; }
},
ServiceTypeCustom {
public String pname() { return ServiceRequestProperties.key_service_type_custom; }
public String argname() { return null; }
public boolean optargs() { return true; }
public String description() { return "Service type - internally generated"; }
},
ServiceTypeOther {
public String pname() { return ServiceRequestProperties.key_service_type_other; }
public String argname() { return null; }
public boolean optargs() { return true; }
public String description() { return "Service type - internally generated"; }
},
ServiceTypeUima {
public String pname() { return ServiceRequestProperties.key_service_type_uima; }
public String argname() { return null; }
public boolean optargs() { return true; }
public String description() { return "Service type - internally generated"; }
},
Start {
public String pname() { return "start"; }
public String description() { return "Start a registered service." ; }
public String argname() { return "service-id-or-endpoint" ; }
},
Stop {
public String pname() { return "stop"; }
public String description() { return "Stop a registered service." ; }
public String argname() { return "service-id-or-endpoint" ; }
},
Enable {
public String pname() { return "enable"; }
public String description() { return "Allow deployment starts for this service" ; }
public String argname() { return "service-id-or-endpoint" ; }
},
Disable {
public String pname() { return "disable"; }
public String description() { return "Disable deployment starts for this service." ; }
public String argname() { return "service-id-or-endpoint" ; }
},
Observe {
public String pname() { return "observe_references"; }
public String description() { return "Enable reference-started control for a manually-started service." ; }
public String argname() { return "service-id-or-endpoint" ; }
},
Ignore {
public String pname() { return "ignore_references"; }
public String description() { return "Disable reference-started control of service and revert to manual control." ; }
public String argname() { return "service-id-or-endpoint" ; }
},
SubmitPid {
// generated
public String pname() { return JobRequestProperties.key_submitter_pid_at_host; }
public String argname() { return null; }
public boolean optargs() { return true; }
},
ProcessDebug {
public String pname() { return "process_debug"; }
public String argname() { return "debugger-port-number"; }
public String description() { return "Listening port number the remote process is to connect to."; }
public String example() { return "8000"; }
},
ProcessDescriptorAE {
public String pname() { return JobSpecificationProperties.key_process_descriptor_AE; }
public String description() { return "Process Analysis Enginefor aggregate."; }
public String argname() { return "descriptor xml"; }
public String example() { return "/home/" + System.getProperty("user.name") + "/descriptors/MyAE.xml"; }
},
ProcessDescriptorAEOverrides {
public String pname() { return JobSpecificationProperties.key_process_descriptor_AE_overrides; }
public String argname() { return "list of overrides"; }
public String description() { return "Process Analysis Engine configuration parameter name/value pair overrides. Parameters must already be defined in the AE descriptor."; }
public String example() { return "name1=value1 name2=\"value2a value2b value2c\" name3=value3..."; }
},
ProcessDescriptorCC {
public String pname() { return JobSpecificationProperties.key_process_descriptor_CC; }
public String description() { return "Process CAS Consumer for aggregate."; }
public String argname() { return "descriptor xml"; }
public String example() { return "/home/" + System.getProperty("user.name") + "/descriptors/MyCC.xml"; }
},
ProcessDescriptorCCOverrides {
public String pname() { return JobSpecificationProperties.key_process_descriptor_CC_overrides; }
public String argname() { return "list of overrides"; }
public String description() { return "Process CAS Consumer configuration parameter name/value pair overrides. Parameters must already be defined in the CC descriptor."; }
public String example() { return "name1=value1 name2=\"value2a value2b value2c\" name3=value3..."; }
},
ProcessDescriptorCM {
public String pname() { return JobSpecificationProperties.key_process_descriptor_CM; }
public String description() { return "Process CAS Multiplier for aggregate."; }
public String argname() { return "descriptor xml"; }
public String example() { return "/home/" + System.getProperty("user.name") + "/descriptors/MyCM.xml"; }
},
ProcessDescriptorCMOverrides {
public String pname() { return JobSpecificationProperties.key_process_descriptor_CM_overrides; }
public String argname() { return "list of overrides"; }
public String description() { return "Process CAS Multiplier configuration parameter name/value pair overrides. Parameters must already be defined in the CM descriptor."; }
public String example() { return "name1=value1 name2=\"value2a value2b value2c\" name3=value3..."; }
},
ProcessDD {
public String pname() { return JobSpecificationProperties.key_process_DD; }
public String description() { return "Process deployment descriptor (mutually exclusive with CM+AE+CC)."; }
public String argname() { return "dd.xml"; }
public String example() { return "/home/" + System.getProperty("user.name") + "/descriptors/MyDD.xml"; }
},
ProcessDeploymentsMax {
public String pname() { return JobSpecificationProperties.key_process_deployments_max; }
public String description() { return "Maximum number of processes dispatched for this job at any time"; }
public String argname() { return "integer"; }
public String deflt() { return "unlimited"; }
},
ProcessExecutable {
public String pname() { return JobSpecificationProperties.key_process_executable; }
public String argname() { return "program name"; }
public String description() { return "The full path to a program to be executed."; }
public String example() { return "/bin/ls"; }
},
ProcessExecutableRequired {
public String pname() { return JobSpecificationProperties.key_process_executable; }
public String argname() { return "program name"; }
public String description() { return "The full path to a program to be executed."; }
public String example() { return "/bin/ls"; }
public boolean required() { return true; }
},
ProcessExecutableArgs {
public String pname() { return JobSpecificationProperties.key_process_executable_args; }
public String argname() { return "argument list"; }
public String description() { return "Blank-delimited list of arguments for " + ProcessExecutable.pname(); }
public String example() { return "-a -t -l"; }
},
ProcessInitializationTimeMax {
public String pname() { return JobSpecificationProperties.key_process_initialization_time_max; }
public String description() { return DuccUiConstants.desc_process_initialization_time_max; }
public String argname() { return "integer"; }
public String deflt() { return "$$ducc.default.process.init.time.max"; }
},
ProcessInitializationFailuresCap {
public String pname() { return JobSpecificationProperties.key_process_initialization_failures_cap; }
public String description() { return "Number of unexpected job process initialization failures (i.e. System.exit(), kill-15, ...) before the number of Job Processes is capped at the number currently Running."; }
public String argname() { return "integer"; }
public String deflt() { return "99"; }
},
ProcessFailuresLimit {
public String pname() { return JobSpecificationProperties.key_process_failures_limit; }
public String description() { return "Number of unexpected job process failures (i.e. System.exit(), kill-15...) that will cause the job to be terminated."; }
public String argname() { return "integer"; }
public String deflt() { return "20"; }
},
ProcessJvmArgs {
public String pname() { return JobSpecificationProperties.key_process_jvm_args; }
public String argname() { return "jvm arguments"; }
public String description() { return "Blank-delimited list of JVM Arguments passed to each process"; }
public String example() { return "-Xmx100M -DMYVAR=foo"; }
},
ProcessMemorySize {
public String pname() { return JobSpecificationProperties.key_process_memory_size; }
public String argname() { return "size-in-GB"; }
public String description() { return "Maximum memory for each process, in GB."; }
public String example() { return "30"; }
},
ProcessPipelineCount {
public String pname() { return JobSpecificationProperties.key_process_pipeline_count; }
public String description() { return "Number of pipelines per process (i.e. simultaneously processed work-items)."; }
public String argname() { return "integer"; }
public String deflt() { return "4"; }
},
ProcessPerItemTimeMax {
public String pname() { return JobSpecificationProperties.key_process_per_item_time_max; }
public String description() { return "Maximum elapsed time (in minutes) for processing one CAS."; }
public String argname() { return "integer"; }
public String deflt() { return "$$ducc.default.process.per.item.time.max"; }
},
Query {
public String pname() { return "query"; }
public String argname() { return "service-id-or-endpoint" ; }
public boolean optargs() { return true; }
public String deflt() { return ""; } // No service name => all services
public String description() { return "Query a registered service, or all." ; }
},
Reason {
// generated, not public
public String pname() { return JobRequestProperties.key_reason; }
public String argname() { return "quoted text"; }
public String description() { return "Reason for the cancel"; }
public String example() { return "Back to the drawing board"; }
},
ReservationMemorySize {
public String pname() { return ReservationSpecificationProperties.key_memory_size; }
public String argname() { return "size-in-GB"; }
public String description() { return "Size of instance's memory, in GB."; }
public String example() { return "64"; }
public boolean required() { return true; }
},
ReservationNodeList {
// generated, not public
public String pname() { return ReservationRequestProperties.key_node_list; }
public String argname() { return "string"; }
public String description() { return "Set of nodes reserved - internall generated."; }
public String example() { return "Back to the drawing board"; }
},
RoleAdministrator {
public String pname() { return JobSpecificationProperties.key_role_administrator; }
public boolean noargs() { return true; }
public String description() { return "Act in the capacity of DUCC administrator."; }
},
SchedulingClass {
public String pname() { return JobSpecificationProperties.key_scheduling_class; }
public String argname() { return "scheduling class name"; }
public String description() { return "The class to run the job in."; }
public String example() { return "normal (or fixed or reserve)"; }
},
ServiceLinger {
public String pname() { return "service_linger"; }
public String argname() { return "milliseconds"; }
public String description() { return "Time in milliseconds to wait after last referring job or service exits before stopping a non-autostarted service."; }
public String deflt() { return "300000"; } // 5 minutes
},
ServiceDependency {
public String pname() { return JobSpecificationProperties.key_service_dependency; }
public String argname() { return "dependency list"; }
public String description() { return "List of blank-delimited service names."; }
public String example() { return "UIMA-AS:RandomSleepAE:tcp://node1:61616 CUSTOM:myservice";}
},
ServiceRequestEndpoint {
// registration option
public String pname() { return ServiceRequestProperties.key_service_request_endpoint; }
public String argname() { return "string"; }
public String description() { return "Unique id for this service. Usually inferred for UIMA-AS services."; }
public String example() { return "UIMA-AS:queueName:ActiveMqUrl"; }
},
Signature {
// generated, not public
public String pname() { return JobSpecificationProperties.key_signature; }
public String argname() { return null; }
public boolean optargs() { return true; }
},
Specification {
public String pname() { return JobSpecificationProperties.key_specification; }
public String sname() { return "f"; }
public String argname() { return "file"; }
public String description() { return "Properties file comprising the specification, where the keys are names of parameters. Individual parameters take precedence over those specified in properties file, if any."; }
},
SubmitErrors {
// generated, not public
public String pname() { return JobSpecificationProperties.key_submit_errors; }
public String argname() { return null; }
public boolean optargs() { return true; }
},
SubmitWarnings {
// generated, not public
public String pname() { return JobSpecificationProperties.key_submit_warnings; }
public String argname() { return null; }
public boolean optargs() { return true; }
},
SuppressConsoleLog {
public String pname() { return "suppress_console_log"; }
public String argname() { return null; }
public boolean noargs() { return true; }
public String description() { return "Do not copy stdout to a log file."; }
},
Timestamp {
public String pname() { return "timestamp"; }
public String argname() { return null; }
public boolean noargs() { return true; }
public String description() { return "Enables timestamp on monitor messages."; }
},
Unregister {
public String pname() { return "unregister" ; }
public String argname() { return "service-id-or-endpoint" ; }
public String description() { return "Unregister a service." ; }
},
User {
public String pname() { return JobSpecificationProperties.key_user; };
public String argname() { return "userid"; }
public String description() { return "Filled in (and overridden) by the CLI, the id of the submitting user."; }
},
WaitForCompletion {
public String pname() { return "wait_for_completion"; }
public boolean optargs() { return true; }
public String deflt() { return "true"; }
public String argname() { return null; }
public String description() { return "Do not exit until job is completed."; }
},
WorkingDirectory {
public String pname() { return JobSpecificationProperties.key_working_directory; }
public String argname() { return "path"; }
public String description() { return "The working directory set in each process. Default to current directory."; }
public String deflt() { return "."; }
},
;
public String argname() { return null; } // the type of argument, if any
public boolean multiargs() { return false; } // the option can have >1 arg
public boolean required() { return false; } // this option must be specified in the command line
public String deflt() { return null; } // default, required if optargs == true
public String sname() { return null; } // short name of option
public boolean optargs() { return false; } // this option takes 0 or more arguments
public boolean noargs() { return false; } // this option takes no arguments
public String example() { return null; } // example uf usage
public String description() { return null; }// description of option
};
}