appsignal 2.4.3 → 2.5.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +14 -5
- data/.rubocop_todo.yml +3 -0
- data/.travis.yml +3 -4
- data/CHANGELOG.md +3 -0
- data/Rakefile +21 -6
- data/appsignal.gemspec +12 -5
- data/ext/Rakefile +27 -0
- data/ext/agent.yml +52 -21
- data/ext/base.rb +79 -0
- data/ext/extconf.rb +5 -76
- data/gemfiles/sequel-435.gemfile +5 -1
- data/gemfiles/sequel.gemfile +5 -1
- data/lib/appsignal.rb +11 -6
- data/lib/appsignal/cli.rb +1 -2
- data/lib/appsignal/cli/install.rb +3 -3
- data/lib/appsignal/config.rb +56 -37
- data/lib/appsignal/extension.rb +28 -4
- data/lib/appsignal/extension/jruby.rb +460 -0
- data/lib/appsignal/hooks/sidekiq.rb +4 -4
- data/lib/appsignal/integrations/capistrano/appsignal.cap +7 -2
- data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +8 -3
- data/lib/appsignal/system.rb +16 -1
- data/lib/appsignal/transaction.rb +2 -2
- data/lib/appsignal/utils.rb +3 -1
- data/lib/appsignal/version.rb +1 -3
- data/spec/.rubocop.yml +3 -0
- data/spec/lib/appsignal/capistrano2_spec.rb +55 -41
- data/spec/lib/appsignal/capistrano3_spec.rb +87 -61
- data/spec/lib/appsignal/cli/diagnose_spec.rb +3 -3
- data/spec/lib/appsignal/cli/notify_of_deploy_spec.rb +4 -4
- data/spec/lib/appsignal/config_spec.rb +54 -21
- data/spec/lib/appsignal/extension/jruby_spec.rb +43 -0
- data/spec/lib/appsignal/extension_spec.rb +28 -12
- data/spec/lib/appsignal/hooks/sequel_spec.rb +7 -1
- data/spec/lib/appsignal/integrations/que_spec.rb +5 -5
- data/spec/lib/appsignal/system_spec.rb +5 -4
- data/spec/lib/appsignal/transaction_spec.rb +8 -8
- data/spec/lib/appsignal/utils/params_sanitizer_spec.rb +4 -4
- data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +3 -3
- data/spec/lib/appsignal_spec.rb +5 -3
- data/spec/spec_helper.rb +29 -8
- data/spec/support/helpers/config_helpers.rb +3 -2
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa4dc16e9ee1b853c9166e3c550e95820239d22fcf4be2bfbe908fff03681ce3
|
4
|
+
data.tar.gz: 980caa31b345676bb7964fa941f9aa0116195e28d933aac6ade62b2834006834
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99c6c3197f6d895731d8afb3bda5ed65cb38f1b0a1e9fe8a6b98f457429a0011f7f81bd1eab4ccf89e1bee8cf2448c168a50b8d00fd443c1a47e74f6a168b7f9
|
7
|
+
data.tar.gz: 49cfc74c9a975443b9b111c330e1b9b25600d6ac08c2a7c7037b46739af275f192f6b52e4ac5f713e622e795d5cbb285aff551b07035568e910033031645f019
|
data/.rubocop.yml
CHANGED
@@ -11,6 +11,7 @@ AllCops:
|
|
11
11
|
- "tmp/**/*"
|
12
12
|
- "gemfiles/vendor/**/*"
|
13
13
|
- "vendor/**/*"
|
14
|
+
- "benchmark.rake"
|
14
15
|
DisplayCopNames: true
|
15
16
|
UseCache: true
|
16
17
|
CacheRootDirectory: ./tmp
|
@@ -24,22 +25,22 @@ Style/StringLiterals:
|
|
24
25
|
Style/StringLiteralsInInterpolation:
|
25
26
|
EnforcedStyle: double_quotes
|
26
27
|
|
27
|
-
|
28
|
+
Layout/AlignParameters:
|
28
29
|
EnforcedStyle: with_fixed_indentation
|
29
30
|
|
30
|
-
|
31
|
+
Layout/MultilineMethodCallIndentation:
|
31
32
|
EnforcedStyle: indented
|
32
33
|
|
33
|
-
|
34
|
+
Layout/MultilineOperationIndentation:
|
34
35
|
EnforcedStyle: indented
|
35
36
|
|
36
37
|
Style/HashSyntax:
|
37
38
|
EnforcedStyle: hash_rockets
|
38
39
|
|
39
|
-
|
40
|
+
Layout/AlignHash:
|
40
41
|
EnforcedLastArgumentHashStyle: ignore_implicit
|
41
42
|
|
42
|
-
|
43
|
+
Layout/IndentArray:
|
43
44
|
EnforcedStyle: consistent
|
44
45
|
|
45
46
|
Style/EmptyMethod:
|
@@ -53,5 +54,13 @@ Style/MethodMissing:
|
|
53
54
|
Style/TrailingUnderscoreVariable:
|
54
55
|
Enabled: false
|
55
56
|
|
57
|
+
Style/FileName:
|
58
|
+
Exclude:
|
59
|
+
- "ext/Rakefile"
|
60
|
+
|
61
|
+
Metrics/BlockLength:
|
62
|
+
Exclude:
|
63
|
+
- "Rakefile"
|
64
|
+
|
56
65
|
# Metrics/LineLength:
|
57
66
|
# Max: 80
|
data/.rubocop_todo.yml
CHANGED
data/.travis.yml
CHANGED
@@ -42,9 +42,6 @@ matrix:
|
|
42
42
|
gemfile: "gemfiles/no_dependencies.gemfile"
|
43
43
|
script: "bundle exec rubocop"
|
44
44
|
exclude:
|
45
|
-
# We don't currently support jRuby
|
46
|
-
- rvm: "jruby-19mode"
|
47
|
-
|
48
45
|
# Rails 5 doesn't support Ruby < 2.2
|
49
46
|
- rvm: "2.0.0"
|
50
47
|
gemfile: "gemfiles/rails-5.0.gemfile"
|
@@ -62,7 +59,9 @@ matrix:
|
|
62
59
|
gemfile: "gemfiles/rails-4.1.gemfile"
|
63
60
|
|
64
61
|
env:
|
65
|
-
global:
|
62
|
+
global:
|
63
|
+
- "RAILS_ENV=test"
|
64
|
+
- "JRUBY_OPTS=''" # Workaround https://github.com/travis-ci/travis-ci/issues/6471
|
66
65
|
|
67
66
|
before_install:
|
68
67
|
- "gem update --system"
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "bundler"
|
2
|
+
require "fileutils"
|
2
3
|
|
3
|
-
GEMFILES = %w
|
4
|
+
GEMFILES = %w[
|
4
5
|
capistrano2
|
5
6
|
capistrano3
|
6
7
|
grape
|
@@ -18,18 +19,18 @@ GEMFILES = %w(
|
|
18
19
|
grape
|
19
20
|
webmachine
|
20
21
|
que
|
21
|
-
|
22
|
+
].freeze
|
22
23
|
|
23
|
-
RUBY_VERSIONS = %w
|
24
|
+
RUBY_VERSIONS = %w[
|
24
25
|
2.0.0-p648
|
25
26
|
2.1.8
|
26
27
|
2.2.4
|
27
28
|
2.3.0
|
28
29
|
2.4.0
|
29
|
-
|
30
|
+
].freeze
|
30
31
|
|
31
32
|
EXCLUSIONS = {
|
32
|
-
"rails-5.0" => %w
|
33
|
+
"rails-5.0" => %w[2.0.0 2.1.8]
|
33
34
|
}.freeze
|
34
35
|
|
35
36
|
VERSION_MANAGERS = {
|
@@ -48,6 +49,7 @@ task :publish do
|
|
48
49
|
|
49
50
|
def build_and_push_gem
|
50
51
|
puts "# Building gem"
|
52
|
+
FileUtils.rm_f("#{NAME}-#{gem_version}.gem")
|
51
53
|
puts `gem build #{NAME}.gemspec`
|
52
54
|
puts "# Publishing Gem"
|
53
55
|
puts `gem push #{NAME}-#{gem_version}.gem`
|
@@ -93,7 +95,16 @@ task :publish do
|
|
93
95
|
Appsignal.send(:remove_const, :VERSION)
|
94
96
|
load File.expand_path(VERSION_FILE)
|
95
97
|
system("$EDITOR #{CHANGELOG_FILE}")
|
98
|
+
|
99
|
+
# Build and push for MRI
|
100
|
+
ENV.delete("APPSIGNAL_PUSH_JAVA_GEM")
|
101
|
+
build_and_push_gem
|
102
|
+
|
103
|
+
# Build and push for jRuby
|
104
|
+
ENV["APPSIGNAL_PUSH_JAVA_GEM"] = "true"
|
96
105
|
build_and_push_gem
|
106
|
+
|
107
|
+
# Create tag
|
97
108
|
create_and_push_tag
|
98
109
|
end
|
99
110
|
|
@@ -167,7 +178,11 @@ end
|
|
167
178
|
namespace :extension do
|
168
179
|
desc "Install the AppSignal gem extension"
|
169
180
|
task :install => :clean do
|
170
|
-
|
181
|
+
if RUBY_PLATFORM == "java"
|
182
|
+
system "cd ext && rake"
|
183
|
+
else
|
184
|
+
system "cd ext && ruby extconf.rb && make clean && make"
|
185
|
+
end
|
171
186
|
end
|
172
187
|
|
173
188
|
desc "Clean the AppSignal gem extension directory of installation artifacts"
|
data/appsignal.gemspec
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
|
2
3
|
require File.expand_path("../lib/appsignal/version", __FILE__)
|
3
4
|
|
4
|
-
Gem::Specification.new do |gem|
|
5
|
+
Gem::Specification.new do |gem| # rubocop:disable Metrics/BlockLength
|
5
6
|
gem.authors = [
|
6
7
|
"Robert Beekman",
|
7
8
|
"Thijs Cadier"
|
@@ -10,18 +11,24 @@ Gem::Specification.new do |gem|
|
|
10
11
|
gem.description = "The official appsignal.com gem"
|
11
12
|
gem.summary = "Logs performance and exception data from your app to "\
|
12
13
|
"appsignal.com"
|
13
|
-
gem.homepage = "https://github.com/appsignal/appsignal"
|
14
|
+
gem.homepage = "https://github.com/appsignal/appsignal-ruby"
|
14
15
|
gem.license = "MIT"
|
15
16
|
|
16
17
|
gem.files = `git ls-files`.split($\) # rubocop:disable Style/SpecialGlobalVars
|
17
18
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
18
19
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
20
|
gem.name = "appsignal"
|
20
|
-
gem.require_paths = %w
|
21
|
+
gem.require_paths = %w[lib ext]
|
21
22
|
gem.version = Appsignal::VERSION
|
22
23
|
gem.required_ruby_version = ">= 1.9"
|
23
24
|
|
24
|
-
|
25
|
+
if RUBY_PLATFORM == "java" || ENV["APPSIGNAL_PUSH_JAVA_GEM"]
|
26
|
+
gem.platform = "java"
|
27
|
+
gem.extensions = %w[ext/Rakefile]
|
28
|
+
gem.add_dependency "ffi"
|
29
|
+
else
|
30
|
+
gem.extensions = %w[ext/extconf.rb]
|
31
|
+
end
|
25
32
|
|
26
33
|
gem.add_dependency "rack"
|
27
34
|
|
@@ -30,6 +37,6 @@ Gem::Specification.new do |gem|
|
|
30
37
|
gem.add_development_dependency "pry"
|
31
38
|
gem.add_development_dependency "timecop"
|
32
39
|
gem.add_development_dependency "webmock"
|
33
|
-
gem.add_development_dependency "rubocop", "0.
|
40
|
+
gem.add_development_dependency "rubocop", "0.49.0"
|
34
41
|
gem.add_development_dependency "yard"
|
35
42
|
end
|
data/ext/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path("../../lib/appsignal/version.rb", __FILE__)
|
2
|
+
require File.expand_path("../base.rb", __FILE__)
|
3
|
+
|
4
|
+
task :default do
|
5
|
+
begin
|
6
|
+
logger.info "Installing appsignal agent #{Appsignal::VERSION} for Ruby #{RUBY_VERSION} on #{RUBY_PLATFORM}"
|
7
|
+
write_agent_architecture
|
8
|
+
next unless check_architecture
|
9
|
+
arch_config = AGENT_CONFIG["triples"][ARCH]
|
10
|
+
|
11
|
+
unless File.exist?(ext_path("appsignal-agent")) &&
|
12
|
+
(
|
13
|
+
File.exist?(ext_path("libappsignal.dylib")) ||
|
14
|
+
File.exist?(ext_path("libappsignal.so"))
|
15
|
+
) &&
|
16
|
+
File.exist?(ext_path("appsignal.h"))
|
17
|
+
archive = download_archive(arch_config, "dynamic")
|
18
|
+
next unless verify_archive(archive, arch_config, "dynamic")
|
19
|
+
unarchive(archive)
|
20
|
+
end
|
21
|
+
rescue => ex
|
22
|
+
installation_failed "Exception while installing: #{ex}"
|
23
|
+
ex.backtrace.each do |line|
|
24
|
+
logger.error line
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/ext/agent.yml
CHANGED
@@ -1,33 +1,64 @@
|
|
1
1
|
---
|
2
|
-
version:
|
2
|
+
version: 57a48f4
|
3
3
|
triples:
|
4
4
|
x86_64-darwin:
|
5
|
-
|
6
|
-
|
5
|
+
static:
|
6
|
+
checksum: 4fa30287925bad17abb3e86784793e13399dd9390c0579ca94bd8f4ee7a832a3
|
7
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-darwin-all-static.tar.gz
|
8
|
+
dynamic:
|
9
|
+
checksum: 1380d4d7263b0fe2a546085efa64643289010b7dd21282c2900e81164a123e8d
|
10
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-darwin-all-dynamic.tar.gz
|
7
11
|
universal-darwin:
|
8
|
-
|
9
|
-
|
12
|
+
static:
|
13
|
+
checksum: 4fa30287925bad17abb3e86784793e13399dd9390c0579ca94bd8f4ee7a832a3
|
14
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-darwin-all-static.tar.gz
|
15
|
+
dynamic:
|
16
|
+
checksum: 1380d4d7263b0fe2a546085efa64643289010b7dd21282c2900e81164a123e8d
|
17
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-darwin-all-dynamic.tar.gz
|
10
18
|
i686-linux:
|
11
|
-
|
12
|
-
|
19
|
+
static:
|
20
|
+
checksum: 9a1e59dd42e5ddcd0af04c0cffb0aadeace05dfae46d00aec71e90490186cbfd
|
21
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-i686-linux-all-static.tar.gz
|
22
|
+
dynamic:
|
23
|
+
checksum: ef45877189d3ea4be568ec2fa64a0f04fc94783c42e53f6a55672576a2cfb150
|
24
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-i686-linux-all-dynamic.tar.gz
|
13
25
|
x86-linux:
|
14
|
-
|
15
|
-
|
26
|
+
static:
|
27
|
+
checksum: 9a1e59dd42e5ddcd0af04c0cffb0aadeace05dfae46d00aec71e90490186cbfd
|
28
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-i686-linux-all-static.tar.gz
|
29
|
+
dynamic:
|
30
|
+
checksum: ef45877189d3ea4be568ec2fa64a0f04fc94783c42e53f6a55672576a2cfb150
|
31
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-i686-linux-all-dynamic.tar.gz
|
16
32
|
i686-linux-musl:
|
17
|
-
|
18
|
-
|
33
|
+
static:
|
34
|
+
checksum: cfa14d6aa3ad419a1d87854dfb13a780b34e4ccbf3afbe6adc7704ef750fc414
|
35
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-i686-linux-musl-all-static.tar.gz
|
19
36
|
x86-linux-musl:
|
20
|
-
|
21
|
-
|
37
|
+
static:
|
38
|
+
checksum: cfa14d6aa3ad419a1d87854dfb13a780b34e4ccbf3afbe6adc7704ef750fc414
|
39
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-i686-linux-musl-all-static.tar.gz
|
22
40
|
x86_64-linux:
|
23
|
-
|
24
|
-
|
41
|
+
static:
|
42
|
+
checksum: 8a68e7da4710fc97be73210437c890897a84f37f6ae9095f36d61099e52f07dc
|
43
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-linux-all-static.tar.gz
|
44
|
+
dynamic:
|
45
|
+
checksum: 5b2806ae841a6052f55c0824370dad41a04ae0ad2025df87a54847cce81054c3
|
46
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-linux-all-dynamic.tar.gz
|
25
47
|
x86_64-linux-musl:
|
26
|
-
|
27
|
-
|
48
|
+
static:
|
49
|
+
checksum: ffc91182064c1f0dbd9d219816054903fcc28db977cdd74df15802c468a2f252
|
50
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-linux-musl-all-static.tar.gz
|
28
51
|
x86_64-freebsd:
|
29
|
-
|
30
|
-
|
52
|
+
static:
|
53
|
+
checksum: c1781a09ec4e4c9e2f08a60e662acd8790286ebad62c9d32712a7932d0852a10
|
54
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-freebsd-all-static.tar.gz
|
55
|
+
dynamic:
|
56
|
+
checksum: 0ce479051f5734b330d91811c51813d93e65758ecad97e5f6b9e86764480e7c2
|
57
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-freebsd-all-dynamic.tar.gz
|
31
58
|
amd64-freebsd:
|
32
|
-
|
33
|
-
|
59
|
+
static:
|
60
|
+
checksum: c1781a09ec4e4c9e2f08a60e662acd8790286ebad62c9d32712a7932d0852a10
|
61
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-freebsd-all-static.tar.gz
|
62
|
+
dynamic:
|
63
|
+
checksum: 0ce479051f5734b330d91811c51813d93e65758ecad97e5f6b9e86764480e7c2
|
64
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/57a48f4/appsignal-x86_64-freebsd-all-dynamic.tar.gz
|
data/ext/base.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require "digest"
|
2
|
+
require "logger"
|
3
|
+
require "fileutils"
|
4
|
+
require "open-uri"
|
5
|
+
require "zlib"
|
6
|
+
require "yaml"
|
7
|
+
require "rubygems/package"
|
8
|
+
require File.expand_path("../../lib/appsignal/system.rb", __FILE__)
|
9
|
+
|
10
|
+
EXT_PATH = File.expand_path("..", __FILE__).freeze
|
11
|
+
AGENT_CONFIG = YAML.load(File.read(File.join(EXT_PATH, "agent.yml"))).freeze
|
12
|
+
|
13
|
+
PLATFORM = Appsignal::System.agent_platform
|
14
|
+
ARCH = "#{RbConfig::CONFIG["host_cpu"]}-#{PLATFORM}".freeze
|
15
|
+
CA_CERT_PATH = File.join(EXT_PATH, "../resources/cacert.pem").freeze
|
16
|
+
|
17
|
+
def ext_path(path)
|
18
|
+
File.join(EXT_PATH, path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def logger
|
22
|
+
@logger ||= Logger.new(File.join(EXT_PATH, "install.log"))
|
23
|
+
end
|
24
|
+
|
25
|
+
def installation_failed(reason)
|
26
|
+
logger.error "Installation failed: #{reason}"
|
27
|
+
File.open(File.join(EXT_PATH, "Makefile"), "w") do |file|
|
28
|
+
file.write "default:\nclean:\ninstall:"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def write_agent_architecture
|
33
|
+
File.open(File.join(EXT_PATH, "appsignal.architecture"), "w") do |file|
|
34
|
+
file.write ARCH
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def check_architecture
|
39
|
+
if AGENT_CONFIG["triples"].keys.include?(ARCH)
|
40
|
+
true
|
41
|
+
else
|
42
|
+
installation_failed(
|
43
|
+
"AppSignal currently does not support your system architecture (#{ARCH})." \
|
44
|
+
"Please let us know at support@appsignal.com, we aim to support everything our customers run."
|
45
|
+
)
|
46
|
+
false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def download_archive(arch_config, type)
|
51
|
+
logger.info "Downloading agent release from #{arch_config[type]["download_url"]}"
|
52
|
+
open(arch_config[type]["download_url"], :ssl_ca_cert => CA_CERT_PATH)
|
53
|
+
end
|
54
|
+
|
55
|
+
def verify_archive(archive, arch_config, type)
|
56
|
+
if Digest::SHA256.hexdigest(archive.read) == arch_config[type]["checksum"]
|
57
|
+
logger.info "Checksum of downloaded archive verified, extracting archive"
|
58
|
+
true
|
59
|
+
else
|
60
|
+
installation_failed(
|
61
|
+
"Aborting installation, checksum of downloaded archive could not be verified: " \
|
62
|
+
"Expected '#{arch_config[type]["checksum"]}', got '#{checksum}'."
|
63
|
+
)
|
64
|
+
false
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def unarchive(archive)
|
69
|
+
Gem::Package::TarReader.new(Zlib::GzipReader.open(archive)) do |tar|
|
70
|
+
tar.each do |entry|
|
71
|
+
next unless entry.file?
|
72
|
+
|
73
|
+
File.open(ext_path(entry.full_name), "wb") do |f|
|
74
|
+
f.write(entry.read)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
FileUtils.chmod(0o755, ext_path("appsignal-agent"))
|
79
|
+
end
|
data/ext/extconf.rb
CHANGED
@@ -1,89 +1,18 @@
|
|
1
|
-
require "digest"
|
2
|
-
require "logger"
|
3
|
-
require "fileutils"
|
4
|
-
require "open-uri"
|
5
|
-
require "zlib"
|
6
|
-
require "rubygems/package"
|
7
|
-
require "yaml"
|
8
1
|
require File.expand_path("../../lib/appsignal/version.rb", __FILE__)
|
9
|
-
require File.expand_path("
|
10
|
-
|
11
|
-
EXT_PATH = File.expand_path("..", __FILE__).freeze
|
12
|
-
AGENT_CONFIG = YAML.load(File.read(File.join(EXT_PATH, "agent.yml"))).freeze
|
13
|
-
|
14
|
-
PLATFORM = Appsignal::System.agent_platform
|
15
|
-
ARCH = "#{Gem::Platform.local.cpu}-#{PLATFORM}".freeze
|
16
|
-
CA_CERT_PATH = File.join(EXT_PATH, "../resources/cacert.pem").freeze
|
17
|
-
|
18
|
-
def ext_path(path)
|
19
|
-
File.join(EXT_PATH, path)
|
20
|
-
end
|
21
|
-
|
22
|
-
def logger
|
23
|
-
@logger ||= Logger.new(File.join(EXT_PATH, "install.log"))
|
24
|
-
end
|
25
|
-
|
26
|
-
def installation_failed(reason)
|
27
|
-
logger.error "Installation failed: #{reason}"
|
28
|
-
File.open(File.join(EXT_PATH, "Makefile"), "w") do |file|
|
29
|
-
file.write "default:\nclean:\ninstall:"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def write_agent_architecture
|
34
|
-
File.open(File.join(EXT_PATH, "appsignal.architecture"), "w") do |file|
|
35
|
-
file.write ARCH
|
36
|
-
end
|
37
|
-
end
|
2
|
+
require File.expand_path("../base.rb", __FILE__)
|
38
3
|
|
39
4
|
def install
|
40
5
|
logger.info "Installing appsignal agent #{Appsignal::VERSION} for Ruby #{RUBY_VERSION} on #{RUBY_PLATFORM}"
|
41
6
|
write_agent_architecture
|
42
|
-
|
43
|
-
if RUBY_PLATFORM =~ /java/
|
44
|
-
installation_failed(
|
45
|
-
"We do not support jRuby at the moment, email support@appsignal.com if you want to join the beta"
|
46
|
-
)
|
47
|
-
return
|
48
|
-
end
|
49
|
-
|
50
|
-
unless AGENT_CONFIG["triples"].keys.include?(ARCH)
|
51
|
-
installation_failed(
|
52
|
-
"AppSignal currently does not support your system architecture (#{ARCH})." \
|
53
|
-
"Please let us know at support@appsignal.com, we aim to support everything our customers run."
|
54
|
-
)
|
55
|
-
return
|
56
|
-
end
|
57
|
-
|
7
|
+
return unless check_architecture
|
58
8
|
arch_config = AGENT_CONFIG["triples"][ARCH]
|
59
9
|
|
60
10
|
unless File.exist?(ext_path("appsignal-agent")) &&
|
61
11
|
File.exist?(ext_path("libappsignal.a")) &&
|
62
12
|
File.exist?(ext_path("appsignal.h"))
|
63
|
-
|
64
|
-
|
65
|
-
archive
|
66
|
-
|
67
|
-
if Digest::SHA256.hexdigest(archive.read) == arch_config["checksum"]
|
68
|
-
logger.info "Checksum of downloaded archive verified, extracting archive"
|
69
|
-
else
|
70
|
-
installation_failed(
|
71
|
-
"Aborting installation, checksum of downloaded archive could not be verified: " \
|
72
|
-
"Expected '#{arch_config["checksum"]}', got '#{checksum}'."
|
73
|
-
)
|
74
|
-
return
|
75
|
-
end
|
76
|
-
|
77
|
-
Gem::Package::TarReader.new(Zlib::GzipReader.open(archive)) do |tar|
|
78
|
-
tar.each do |entry|
|
79
|
-
next unless entry.file?
|
80
|
-
|
81
|
-
File.open(ext_path(entry.full_name), "wb") do |f|
|
82
|
-
f.write(entry.read)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
FileUtils.chmod(0o755, ext_path("appsignal-agent"))
|
13
|
+
archive = download_archive(arch_config, "static")
|
14
|
+
return unless verify_archive(archive, arch_config, "static")
|
15
|
+
unarchive(archive)
|
87
16
|
end
|
88
17
|
|
89
18
|
logger.info "Creating makefile"
|