content: /*
   * 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 com.datastax.dse.driver.api.core.config;
  
  import com.datastax.oss.driver.api.core.config.DriverOption;
  import edu.umd.cs.findbugs.annotations.NonNull;
  
  public enum DseDriverOption implements DriverOption {
    /**
     * The name of the application using the session.
     *
     * <p>Value type: {@link String}
     */
    APPLICATION_NAME("basic.application.name"),
    /**
     * The version of the application using the session.
     *
     * <p>Value type: {@link String}
     */
    APPLICATION_VERSION("basic.application.version"),
  
    /**
     * Proxy authentication for GSSAPI authentication: allows to login as another user or role.
     *
     * <p>Value type: {@link String}
     */
    AUTH_PROVIDER_AUTHORIZATION_ID("advanced.auth-provider.authorization-id"),
    /**
     * Service name for GSSAPI authentication.
     *
     * <p>Value type: {@link String}
     */
    AUTH_PROVIDER_SERVICE("advanced.auth-provider.service"),
    /**
     * Login configuration for GSSAPI authentication.
     *
     * <p>Value type: {@link java.util.Map Map}&#60;{@link String},{@link String}&#62;
     */
    AUTH_PROVIDER_LOGIN_CONFIGURATION("advanced.auth-provider.login-configuration"),
    /**
     * Internal SASL properties, if any, such as QOP, for GSSAPI authentication.
     *
     * <p>Value type: {@link java.util.Map Map}&#60;{@link String},{@link String}&#62;
     */
    AUTH_PROVIDER_SASL_PROPERTIES("advanced.auth-provider.sasl-properties"),
  
    /**
     * The page size for continuous paging.
     *
     * <p>Value type: int
     */
    CONTINUOUS_PAGING_PAGE_SIZE("advanced.continuous-paging.page-size"),
    /**
     * Whether {@link #CONTINUOUS_PAGING_PAGE_SIZE} should be interpreted in number of rows or bytes.
     *
     * <p>Value type: boolean
     */
    CONTINUOUS_PAGING_PAGE_SIZE_BYTES("advanced.continuous-paging.page-size-in-bytes"),
    /**
     * The maximum number of continuous pages to return.
     *
     * <p>Value type: int
     */
    CONTINUOUS_PAGING_MAX_PAGES("advanced.continuous-paging.max-pages"),
    /**
     * The maximum number of continuous pages per second.
     *
     * <p>Value type: int
     */
    CONTINUOUS_PAGING_MAX_PAGES_PER_SECOND("advanced.continuous-paging.max-pages-per-second"),
    /**
     * The maximum number of continuous pages that can be stored in the local queue.
     *
     * <p>Value type: int
     */
    CONTINUOUS_PAGING_MAX_ENQUEUED_PAGES("advanced.continuous-paging.max-enqueued-pages"),
    /**
     * How long to wait for the coordinator to send the first continuous page.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    CONTINUOUS_PAGING_TIMEOUT_FIRST_PAGE("advanced.continuous-paging.timeout.first-page"),
    /**
     * How long to wait for the coordinator to send subsequent continuous pages.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    CONTINUOUS_PAGING_TIMEOUT_OTHER_PAGES("advanced.continuous-paging.timeout.other-pages"),
  
    /**
     * The largest latency that we expect to record for continuous requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    CONTINUOUS_PAGING_METRICS_SESSION_CQL_REQUESTS_HIGHEST(
        "advanced.metrics.session.continuous-cql-requests.highest-latency"),
    /**
     * The number of significant decimal digits to which internal structures will maintain for
     * continuous requests.
     *
     * <p>Value-type: int
     */
    CONTINUOUS_PAGING_METRICS_SESSION_CQL_REQUESTS_DIGITS(
        "advanced.metrics.session.continuous-cql-requests.significant-digits"),
    /**
     * The interval at which percentile data is refreshed for continuous requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    CONTINUOUS_PAGING_METRICS_SESSION_CQL_REQUESTS_INTERVAL(
        "advanced.metrics.session.continuous-cql-requests.refresh-interval"),
  
    /**
     * The read consistency level to use for graph statements.
     *
     * <p>Value type: {@link String}
     */
    GRAPH_READ_CONSISTENCY_LEVEL("basic.graph.read-consistency-level"),
    /**
     * The write consistency level to use for graph statements.
     *
     * <p>Value type: {@link String}
     */
    GRAPH_WRITE_CONSISTENCY_LEVEL("basic.graph.write-consistency-level"),
    /**
     * The traversal source to use for graph statements.
     *
     * <p>Value type: {@link String}
     */
    GRAPH_TRAVERSAL_SOURCE("basic.graph.traversal-source"),
    /**
     * The sub-protocol the driver will use to communicate with DSE Graph, on top of the Cassandra
     * native protocol.
     *
     * <p>Value type: {@link String}
     */
    GRAPH_SUB_PROTOCOL("advanced.graph.sub-protocol"),
    /**
     * Whether a script statement represents a system query.
     *
     * <p>Value type: boolean
     */
    GRAPH_IS_SYSTEM_QUERY("basic.graph.is-system-query"),
    /**
     * The name of the graph targeted by graph statements.
     *
     * <p>Value type: {@link String}
     */
    GRAPH_NAME("basic.graph.name"),
    /**
     * How long the driver waits for a graph request to complete.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    GRAPH_TIMEOUT("basic.graph.timeout"),
  
    /**
     * Whether to send events for Insights monitoring.
     *
     * <p>Value type: boolean
     */
    MONITOR_REPORTING_ENABLED("advanced.monitor-reporting.enabled"),
  
    /**
     * Whether to enable paging for Graph queries.
     *
     * <p>Value type: {@link String}
     */
    GRAPH_PAGING_ENABLED("advanced.graph.paging-enabled"),
  
    /**
     * The page size for Graph continuous paging.
     *
     * <p>Value type: int
     */
    GRAPH_CONTINUOUS_PAGING_PAGE_SIZE("advanced.graph.paging-options.page-size"),
  
    /**
     * The maximum number of Graph continuous pages to return.
     *
     * <p>Value type: int
     */
    GRAPH_CONTINUOUS_PAGING_MAX_PAGES("advanced.graph.paging-options.max-pages"),
    /**
     * The maximum number of Graph continuous pages per second.
     *
     * <p>Value type: int
     */
    GRAPH_CONTINUOUS_PAGING_MAX_PAGES_PER_SECOND(
        "advanced.graph.paging-options.max-pages-per-second"),
    /**
     * The maximum number of Graph continuous pages that can be stored in the local queue.
     *
     * <p>Value type: int
     */
    GRAPH_CONTINUOUS_PAGING_MAX_ENQUEUED_PAGES("advanced.graph.paging-options.max-enqueued-pages"),
    /**
     * The largest latency that we expect to record for graph requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_SESSION_GRAPH_REQUESTS_HIGHEST("advanced.metrics.session.graph-requests.highest-latency"),
    /**
     * The number of significant decimal digits to which internal structures will maintain for graph
     * requests.
     *
     * <p>Value-type: int
     */
    METRICS_SESSION_GRAPH_REQUESTS_DIGITS(
        "advanced.metrics.session.graph-requests.significant-digits"),
    /**
     * The interval at which percentile data is refreshed for graph requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_SESSION_GRAPH_REQUESTS_INTERVAL(
        "advanced.metrics.session.graph-requests.refresh-interval"),
    /**
     * The largest latency that we expect to record for graph requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_NODE_GRAPH_MESSAGES_HIGHEST("advanced.metrics.node.graph-messages.highest-latency"),
    /**
     * The number of significant decimal digits to which internal structures will maintain for graph
     * requests.
     *
     * <p>Value-type: int
     */
    METRICS_NODE_GRAPH_MESSAGES_DIGITS("advanced.metrics.node.graph-messages.significant-digits"),
    /**
     * The interval at which percentile data is refreshed for graph requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_NODE_GRAPH_MESSAGES_INTERVAL("advanced.metrics.node.graph-messages.refresh-interval"),
  
    /**
     * The shortest latency that we expect to record for continuous requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    CONTINUOUS_PAGING_METRICS_SESSION_CQL_REQUESTS_LOWEST(
        "advanced.metrics.session.continuous-cql-requests.lowest-latency"),
    /**
     * Optional service-level objectives to meet, as a list of latencies to track.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    CONTINUOUS_PAGING_METRICS_SESSION_CQL_REQUESTS_SLO(
        "advanced.metrics.session.continuous-cql-requests.slo"),
  
    /**
     * The shortest latency that we expect to record for graph requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_SESSION_GRAPH_REQUESTS_LOWEST("advanced.metrics.session.graph-requests.lowest-latency"),
    /**
     * Optional service-level objectives to meet, as a list of latencies to track.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_SESSION_GRAPH_REQUESTS_SLO("advanced.metrics.session.graph-requests.slo"),
  
    /**
     * The shortest latency that we expect to record for graph requests.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_NODE_GRAPH_MESSAGES_LOWEST("advanced.metrics.node.graph-messages.lowest-latency"),
    /**
     * Optional service-level objectives to meet, as a list of latencies to track.
     *
     * <p>Value-type: {@link java.time.Duration Duration}
     */
    METRICS_NODE_GRAPH_MESSAGES_SLO("advanced.metrics.node.graph-messages.slo"),
    /**
     * Optional list of percentiles to publish for graph-requests metric. Produces an additional time
     * series for each requested percentile. This percentile is computed locally, and so can't be
     * aggregated with percentiles computed across other dimensions (e.g. in a different instance).
     *
     * <p>Value type: {@link java.util.List List}&#60;{@link Double}&#62;
     */
    METRICS_SESSION_GRAPH_REQUESTS_PUBLISH_PERCENTILES(
        "advanced.metrics.session.graph-requests.publish-percentiles"),
    /**
     * Optional list of percentiles to publish for node graph-messages metric. Produces an additional
     * time series for each requested percentile. This percentile is computed locally, and so can't be
     * aggregated with percentiles computed across other dimensions (e.g. in a different instance).
     *
     * <p>Value type: {@link java.util.List List}&#60;{@link Double}&#62;
     */
    METRICS_NODE_GRAPH_MESSAGES_PUBLISH_PERCENTILES(
        "advanced.metrics.node.graph-messages.publish-percentiles"),
    /**
     * Optional list of percentiles to publish for continuous paging requests metric. Produces an
     * additional time series for each requested percentile. This percentile is computed locally, and
     * so can't be aggregated with percentiles computed across other dimensions (e.g. in a different
     * instance).
     *
     * <p>Value type: {@link java.util.List List}&#60;{@link Double}&#62;
     */
    CONTINUOUS_PAGING_METRICS_SESSION_CQL_REQUESTS_PUBLISH_PERCENTILES(
        "advanced.metrics.session.continuous-cql-requests.publish-percentiles"),
    ;
  
    private final String path;
  
    DseDriverOption(String path) {
      this.path = path;
    }
  
    @NonNull
    @Override
    public String getPath() {
      return path;
    }
  }
  