# Copyright 2017 OpenCensus Authors
#
# 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.


require "opencensus/trace/samplers/always_sample"
require "opencensus/trace/samplers/never_sample"
require "opencensus/trace/samplers/probability"
require "opencensus/trace/samplers/rate_limiting"

module OpenCensus
  module Trace
    ##
    # A sampler determines whether a given request's latency trace should
    # actually be reported. It is usually not necessary to trace every
    # request, especially for an application serving heavy traffic. You may
    # use a sampler to decide, for a given request, whether to report its
    # trace.
    #
    # The OpenCensus specification defines four samplers:
    # {OpenCensus::Trace::Samplers::AlwaysSample},
    # {OpenCensus::Trace::Samplers::NeverSample},
    # {OpenCensus::Trace::Samplers::Probability}, and
    # {OpenCensus::Trace::Samplers::RateLimiting}.
    #
    # A sampler is a `Proc` that takes a hash of environment information and
    # returns a boolean indicating whether or not to sample the current
    # request. Alternately, it could be an object that duck-types the `Proc`
    # interface by implementing the `call` method. The hash passed to `call`
    # may contain the following keys, all of which are optional. Samplers must
    # adjust their behavior to account for the availability or absence of any
    # environment information:
    #
    # *   `span_context` The {OpenCensus::Trace::SpanContext} that created the
    #      span being sampled.
    # *   `rack_env` The hash of Rack environment information
    #
    # Applications may set a default sampler in the config. In addition, the
    # sampler may be overridden whenever a span is created.
    #
    module Samplers
    end
  end
end
