Module: Sqreen::RuntimeInfos
- Defined in:
- lib/sqreen/runtime_infos.rb
Class Method Summary collapse
- .agent ⇒ Object
- .all(framework) ⇒ Object
- .calculate_dependencies_signature(pkgs) ⇒ Object
- .dependencies ⇒ Object
- .dependencies_signature ⇒ Object
- .extract_source(source) ⇒ Object
- .hostname ⇒ Object
- .libsqreen? ⇒ Boolean
- .libsqreen_version ⇒ Object
- .local_infos ⇒ Object
- .os ⇒ Object
- .process ⇒ Object
- .runtime ⇒ Object
- .ssl ⇒ Object
- .time ⇒ Object
Class Method Details
.agent ⇒ Object
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 |
.dependencies ⇒ Object
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_signature ⇒ Object
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. 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 |
.hostname ⇒ Object
105 106 107 |
# File 'lib/sqreen/runtime_infos.rb', line 105 def hostname Socket.gethostname end |
.libsqreen? ⇒ Boolean
76 77 78 |
# File 'lib/sqreen/runtime_infos.rb', line 76 def libsqreen? Sqreen::Dependency::LibSqreen.required? && !Sqreen::Dependency::LibSqreen.stub? end |
.libsqreen_version ⇒ Object
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_infos ⇒ Object
29 30 31 32 33 34 |
# File 'lib/sqreen/runtime_infos.rb', line 29 def local_infos { 'time' => Time.now.utc, 'name' => hostname, } end |
.os ⇒ Object
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 |
.process ⇒ Object
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 |
.runtime ⇒ Object
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 |
.ssl ⇒ Object
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 |
.time ⇒ Object
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 |