Sha256: 9cf5cf02fb470b614be4e173613fdf8f1a096a56d3665bef6231e4a6d166a211

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module ElasticAPM
  # @api private
  class ServiceInfo
    def initialize(config)
      @config = config
    end

    attr_reader :config

    # rubocop:disable Metrics/MethodLength
    def build
      base = {
        name: config.app_name,
        environment: config.environment,
        agent: {
          name: 'ruby',
          version: VERSION
        },
        framework: nil,
        language: {
          name: 'ruby',
          version: RUBY_VERSION
        },
        runtime: runtime,
        version: git_sha
      }

      if config.framework_name
        base[:framework] = {
          name: config.framework_name,
          version: config.framework_version
        }
      end

      base
    end
    # rubocop:enable Metrics/MethodLength

    def self.build(config)
      new(config).build
    end

    private

    def git_sha
      sha = `git rev-parse --verify HEAD 2>&1`.chomp
      return sha if $?.success? # rubocop:disable Style/SpecialGlobalVars

      nil
    end

    def runtime
      case RUBY_ENGINE
      when 'ruby'
        { name: RUBY_ENGINE, version: RUBY_VERSION }
      when 'jruby'
        { name: RUBY_ENGINE, version: ENV['JRUBY_VERSION'] }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
elastic-apm-0.2.0 lib/elastic_apm/service_info.rb