Module: Sqreen::RuntimeInfos

Defined in:
lib/sqreen/runtime_infos.rb

Class Method Summary collapse

Class Method Details

.agentObject



67
68
69
70
71
72
73
74
# File 'lib/sqreen/runtime_infos.rb', line 67

def agent
  {
    :agent_type => :ruby,
    :agent_version => ::Sqreen::VERSION,
  }.tap do |h|
    h[:libsqreen_version] = libsqreen_version if libsqreen?
  end
end

.all(framework) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/sqreen/runtime_infos.rb', line 17

def all(framework)
  res = { :various_infos => {} }
  res.merge! agent
  res.merge! os
  res.merge! runtime
  res.merge! framework.framework_infos
  res[:bundle_signature] = dependencies_signature
  res[:various_infos].merge! time
  res[:various_infos].merge! process
  res
end

.calculate_dependencies_signature(pkgs) ⇒ Object



137
138
139
140
141
142
143
144
# File 'lib/sqreen/runtime_infos.rb', line 137

def calculate_dependencies_signature(pkgs)
  return nil if pkgs.nil? || pkgs.empty?
  sha1 = Digest::SHA1.new
  pkgs.map { |pkg| [pkg[:name], pkg[:version]] }.sort.each_with_index do |p, i|
    sha1 << format(i.zero? ? '%s-%s' : '|%s-%s', *p)
  end
  sha1.hexdigest
end

.dependenciesObject



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/sqreen/runtime_infos.rb', line 36

def dependencies
  gem_info = Gem.loaded_specs
  gem_info.map do |name, spec|
    {
      :name => name,
      :version => spec.version.to_s,
      :homepage => spec.homepage,
      :source => (extract_source(spec.source) if spec.respond_to?(:source)),
    }
  end
end

.dependencies_signatureObject



133
134
135
# File 'lib/sqreen/runtime_infos.rb', line 133

def dependencies_signature
  calculate_dependencies_signature(dependencies)
end

.extract_source(source) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
# File 'lib/sqreen/runtime_infos.rb', line 146

def extract_source(source)
  return nil unless source
  ret = { 'name' => source.class.name.split(':')[-1] }
  opts = {}
  opts = source.options if source.respond_to?(:options)
  ret['remotes'] = opts['remotes'] if opts['remotes']
  ret['uri'] = opts['uri'] if opts['uri']
  # FIXME: scrub any auth data in uris
  ret['path'] = opts['path'].to_s if opts['path']
  ret
end

.hostnameObject



105
106
107
# File 'lib/sqreen/runtime_infos.rb', line 105

def hostname
  Socket.gethostname
end

.libsqreen?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/sqreen/runtime_infos.rb', line 76

def libsqreen?
  Sqreen::Dependency::LibSqreen.required? && !Sqreen::Dependency::LibSqreen.stub?
end

.libsqreen_versionObject



80
81
82
83
84
85
86
87
88
89
# File 'lib/sqreen/runtime_infos.rb', line 80

def libsqreen_version
  return unless libsqreen?

  @libsqreen_version ||= case (version = ::LibSqreen.version)
                         when Array
                           version.map(&:to_s).join('.')
                         else
                           version
                         end
end

.local_infosObject



29
30
31
32
33
34
# File 'lib/sqreen/runtime_infos.rb', line 29

def local_infos
  {
    'time' => Time.now.utc,
    'name' => hostname,
  }
end

.osObject



91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/sqreen/runtime_infos.rb', line 91

def os
  plat = if defined? ::RUBY_PLATFORM
           ::RUBY_PLATFORM
         elsif defined? ::PLATFORM
           ::PLATFORM
         else
           ''
         end
  {
    :os_type => plat,
    :hostname => hostname,
  }
end

.processObject



109
110
111
112
113
114
115
116
117
118
119
# File 'lib/sqreen/runtime_infos.rb', line 109

def process
  {
    :pid => Process.pid,
    :ppid => Process.ppid,
    :euid => Process.euid,
    :egid => Process.egid,
    :uid  => Process.uid,
    :gid  => Process.gid,
    :name => $0,
  }
end

.runtimeObject



121
122
123
124
125
126
127
128
129
130
131
# File 'lib/sqreen/runtime_infos.rb', line 121

def runtime
  engine = if defined? ::RUBY_ENGINE
             ::RUBY_ENGINE
           else
             'ruby'
           end
  {
    :runtime_type    => engine,
    :runtime_version => ::RUBY_DESCRIPTION,
  }
end

.sslObject



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/sqreen/runtime_infos.rb', line 53

def ssl
  type = nil
  version = nil
  if defined? OpenSSL
    type = 'OpenSSL'
    version = OpenSSL::OPENSSL_VERSION if defined? OpenSSL::OPENSSL_VERSION
  end
  { :ssl =>
    {
      :type => type,
      :version => version,
    } }
end

.timeObject



48
49
50
51
# File 'lib/sqreen/runtime_infos.rb', line 48

def time
  # FIXME: That should maybe be called local-time
  { :time => Time.now }
end