appsignal 2.5.0.alpha.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +33 -0
- data/.rspec +4 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +124 -0
- data/.travis.yml +72 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +639 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +264 -0
- data/Rakefile +214 -0
- data/appsignal.gemspec +42 -0
- data/benchmark.rake +77 -0
- data/bin/appsignal +13 -0
- data/ext/Rakefile +27 -0
- data/ext/agent.yml +64 -0
- data/ext/appsignal_extension.c +692 -0
- data/ext/base.rb +79 -0
- data/ext/extconf.rb +35 -0
- data/gemfiles/capistrano2.gemfile +7 -0
- data/gemfiles/capistrano3.gemfile +7 -0
- data/gemfiles/grape.gemfile +7 -0
- data/gemfiles/no_dependencies.gemfile +5 -0
- data/gemfiles/padrino.gemfile +7 -0
- data/gemfiles/que.gemfile +5 -0
- data/gemfiles/rails-3.2.gemfile +6 -0
- data/gemfiles/rails-4.0.gemfile +6 -0
- data/gemfiles/rails-4.1.gemfile +6 -0
- data/gemfiles/rails-4.2.gemfile +10 -0
- data/gemfiles/rails-5.0.gemfile +5 -0
- data/gemfiles/rails-5.1.gemfile +5 -0
- data/gemfiles/resque.gemfile +12 -0
- data/gemfiles/sequel-435.gemfile +11 -0
- data/gemfiles/sequel.gemfile +11 -0
- data/gemfiles/sinatra.gemfile +6 -0
- data/gemfiles/webmachine.gemfile +5 -0
- data/lib/appsignal.rb +804 -0
- data/lib/appsignal/auth_check.rb +65 -0
- data/lib/appsignal/capistrano.rb +10 -0
- data/lib/appsignal/cli.rb +108 -0
- data/lib/appsignal/cli/demo.rb +63 -0
- data/lib/appsignal/cli/diagnose.rb +500 -0
- data/lib/appsignal/cli/helpers.rb +72 -0
- data/lib/appsignal/cli/install.rb +277 -0
- data/lib/appsignal/cli/notify_of_deploy.rb +113 -0
- data/lib/appsignal/config.rb +287 -0
- data/lib/appsignal/demo.rb +107 -0
- data/lib/appsignal/event_formatter.rb +74 -0
- data/lib/appsignal/event_formatter/action_view/render_formatter.rb +24 -0
- data/lib/appsignal/event_formatter/active_record/instantiation_formatter.rb +14 -0
- data/lib/appsignal/event_formatter/active_record/sql_formatter.rb +14 -0
- data/lib/appsignal/event_formatter/elastic_search/search_formatter.rb +32 -0
- data/lib/appsignal/event_formatter/faraday/request_formatter.rb +19 -0
- data/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter.rb +89 -0
- data/lib/appsignal/event_formatter/moped/query_formatter.rb +80 -0
- data/lib/appsignal/extension.rb +63 -0
- data/lib/appsignal/extension/jruby.rb +460 -0
- data/lib/appsignal/garbage_collection_profiler.rb +48 -0
- data/lib/appsignal/hooks.rb +105 -0
- data/lib/appsignal/hooks/action_cable.rb +113 -0
- data/lib/appsignal/hooks/active_support_notifications.rb +52 -0
- data/lib/appsignal/hooks/celluloid.rb +30 -0
- data/lib/appsignal/hooks/data_mapper.rb +18 -0
- data/lib/appsignal/hooks/delayed_job.rb +19 -0
- data/lib/appsignal/hooks/mongo_ruby_driver.rb +21 -0
- data/lib/appsignal/hooks/net_http.rb +29 -0
- data/lib/appsignal/hooks/passenger.rb +22 -0
- data/lib/appsignal/hooks/puma.rb +35 -0
- data/lib/appsignal/hooks/que.rb +21 -0
- data/lib/appsignal/hooks/rake.rb +39 -0
- data/lib/appsignal/hooks/redis.rb +30 -0
- data/lib/appsignal/hooks/sequel.rb +60 -0
- data/lib/appsignal/hooks/shoryuken.rb +43 -0
- data/lib/appsignal/hooks/sidekiq.rb +144 -0
- data/lib/appsignal/hooks/unicorn.rb +40 -0
- data/lib/appsignal/hooks/webmachine.rb +23 -0
- data/lib/appsignal/integrations/capistrano/appsignal.cap +39 -0
- data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +52 -0
- data/lib/appsignal/integrations/data_mapper.rb +33 -0
- data/lib/appsignal/integrations/delayed_job_plugin.rb +54 -0
- data/lib/appsignal/integrations/grape.rb +53 -0
- data/lib/appsignal/integrations/mongo_ruby_driver.rb +55 -0
- data/lib/appsignal/integrations/object.rb +35 -0
- data/lib/appsignal/integrations/padrino.rb +84 -0
- data/lib/appsignal/integrations/que.rb +43 -0
- data/lib/appsignal/integrations/railtie.rb +41 -0
- data/lib/appsignal/integrations/rake.rb +2 -0
- data/lib/appsignal/integrations/resque.rb +20 -0
- data/lib/appsignal/integrations/resque_active_job.rb +30 -0
- data/lib/appsignal/integrations/sinatra.rb +17 -0
- data/lib/appsignal/integrations/webmachine.rb +38 -0
- data/lib/appsignal/js_exception_transaction.rb +54 -0
- data/lib/appsignal/marker.rb +63 -0
- data/lib/appsignal/minutely.rb +42 -0
- data/lib/appsignal/rack/generic_instrumentation.rb +49 -0
- data/lib/appsignal/rack/js_exception_catcher.rb +70 -0
- data/lib/appsignal/rack/rails_instrumentation.rb +51 -0
- data/lib/appsignal/rack/sinatra_instrumentation.rb +99 -0
- data/lib/appsignal/rack/streaming_listener.rb +73 -0
- data/lib/appsignal/system.rb +81 -0
- data/lib/appsignal/transaction.rb +498 -0
- data/lib/appsignal/transmitter.rb +107 -0
- data/lib/appsignal/utils.rb +127 -0
- data/lib/appsignal/utils/params_sanitizer.rb +59 -0
- data/lib/appsignal/utils/query_params_sanitizer.rb +55 -0
- data/lib/appsignal/version.rb +3 -0
- data/lib/sequel/extensions/appsignal_integration.rb +3 -0
- data/resources/appsignal.yml.erb +39 -0
- data/resources/cacert.pem +3866 -0
- data/spec/.rubocop.yml +7 -0
- data/spec/lib/appsignal/auth_check_spec.rb +80 -0
- data/spec/lib/appsignal/capistrano2_spec.rb +224 -0
- data/spec/lib/appsignal/capistrano3_spec.rb +237 -0
- data/spec/lib/appsignal/cli/demo_spec.rb +67 -0
- data/spec/lib/appsignal/cli/diagnose_spec.rb +988 -0
- data/spec/lib/appsignal/cli/helpers_spec.rb +171 -0
- data/spec/lib/appsignal/cli/install_spec.rb +632 -0
- data/spec/lib/appsignal/cli/notify_of_deploy_spec.rb +168 -0
- data/spec/lib/appsignal/cli_spec.rb +56 -0
- data/spec/lib/appsignal/config_spec.rb +637 -0
- data/spec/lib/appsignal/demo_spec.rb +87 -0
- data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +44 -0
- data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +21 -0
- data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +21 -0
- data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +52 -0
- data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +21 -0
- data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +113 -0
- data/spec/lib/appsignal/event_formatter/moped/query_formatter_spec.rb +112 -0
- data/spec/lib/appsignal/event_formatter_spec.rb +100 -0
- data/spec/lib/appsignal/extension/jruby_spec.rb +43 -0
- data/spec/lib/appsignal/extension_spec.rb +137 -0
- data/spec/lib/appsignal/garbage_collection_profiler_spec.rb +66 -0
- data/spec/lib/appsignal/hooks/action_cable_spec.rb +370 -0
- data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +92 -0
- data/spec/lib/appsignal/hooks/celluloid_spec.rb +35 -0
- data/spec/lib/appsignal/hooks/data_mapper_spec.rb +39 -0
- data/spec/lib/appsignal/hooks/delayed_job_spec.rb +358 -0
- data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +44 -0
- data/spec/lib/appsignal/hooks/net_http_spec.rb +53 -0
- data/spec/lib/appsignal/hooks/passenger_spec.rb +30 -0
- data/spec/lib/appsignal/hooks/puma_spec.rb +80 -0
- data/spec/lib/appsignal/hooks/que_spec.rb +19 -0
- data/spec/lib/appsignal/hooks/rake_spec.rb +73 -0
- data/spec/lib/appsignal/hooks/redis_spec.rb +55 -0
- data/spec/lib/appsignal/hooks/sequel_spec.rb +46 -0
- data/spec/lib/appsignal/hooks/shoryuken_spec.rb +192 -0
- data/spec/lib/appsignal/hooks/sidekiq_spec.rb +419 -0
- data/spec/lib/appsignal/hooks/unicorn_spec.rb +52 -0
- data/spec/lib/appsignal/hooks/webmachine_spec.rb +35 -0
- data/spec/lib/appsignal/hooks_spec.rb +195 -0
- data/spec/lib/appsignal/integrations/data_mapper_spec.rb +65 -0
- data/spec/lib/appsignal/integrations/grape_spec.rb +225 -0
- data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +127 -0
- data/spec/lib/appsignal/integrations/object_spec.rb +249 -0
- data/spec/lib/appsignal/integrations/padrino_spec.rb +323 -0
- data/spec/lib/appsignal/integrations/que_spec.rb +174 -0
- data/spec/lib/appsignal/integrations/railtie_spec.rb +129 -0
- data/spec/lib/appsignal/integrations/resque_active_job_spec.rb +83 -0
- data/spec/lib/appsignal/integrations/resque_spec.rb +92 -0
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +73 -0
- data/spec/lib/appsignal/integrations/webmachine_spec.rb +69 -0
- data/spec/lib/appsignal/js_exception_transaction_spec.rb +128 -0
- data/spec/lib/appsignal/marker_spec.rb +51 -0
- data/spec/lib/appsignal/minutely_spec.rb +50 -0
- data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +90 -0
- data/spec/lib/appsignal/rack/js_exception_catcher_spec.rb +147 -0
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +117 -0
- data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +213 -0
- data/spec/lib/appsignal/rack/streaming_listener_spec.rb +161 -0
- data/spec/lib/appsignal/system_spec.rb +131 -0
- data/spec/lib/appsignal/transaction_spec.rb +1146 -0
- data/spec/lib/appsignal/transmitter_spec.rb +152 -0
- data/spec/lib/appsignal/utils/params_sanitizer_spec.rb +136 -0
- data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +192 -0
- data/spec/lib/appsignal/utils_spec.rb +150 -0
- data/spec/lib/appsignal_spec.rb +1049 -0
- data/spec/spec_helper.rb +116 -0
- data/spec/support/fixtures/containers/cgroups/docker +14 -0
- data/spec/support/fixtures/containers/cgroups/docker_systemd +8 -0
- data/spec/support/fixtures/containers/cgroups/lxc +10 -0
- data/spec/support/fixtures/containers/cgroups/no_permission +0 -0
- data/spec/support/fixtures/containers/cgroups/none +1 -0
- data/spec/support/fixtures/generated_config.yml +24 -0
- data/spec/support/fixtures/uploaded_file.txt +0 -0
- data/spec/support/helpers/api_request_helper.rb +19 -0
- data/spec/support/helpers/cli_helpers.rb +26 -0
- data/spec/support/helpers/config_helpers.rb +21 -0
- data/spec/support/helpers/dependency_helper.rb +73 -0
- data/spec/support/helpers/directory_helper.rb +27 -0
- data/spec/support/helpers/env_helpers.rb +33 -0
- data/spec/support/helpers/example_exception.rb +13 -0
- data/spec/support/helpers/example_standard_error.rb +13 -0
- data/spec/support/helpers/log_helpers.rb +22 -0
- data/spec/support/helpers/std_streams_helper.rb +66 -0
- data/spec/support/helpers/system_helpers.rb +8 -0
- data/spec/support/helpers/time_helpers.rb +11 -0
- data/spec/support/helpers/transaction_helpers.rb +37 -0
- data/spec/support/matchers/contains_log.rb +7 -0
- data/spec/support/mocks/fake_gc_profiler.rb +19 -0
- data/spec/support/mocks/mock_extension.rb +6 -0
- data/spec/support/project_fixture/config/application.rb +0 -0
- data/spec/support/project_fixture/config/appsignal.yml +32 -0
- data/spec/support/project_fixture/config/environments/development.rb +0 -0
- data/spec/support/project_fixture/config/environments/production.rb +0 -0
- data/spec/support/project_fixture/config/environments/test.rb +0 -0
- data/spec/support/project_fixture/log/.gitkeep +0 -0
- data/spec/support/rails/my_app.rb +6 -0
- data/spec/support/shared_examples/instrument.rb +43 -0
- data/spec/support/stubs/delayed_job.rb +0 -0
- metadata +483 -0
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012-2017 AppSignal
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,264 @@
|
|
1
|
+
# AppSignal for Ruby
|
2
|
+
|
3
|
+
AppSignal solves all your Ruby monitoring needs in a single tool. You and your
|
4
|
+
team can focus on writing code and we'll provide the alerts if your app has any
|
5
|
+
issues.
|
6
|
+
|
7
|
+
- [AppSignal.com website][appsignal]
|
8
|
+
- [Documentation][docs]
|
9
|
+
- [Support][contact]
|
10
|
+
|
11
|
+
[![Build Status](https://travis-ci.org/appsignal/appsignal-ruby.png?branch=master)](https://travis-ci.org/appsignal/appsignal-ruby)
|
12
|
+
[![Gem Version](https://badge.fury.io/rb/appsignal.svg)](http://badge.fury.io/rb/appsignal)
|
13
|
+
[![Code Climate](https://codeclimate.com/github/appsignal/appsignal.png)](https://codeclimate.com/github/appsignal/appsignal)
|
14
|
+
|
15
|
+
## Description
|
16
|
+
|
17
|
+
The AppSignal gem collects exceptions and performance data from your Ruby
|
18
|
+
applications and sends it to [AppSignal][appsignal] for analysis. Get alerted
|
19
|
+
when an error occurs or an endpoint is responding very slowly.
|
20
|
+
|
21
|
+
AppSignal aims to provide a one stop solution to all your monitoring needs.
|
22
|
+
Track metrics from your servers with our [Host metrics][host-metrics] and graph
|
23
|
+
everything else with our [Custom metrics][custom-metrics] feature.
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
First make sure you've installed AppSignal in your application by following the
|
28
|
+
steps in [Installation](#installation).
|
29
|
+
|
30
|
+
AppSignal will automatically monitor requests, report any exceptions that are
|
31
|
+
thrown and any performance issues that might have occurred.
|
32
|
+
|
33
|
+
You can also add extra information to requests by adding custom instrumentation
|
34
|
+
and by adding tags.
|
35
|
+
|
36
|
+
### Track any error
|
37
|
+
|
38
|
+
Catch any error and report it to AppSignal, even if it doesn't crash a
|
39
|
+
request.
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
begin
|
43
|
+
config = File.read("config.yml")
|
44
|
+
rescue => e
|
45
|
+
Appsignal.set_error(e)
|
46
|
+
# Load alternative config
|
47
|
+
config = { :name => ENV["NAME"] }
|
48
|
+
end
|
49
|
+
```
|
50
|
+
|
51
|
+
Read more about [Exception handling][exception-handling] in our documentation.
|
52
|
+
|
53
|
+
### Tagging
|
54
|
+
|
55
|
+
Need more information with errors and performance issues? Add tags to your
|
56
|
+
requests to identify common factors for problems.
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
Appsignal.tag_request(
|
60
|
+
user: current_user.id,
|
61
|
+
locale: I18n.locale
|
62
|
+
)
|
63
|
+
```
|
64
|
+
|
65
|
+
Read more about [Tagging][tagging] in our documentation.
|
66
|
+
|
67
|
+
### Custom instrumentation
|
68
|
+
|
69
|
+
If you need more fine-grained instrumentation you can add custom
|
70
|
+
instrumentation anywhere in your code.
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
# Simple instrumentation
|
74
|
+
Appsignal.instrument("array_to_hash.expensive_logic", "Complex calculations") do
|
75
|
+
array = [["a", 1], ["b", 2], ["c", 3]]
|
76
|
+
Hash[array]
|
77
|
+
end
|
78
|
+
|
79
|
+
# Add the query that you're monitoring
|
80
|
+
sql = "SELECT * FROM posts ORDER BY created_at DESC LIMIT 1"
|
81
|
+
Appsignal.instrument("fetch.custom_database", "Fetch latest post", sql) do
|
82
|
+
# ...
|
83
|
+
end
|
84
|
+
|
85
|
+
# Nested instrumentation calls are also supported!
|
86
|
+
Appsignal.instrument("fetch.custom_database", "Fetch current user") do
|
87
|
+
# ...
|
88
|
+
|
89
|
+
Appsignal.instrument("write.custom_database", "Write user update") do
|
90
|
+
# ...
|
91
|
+
end
|
92
|
+
end
|
93
|
+
```
|
94
|
+
|
95
|
+
Read more about [custom instrumentation][custom-instrumentation] in our
|
96
|
+
documentation.
|
97
|
+
|
98
|
+
## Installation
|
99
|
+
|
100
|
+
First, [sign up][appsignal-sign-up] for an AppSignal account and add the
|
101
|
+
`appsignal` gem to your `Gemfile`. Then, run `bundle install`.
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
# Gemfile
|
105
|
+
gem "appsignal"
|
106
|
+
```
|
107
|
+
|
108
|
+
Afterward, you can use the `appsignal install` command to install AppSignal
|
109
|
+
into your application by using the "Push API key". This will guide you through
|
110
|
+
our installation wizard.
|
111
|
+
|
112
|
+
```sh
|
113
|
+
appsignal install [push api key]
|
114
|
+
```
|
115
|
+
|
116
|
+
Depending on what framework or gems you use some manual integration is
|
117
|
+
required. Follow the steps in the wizard or consult our [integrations] page for
|
118
|
+
help.
|
119
|
+
|
120
|
+
If you're stuck feel free to [contact us][contact]!
|
121
|
+
|
122
|
+
## Supported frameworks and gems
|
123
|
+
|
124
|
+
AppSignal automatically supports a collection of Ruby frameworks and gems,
|
125
|
+
including but not limited to:
|
126
|
+
|
127
|
+
- Ruby on Rails
|
128
|
+
- Rack
|
129
|
+
- Sinatra
|
130
|
+
- Padrino
|
131
|
+
- Grape
|
132
|
+
- Webmachine
|
133
|
+
- Capistrano
|
134
|
+
- Sidekiq
|
135
|
+
- Delayed Job
|
136
|
+
- Resque
|
137
|
+
- Rake
|
138
|
+
|
139
|
+
AppSignal instrumentation doesn't depend on automatic integrations. It's easy
|
140
|
+
to set up [custom instrumentation][custom-instrumentation] to add keep track of
|
141
|
+
anything.
|
142
|
+
|
143
|
+
For more detailed information and examples please visit our
|
144
|
+
[integrations] page.
|
145
|
+
|
146
|
+
### Front-end monitoring (Beta)
|
147
|
+
|
148
|
+
We have a [Front-end monitoring program][front-end-monitoring] running in Beta
|
149
|
+
currently. Be sure to check it out!
|
150
|
+
|
151
|
+
## Supported systems
|
152
|
+
|
153
|
+
Currently the AppSignal agent works on most Unix-like operating systems, such
|
154
|
+
as most Linux distributions, FreeBSD, macOS, excluding Microsoft Windows.
|
155
|
+
|
156
|
+
For more detailed information please visit our [Supported
|
157
|
+
systems][supported-systems] page.
|
158
|
+
|
159
|
+
## Development
|
160
|
+
|
161
|
+
### Installation
|
162
|
+
|
163
|
+
Make sure you have Bundler installed and then use the Rake install task to
|
164
|
+
install all possible dependencies.
|
165
|
+
|
166
|
+
```bash
|
167
|
+
# Install Bundler
|
168
|
+
gem install bundler
|
169
|
+
# Install the AppSignal extension and _all_ gems we support.
|
170
|
+
bundle exec rake install
|
171
|
+
# Only install the AppSignal extension.
|
172
|
+
bundle exec rake extension:install
|
173
|
+
```
|
174
|
+
|
175
|
+
### Testing
|
176
|
+
|
177
|
+
```bash
|
178
|
+
bundle exec rspec
|
179
|
+
# Or with one file
|
180
|
+
bundle exec rspec spec/lib/appsignal_spec.rb
|
181
|
+
```
|
182
|
+
|
183
|
+
Note that some specs depend on certain other gems to run and if they are not
|
184
|
+
loaded RSpec will not run them. See also [Testing with other
|
185
|
+
gems](#testing-with-other-gems).
|
186
|
+
|
187
|
+
#### Testing with other gems
|
188
|
+
|
189
|
+
AppSignal runs in many different configurations. To replicate these
|
190
|
+
configurations you need to run the spec suite with a specific Gemfile.
|
191
|
+
|
192
|
+
```
|
193
|
+
BUNDLE_GEMFILE=gemfiles/capistrano2.gemfile bundle exec rspec
|
194
|
+
BUNDLE_GEMFILE=gemfiles/capistrano3.gemfile bundle exec rspec
|
195
|
+
BUNDLE_GEMFILE=gemfiles/grape.gemfile bundle exec rspec
|
196
|
+
BUNDLE_GEMFILE=gemfiles/no_dependencies.gemfile bundle exec rspec
|
197
|
+
BUNDLE_GEMFILE=gemfiles/padrino.gemfile bundle exec rspec
|
198
|
+
BUNDLE_GEMFILE=gemfiles/rails-3.2.gemfile bundle exec rspec
|
199
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.0.gemfile bundle exec rspec
|
200
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.1.gemfile bundle exec rspec
|
201
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.2.gemfile bundle exec rspec
|
202
|
+
BUNDLE_GEMFILE=gemfiles/rails-5.0.gemfile bundle exec rspec
|
203
|
+
BUNDLE_GEMFILE=gemfiles/resque.gemfile bundle exec rspec
|
204
|
+
BUNDLE_GEMFILE=gemfiles/sequel-435.gemfile bundle exec rspec
|
205
|
+
BUNDLE_GEMFILE=gemfiles/sequel.gemfile bundle exec rspec
|
206
|
+
BUNDLE_GEMFILE=gemfiles/sinatra.gemfile bundle exec rspec
|
207
|
+
BUNDLE_GEMFILE=gemfiles/webmachine.gemfile bundle exec rspec
|
208
|
+
```
|
209
|
+
|
210
|
+
If you have either [RVM][rvm] or [rbenv][rbenv] installed you can also use
|
211
|
+
`rake generate_bundle_and_spec_all` to generate a script that runs specs for
|
212
|
+
all Ruby versions and gem combinations we support.
|
213
|
+
|
214
|
+
We run the suite against all of the Gemfiles mentioned above and on
|
215
|
+
a number of different Ruby versions.
|
216
|
+
|
217
|
+
### Versioning
|
218
|
+
|
219
|
+
This gem uses [Semantic Versioning][semver].
|
220
|
+
|
221
|
+
The `master` branch corresponds to the current stable release of the gem.
|
222
|
+
|
223
|
+
The `develop` branch is used for development of features that will end up in
|
224
|
+
the next minor release.
|
225
|
+
|
226
|
+
Open a Pull Request on the `master` branch if you're fixing a bug. For new new
|
227
|
+
features, open a Pull Request on the `develop` branch.
|
228
|
+
|
229
|
+
Every stable and unstable release is tagged in git with a version tag.
|
230
|
+
|
231
|
+
## Contributing
|
232
|
+
|
233
|
+
Thinking of contributing to our gem? Awesome! 🚀
|
234
|
+
|
235
|
+
Please follow our [Contributing guide][contributing-guide] in our
|
236
|
+
documentation.
|
237
|
+
|
238
|
+
Also, we would be very happy to send you Stroopwafles. Have look at everyone
|
239
|
+
we send a package to so far on our [Stroopwafles page][waffles-page].
|
240
|
+
|
241
|
+
## Support
|
242
|
+
|
243
|
+
[Contact us][contact] and speak directly with the engineers working on
|
244
|
+
AppSignal. They will help you get set up, tweak your code and make sure you get
|
245
|
+
the most out of using AppSignal.
|
246
|
+
|
247
|
+
[appsignal]: https://appsignal.com
|
248
|
+
[appsignal-sign-up]: https://appsignal.com/users/sign_up
|
249
|
+
[contact]: mailto:support@appsignal.com
|
250
|
+
[waffles-page]: https://appsignal.com/waffles
|
251
|
+
[docs]: http://docs.appsignal.com
|
252
|
+
[contributing-guide]: http://docs.appsignal.com/appsignal/contributing.html
|
253
|
+
[supported-systems]: http://docs.appsignal.com/support/operating-systems.html
|
254
|
+
[integrations]: http://docs.appsignal.com/ruby/integrations/index.html
|
255
|
+
[custom-instrumentation]: http://docs.appsignal.com/ruby/instrumentation/
|
256
|
+
[front-end-monitoring]: http://docs.appsignal.com/front-end/error-handling.html
|
257
|
+
[exception-handling]: http://docs.appsignal.com/ruby/instrumentation/exception-handling.html
|
258
|
+
[tagging]: http://docs.appsignal.com/ruby/instrumentation/tagging.html
|
259
|
+
[host-metrics]: http://docs.appsignal.com/metrics/host.html
|
260
|
+
[custom-metrics]: http://docs.appsignal.com/metrics/custom.html
|
261
|
+
|
262
|
+
[semver]: http://semver.org/
|
263
|
+
[rvm]: http://rvm.io/
|
264
|
+
[rbenv]: https://github.com/rbenv/rbenv
|
data/Rakefile
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
require "bundler"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
GEMFILES = %w[
|
5
|
+
capistrano2
|
6
|
+
capistrano3
|
7
|
+
grape
|
8
|
+
no_dependencies
|
9
|
+
padrino
|
10
|
+
rails-3.2
|
11
|
+
rails-4.0
|
12
|
+
rails-4.1
|
13
|
+
rails-4.2
|
14
|
+
rails-5.0
|
15
|
+
resque
|
16
|
+
sequel
|
17
|
+
sequel-435
|
18
|
+
sinatra
|
19
|
+
grape
|
20
|
+
webmachine
|
21
|
+
que
|
22
|
+
].freeze
|
23
|
+
|
24
|
+
RUBY_VERSIONS = %w[
|
25
|
+
2.0.0-p648
|
26
|
+
2.1.8
|
27
|
+
2.2.4
|
28
|
+
2.3.0
|
29
|
+
2.4.0
|
30
|
+
].freeze
|
31
|
+
|
32
|
+
EXCLUSIONS = {
|
33
|
+
"rails-5.0" => %w[2.0.0 2.1.8]
|
34
|
+
}.freeze
|
35
|
+
|
36
|
+
VERSION_MANAGERS = {
|
37
|
+
:rbenv => ->(version) { "rbenv local #{version}" },
|
38
|
+
:rvm => ->(version) { "rvm use --default #{version.split("-").first}" }
|
39
|
+
}.freeze
|
40
|
+
|
41
|
+
task :publish do
|
42
|
+
require "appsignal/version"
|
43
|
+
|
44
|
+
NAME = "appsignal".freeze
|
45
|
+
VERSION_FILE = "lib/appsignal/version.rb".freeze
|
46
|
+
CHANGELOG_FILE = "CHANGELOG.md".freeze
|
47
|
+
|
48
|
+
raise "$EDITOR should be set" unless ENV["EDITOR"]
|
49
|
+
|
50
|
+
def build_and_push_gem
|
51
|
+
puts "# Building gem"
|
52
|
+
FileUtils.rm_f("#{NAME}-#{gem_version}.gem")
|
53
|
+
puts `gem build #{NAME}.gemspec`
|
54
|
+
puts "# Publishing Gem"
|
55
|
+
puts `gem push #{NAME}-#{gem_version}.gem`
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_and_push_tag
|
59
|
+
puts `git commit -am 'Bump to #{version} [ci skip]'`
|
60
|
+
puts "# Creating tag #{version}"
|
61
|
+
puts `git tag #{version}`
|
62
|
+
puts `git push origin #{version}`
|
63
|
+
puts `git push origin #{current_branch}`
|
64
|
+
rescue
|
65
|
+
raise "Tag: '#{version}' already exists"
|
66
|
+
end
|
67
|
+
|
68
|
+
def changes
|
69
|
+
git_status_to_array(`git status -s -u`)
|
70
|
+
end
|
71
|
+
|
72
|
+
def gem_version
|
73
|
+
Appsignal::VERSION
|
74
|
+
end
|
75
|
+
|
76
|
+
def version
|
77
|
+
@version ||= "v#{gem_version}"
|
78
|
+
end
|
79
|
+
|
80
|
+
def current_branch
|
81
|
+
`git rev-parse --abbrev-ref HEAD`.chomp
|
82
|
+
end
|
83
|
+
|
84
|
+
def git_status_to_array(changes)
|
85
|
+
changes.split("\n").each { |change| change.gsub!(/^.. /, "") }
|
86
|
+
end
|
87
|
+
|
88
|
+
raise "Branch should hold no uncommitted file change)" unless changes.empty?
|
89
|
+
|
90
|
+
system("$EDITOR #{VERSION_FILE}")
|
91
|
+
unless changes.member?(VERSION_FILE)
|
92
|
+
raise "Actually change the version in: #{VERSION_FILE}"
|
93
|
+
end
|
94
|
+
|
95
|
+
Appsignal.send(:remove_const, :VERSION)
|
96
|
+
load File.expand_path(VERSION_FILE)
|
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"
|
105
|
+
build_and_push_gem
|
106
|
+
|
107
|
+
# Create tag
|
108
|
+
create_and_push_tag
|
109
|
+
end
|
110
|
+
|
111
|
+
desc "Install the AppSignal gem, extension and all possible dependencies."
|
112
|
+
task :install => "extension:install" do
|
113
|
+
Bundler.with_clean_env do
|
114
|
+
GEMFILES.each do |gemfile|
|
115
|
+
system "bundle --gemfile gemfiles/#{gemfile}.gemfile"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
task :spec_all_gemfiles do
|
121
|
+
GEMFILES.each do |gemfile|
|
122
|
+
puts "Running tests for #{gemfile}"
|
123
|
+
unless system("env BUNDLE_GEMFILE=gemfiles/#{gemfile}.gemfile bundle exec rspec")
|
124
|
+
raise "Not successful"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
task :generate_bundle_and_spec_all do
|
130
|
+
VERSION_MANAGERS.each do |version_manager, switch_command|
|
131
|
+
out = []
|
132
|
+
out << if version_manager == :rvm
|
133
|
+
"#!/bin/bash --login"
|
134
|
+
else
|
135
|
+
"#!/bin/sh"
|
136
|
+
end
|
137
|
+
out << "rm -f .ruby-version"
|
138
|
+
out << "echo 'Using #{version_manager}'"
|
139
|
+
RUBY_VERSIONS.each do |version|
|
140
|
+
short_version = version.split("-").first
|
141
|
+
out << "echo 'Switching to #{short_version}'"
|
142
|
+
out << "#{switch_command.call(version)} || { echo 'Switching Ruby failed'; exit 1; }"
|
143
|
+
out << "ruby -v"
|
144
|
+
out << "echo 'Compiling extension'"
|
145
|
+
out << "cd ext && rm -f appsignal-agent appsignal_extension.bundle appsignal.h libappsignal.a Makefile && ruby extconf.rb && make && cd .."
|
146
|
+
GEMFILES.each do |gemfile|
|
147
|
+
next if EXCLUSIONS[gemfile] && EXCLUSIONS[gemfile].include?(short_version)
|
148
|
+
out << "echo 'Bundling #{gemfile} in #{short_version}'"
|
149
|
+
out << "bundle --quiet --gemfile gemfiles/#{gemfile}.gemfile || { echo 'Bundling failed'; exit 1; }"
|
150
|
+
out << "echo 'Running #{gemfile} in #{short_version}'"
|
151
|
+
out << "env BUNDLE_GEMFILE=gemfiles/#{gemfile}.gemfile bundle exec rspec || { echo 'Running specs failed'; exit 1; }"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
out << "rm -f .ruby-version"
|
155
|
+
out << "echo 'Successfully ran specs for all environments'"
|
156
|
+
|
157
|
+
script = "bundle_and_spec_all_#{version_manager}"
|
158
|
+
FileUtils.rm_f(script)
|
159
|
+
File.open(script, "w") do |file|
|
160
|
+
file.write out.join("\n")
|
161
|
+
end
|
162
|
+
File.chmod(0o775, script)
|
163
|
+
puts "Generated #{script}"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
task :console do
|
168
|
+
require "irb"
|
169
|
+
require "irb/completion"
|
170
|
+
require "appsignal"
|
171
|
+
|
172
|
+
Appsignal.config = Appsignal::Config.new(".", :console)
|
173
|
+
|
174
|
+
ARGV.clear
|
175
|
+
IRB.start
|
176
|
+
end
|
177
|
+
|
178
|
+
namespace :extension do
|
179
|
+
desc "Install the AppSignal gem extension"
|
180
|
+
task :install => :clean do
|
181
|
+
if RUBY_PLATFORM == "java"
|
182
|
+
system "cd ext && rake"
|
183
|
+
else
|
184
|
+
system "cd ext && ruby extconf.rb && make clean && make"
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
desc "Clean the AppSignal gem extension directory of installation artifacts"
|
189
|
+
task :clean do
|
190
|
+
system <<-COMMAND
|
191
|
+
cd ext &&
|
192
|
+
rm -f appsignal.bundle \
|
193
|
+
appsignal-agent \
|
194
|
+
appsignal.h \
|
195
|
+
appsignal_extension.o \
|
196
|
+
appsignal_extension.bundle \
|
197
|
+
install.log \
|
198
|
+
libappsignal.a \
|
199
|
+
appsignal.version \
|
200
|
+
Makefile \
|
201
|
+
mkmf.log
|
202
|
+
COMMAND
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
begin
|
207
|
+
require "rspec/core/rake_task"
|
208
|
+
desc "Run the AppSignal gem test suite."
|
209
|
+
RSpec::Core::RakeTask.new :test
|
210
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
211
|
+
# When running rake install, there is no RSpec yet.
|
212
|
+
end
|
213
|
+
|
214
|
+
task :default => [:generate_bundle_and_spec_all, :spec_all_gemfiles]
|