Project

jcw

0.01
No commit activity in last 3 years
No release in over 3 years
Wrapper for the gem 'jaeger-client' with simpler customization.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Project Readme

Project is deprecated

JCW · Supported by Cado Labs · Coverage Status · Gem Version

Simple wrapper for the gem "jaeger-client" with simpler customization.


Supported by Cado Labs


Installation

gem 'jcw'
bundle install
# --- or ---
gem install jcw
require 'jcw'

Usage

Create new initializer for your rails app:

UDP Sender(default):

::JCW::Wrapper.configure do |config|
  config.service_name = "Service name"
  config.connection = { protocol: :udp, host: "127.0.0.1", port: 6831 }
  config.enabled = true
  config.tags = {
    hostname: "custom-hostname",
    custom_tag: "custom-tag-value",
  }
  config.rack_ignore_path_patterns = ["/api/test", %r{/sidekiq}]
  config.logger = Logger.new($stdout)
end

# Set middleware for wrapping all requests
Rails.application.middleware.use(JCW::Rack::Tracer)

TCP Sender:

::JCW::Wrapper.configure do |config|
  config.service_name = "Service name"
  config.enabled = true
  config.subscribe_to = %w[process_action.action_controller start_processing.action_controller] # set ActiveSupport::Notifications namespaces
  config.connection = { protocol: :tcp, url: "http://localhost:14268/api/traces", headers: { key: "value" } }
  config.tags = {
    hostname: "custom-hostname",
    custom_tag: "custom-tag-value",
  }
  config.rack_ignore_path_patterns = ["/api/test", %r{/sidekiq}]
  config.logger = Logger.new($stdout)
end

# Set middleware for wrapping all requests
Rails.application.middleware.use(JCW::Rack::Tracer)

# If you need send all logs with spans set on_finish_span and extend JaegerLoggerExtension
# Not recommended for UDP sender, because default max packet size is 65,000 bytes.
Rails.application.config.tap do |config|
  config.middleware.use(
    JCW::Rack::Tracer,
    on_finish_span: lambda do |span|
      JCW::Logger.current.logs.each { |log| span.log_kv(**log) }
      JCW::Logger.current.clear # Do not forget to avoid memory leaks
    end,
  )

  config.logger.extend(JCW::LoggerExtension)
end
  • config.subscribe_to - not recommended for UDP sender, because default max packet size is 65,000 bytes.

GRPC Integration

Client side

# Add JCW::Interceptors::Gruf::Client Interceptor to Gruf Client Initializer
options = {}
client_options = { timeout: 10, interceptors: [JCW::Interceptors::Gruf::Client.new] }

client = Gruf::Client.new(
  service: Test::Service, options: options, client_options: client_options
)

request_method = "some_method"
client.call(request_method)

Server side

# Add Server Interceptor
Rails.configuration.to_prepare do
  Gruf.configure do |config|
    config.interceptors.use(JCW::Interceptors::Gruf::Server)
  end
end  

# Configure
::JCW::Wrapper.configure do |config|
  config.service_name = "Service Name"
  config.connection = { protocol: :udp, host: "127.0.0.1", port: 6831 }
  config.enabled = true
  config.subscribe_to = [/.*/]
  config.grpc_ignore_methods = %w[grpc.ignore.method]
end

Contributing

  • Fork it ( https://github.com/Cado-Labs/jcw )
  • Create your feature branch (git checkout -b feature/my-new-feature)
  • Commit your changes (git commit -am '[feature_context] Add some feature')
  • Push to the branch (git push origin feature/my-new-feature)
  • Create new Pull Request

License

Released under MIT License.

Supporting

Supported by Cado Labs

Authors

Aleksandr Starovojtov