Module: Appsignal::System Private

Defined in:
lib/appsignal/system.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

System environment detection module.

Provides useful methods to find out more about the host system.

Constant Summary collapse

LINUX_TARGET =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

"linux".freeze
MUSL_TARGET =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

"linux-musl".freeze
FREEBSD_TARGET =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

"freebsd".freeze
GEM_EXT_PATH =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

File.expand_path("../../../ext", __FILE__).freeze

Class Method Summary collapse

Class Method Details

.agent_platformString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Detect agent and extension platform build

Used by ext/extconf.rb to select which build it should download and install.

Use export APPSIGNAL_BUILD_FOR_MUSL=1 if the detection doesn't work and to force selection of the musl build.

Returns:

  • (String)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/appsignal/system.rb', line 29

def self.agent_platform
  return MUSL_TARGET if force_musl_build?

  host_os = RbConfig::CONFIG["host_os"].downcase
  local_os =
    case host_os
    when /#{LINUX_TARGET}/
      LINUX_TARGET
    when /darwin/
      "darwin"
    when /#{FREEBSD_TARGET}/
      FREEBSD_TARGET
    else
      host_os
    end
  if local_os =~ /linux/
    ldd_output = ldd_version_output
    return MUSL_TARGET if ldd_output.include? "musl"
    ldd_version = extract_ldd_version(ldd_output)
    if ldd_version && versionify(ldd_version) < versionify("2.15")
      return MUSL_TARGET
    end
  end

  local_os
end

.extract_ldd_version(string) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



74
75
76
77
# File 'lib/appsignal/system.rb', line 74

def self.extract_ldd_version(string)
  ldd_version = string.match(/\d+\.\d+/)
  ldd_version && ldd_version[0]
end

.force_musl_build?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns whether or not the musl build was forced by the user.

Returns:

  • (Boolean)


59
60
61
# File 'lib/appsignal/system.rb', line 59

def self.force_musl_build?
  %w[true 1].include?(ENV["APPSIGNAL_BUILD_FOR_MUSL"])
end

.heroku?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


15
16
17
# File 'lib/appsignal/system.rb', line 15

def self.heroku?
  ENV.key? "DYNO".freeze
end

.jruby?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


79
80
81
# File 'lib/appsignal/system.rb', line 79

def self.jruby?
  RUBY_PLATFORM == "java"
end

.ldd_version_outputObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



69
70
71
# File 'lib/appsignal/system.rb', line 69

def self.ldd_version_output
  `ldd --version 2>&1`
end

.versionify(version) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



64
65
66
# File 'lib/appsignal/system.rb', line 64

def self.versionify(version)
  Gem::Version.new(version)
end