appsignal 0.8.6.beta.1 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzlhYWQ4OGJmZTVkOWRhYzIzNGQzNmU5YzJlZGRiNTEwMGMzMTZjNw==
4
+ MTdmNjgwM2IzMDBmNzE0ZGQxM2IwODRhMzdkM2RhZmVlOTIxNWEzMA==
5
5
  data.tar.gz: !binary |-
6
- NjY2MTUyOWFjMjUyMGRiNWZjYjNhYTc1MDQ1OTk2MjI1NDA4ZmI5OQ==
6
+ YTA1OWI5NjBmN2FmZmIwOGMxZjRkMmEwODkxODkwMDNiMDliMGI3YQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YmMwOTdkMjBmM2RjY2M0Y2ViYmFhNzc3NGEwY2IyNzU5YzAyMmMzZWNkNDI2
10
- ZTA0MGQzYTk0YzM0YWVjYTJmN2Q3NDMxNmYyNTgwMTVkYWM1ZmYzMWU3MDc2
11
- ZmIxYTU1MmZkNTA4NjBiM2M5ZjkxZjcyYTYwYTI3MGUyZWVhNTE=
9
+ ZWQ2ZTE0Y2I3NjM2MDljZGZmYmFlOWI3NmQ2MGNiNWJiODJhYWNjMWY3MjYx
10
+ MjQyN2ZlODQ2M2ZkZGI2MmMyZjIwYTcxNGFhZDk3OTFiZDg4NGVjNmFlMDdk
11
+ MGUxMzliYzdjNjA0YTQ4YWEwMDJjMTk2MzdiMDQ3NzQ4NzZiMzU=
12
12
  data.tar.gz: !binary |-
13
- NGM3MWMwOTRmN2MxYmRiMWE5NmUyMzE5ODU1MDllOWQxMGZjZWU5YTMzMjcx
14
- ZWIzMWNjYTQzZjdiMTg2MmVmNjZmNGMzZDFjNTc5ZWFjNWRkOGM1OTQ4Mzdh
15
- ZTQxMmZkNGVjYzgyOWMwZjJiNjViMzY1OTRhZmY4NDdhZWU5NWQ=
13
+ Y2RjZmEzMDg0ZTJhYWFkMzMwYTQxZTE4ZGI0NzMzYzc5ODFjNjZlN2IzMDFi
14
+ NjljNTljNmYwMzU1NTFmNGU2ZTE4MWNhMzgzMjA1Y2M3ZGJlODg2NmQwMTAy
15
+ NzUzZTQ5ZGUzMGQ4ZjNiMDc5YTg4NjRiMWZkMjgwYzYxZjEzZWM=
@@ -1,9 +1,14 @@
1
1
  # 0.8.6
2
- * Resque support
2
+ * Resque support (beta)
3
3
  * Support tags in Appsignal.send_exception
4
4
  * Alias tag_request to tag_job, for background jobs
5
5
  * Skip sanitization of env if env is nil
6
6
  * Small bugfix in forking logic
7
+ * Don't send params if send_params is off in config
8
+ * Remove --repository option in CLI
9
+ * Name option in appsignal notify_of_deploy CLI
10
+ * Don't call to_hash on ENV
11
+ * Get error message in CLI when config is not active
7
12
 
8
13
  # 0.8.5
9
14
  * Don't require revision in CLI notify_of_deploy
@@ -63,7 +63,7 @@ module Appsignal
63
63
 
64
64
  def send_exception(exception, tags=nil)
65
65
  return if is_ignored_exception?(exception)
66
- transaction = Appsignal::Transaction.create(SecureRandom.uuid, ENV.to_hash)
66
+ transaction = Appsignal::Transaction.create(SecureRandom.uuid, ENV)
67
67
  transaction.add_exception(exception)
68
68
  transaction.set_tags(tags) if tags
69
69
  transaction.complete!
@@ -8,10 +8,11 @@ module Appsignal
8
8
  AVAILABLE_COMMANDS = %w(notify_of_deploy).freeze
9
9
 
10
10
  class << self
11
- attr_accessor :options, :config
11
+ attr_accessor :options, :config, :initial_config
12
12
 
13
13
  def run(argv=ARGV)
14
14
  @options = {}
15
+ @initial_config = {}
15
16
  global = global_option_parser
16
17
  commands = command_option_parser
17
18
  global.order!(argv)
@@ -43,7 +44,7 @@ module Appsignal
43
44
  @config ||= Appsignal::Config.new(
44
45
  ENV['PWD'],
45
46
  options[:environment],
46
- {},
47
+ @initial_config,
47
48
  logger
48
49
  )
49
50
  end
@@ -76,10 +77,6 @@ module Appsignal
76
77
  options[:revision] = arg
77
78
  end
78
79
 
79
- o.on '--repository=<repository>', "The location of the main code repository" do |arg|
80
- options[:repository] = arg
81
- end
82
-
83
80
  o.on '--user=<user>', "The name of the user that's deploying" do |arg|
84
81
  options[:user] = arg
85
82
  end
@@ -87,18 +84,21 @@ module Appsignal
87
84
  o.on '--environment=<rails_env>', "The environment you're deploying to" do |arg|
88
85
  options[:environment] = arg
89
86
  end
87
+
88
+ o.on '--name=<name>', "The name of the app (optional)" do |arg|
89
+ initial_config[:name] = arg
90
+ end
90
91
  end
91
92
  }
92
93
  end
93
94
 
94
95
  def notify_of_deploy
95
- validate_config_loaded
96
+ validate_active_config
96
97
  validate_required_options([:revision, :user, :environment])
97
98
 
98
99
  Appsignal::Marker.new(
99
100
  {
100
101
  :revision => options[:revision],
101
- :repository => options[:repository],
102
102
  :user => options[:user]
103
103
  },
104
104
  config,
@@ -118,8 +118,8 @@ module Appsignal
118
118
  end
119
119
  end
120
120
 
121
- def validate_config_loaded
122
- unless config.loaded?
121
+ def validate_active_config
122
+ unless config.active?
123
123
  puts 'Exiting: No config file or push api key env var found'
124
124
  exit(1)
125
125
  end
@@ -8,6 +8,7 @@ module Appsignal
8
8
 
9
9
  DEFAULT_CONFIG = {
10
10
  :ignore_exceptions => [],
11
+ :send_params => true,
11
12
  :endpoint => 'https://push.appsignal.com/1',
12
13
  :slow_request_threshold => 200
13
14
  }.freeze
@@ -12,7 +12,7 @@ if defined?(::Delayed::Plugin)
12
12
 
13
13
  def self.invoke_with_instrumentation(job, block)
14
14
  begin
15
- Appsignal::Transaction.create(SecureRandom.uuid, ENV.to_hash)
15
+ Appsignal::Transaction.create(SecureRandom.uuid, ENV)
16
16
  class_name, method_name = job.name.split('#')
17
17
  ActiveSupport::Notifications.instrument(
18
18
  'perform_job.delayed_job',
@@ -6,7 +6,7 @@ if defined?(::Resque)
6
6
  module ResquePlugin
7
7
 
8
8
  def around_perform_resque_plugin(*args)
9
- Appsignal::Transaction.create(SecureRandom.uuid, ENV.to_hash)
9
+ Appsignal::Transaction.create(SecureRandom.uuid, ENV)
10
10
  ActiveSupport::Notifications.instrument(
11
11
  'perform_job.resque',
12
12
  :class => self.to_s,
@@ -5,7 +5,7 @@ if defined?(::Sidekiq)
5
5
  module Integrations
6
6
  class SidekiqPlugin
7
7
  def call(worker, item, queue)
8
- Appsignal::Transaction.create(SecureRandom.uuid, ENV.to_hash)
8
+ Appsignal::Transaction.create(SecureRandom.uuid, ENV)
9
9
  ActiveSupport::Notifications.instrument(
10
10
  'perform_job.sidekiq',
11
11
  :class => item['class'],
@@ -44,6 +44,7 @@ module Appsignal
44
44
  o.delete(:class)
45
45
  o.delete(:method)
46
46
  o.delete(:queue_start)
47
+ o.delete(:params) unless Appsignal.config[:send_params]
47
48
  o[:action] = action
48
49
  end
49
50
  end
@@ -1,3 +1,3 @@
1
1
  module Appsignal
2
- VERSION = '0.8.6.beta.1'
2
+ VERSION = '0.8.6'
3
3
  end
@@ -9,6 +9,7 @@ describe Appsignal::CLI do
9
9
  $stdout = out_stream
10
10
  ENV['PWD'] = project_fixture_path
11
11
  cli.config = nil
12
+ cli.initial_config = {}
12
13
  cli.options = {:environment => 'production'}
13
14
  end
14
15
  after do
@@ -61,7 +62,7 @@ describe Appsignal::CLI do
61
62
 
62
63
  describe "#notify_of_deploy" do
63
64
  it "should validate that the config has been loaded and all options have been supplied" do
64
- cli.should_receive(:validate_config_loaded)
65
+ cli.should_receive(:validate_active_config)
65
66
  cli.should_receive(:validate_required_options).with(
66
67
  [:revision, :user, :environment]
67
68
  )
@@ -75,7 +76,6 @@ describe Appsignal::CLI do
75
76
  Appsignal::Marker.should_receive(:new).with(
76
77
  {
77
78
  :revision => 'aaaaa',
78
- :repository => 'git@github.com:our/project.git',
79
79
  :user => 'thijs'
80
80
  },
81
81
  kind_of(Appsignal::Config),
@@ -86,18 +86,19 @@ describe Appsignal::CLI do
86
86
  cli.run([
87
87
  'notify_of_deploy',
88
88
  '--revision=aaaaa',
89
- '--repository=git@github.com:our/project.git',
90
89
  '--user=thijs',
91
90
  '--environment=production'
92
91
  ])
93
92
  end
94
93
 
95
- it "should notify of a deploy without repository" do
94
+ it "should notify of a deploy with no config file and a name specified" do
95
+ ENV['PWD'] = '/nonsense'
96
+ ENV['APPSIGNAL_PUSH_API_KEY'] = 'key'
97
+
96
98
  marker = double
97
99
  Appsignal::Marker.should_receive(:new).with(
98
100
  {
99
101
  :revision => 'aaaaa',
100
- :repository => nil,
101
102
  :user => 'thijs'
102
103
  },
103
104
  kind_of(Appsignal::Config),
@@ -107,10 +108,13 @@ describe Appsignal::CLI do
107
108
 
108
109
  cli.run([
109
110
  'notify_of_deploy',
111
+ '--name=project-production',
110
112
  '--revision=aaaaa',
111
113
  '--user=thijs',
112
114
  '--environment=production'
113
115
  ])
116
+
117
+ cli.config[:name].should == 'project-production'
114
118
  end
115
119
  end
116
120
 
@@ -161,10 +165,10 @@ describe Appsignal::CLI do
161
165
  end
162
166
  end
163
167
 
164
- describe "#validate_config_loaded" do
168
+ describe "#validate_active_config" do
165
169
  context "when config is present" do
166
170
  it "should do nothing" do
167
- cli.send(:validate_config_loaded)
171
+ cli.send(:validate_active_config)
168
172
  out_stream.string.should be_empty
169
173
  end
170
174
  end
@@ -174,7 +178,18 @@ describe Appsignal::CLI do
174
178
 
175
179
  it "should print a message and exit" do
176
180
  lambda {
177
- cli.send(:validate_config_loaded)
181
+ cli.send(:validate_active_config)
182
+ }.should raise_error(SystemExit)
183
+ out_stream.string.should include('Exiting: No config file or push api key env var found')
184
+ end
185
+ end
186
+
187
+ context "when config is not active" do
188
+ before { ENV['PWD'] = '/nonsense' }
189
+
190
+ it "should print a message and exit" do
191
+ lambda {
192
+ cli.send(:validate_active_config)
178
193
  }.should raise_error(SystemExit)
179
194
  out_stream.string.should include('Exiting: No config file or push api key env var found')
180
195
  end
@@ -17,6 +17,7 @@ describe Appsignal::Config do
17
17
  it "should merge with the default config and fill the config hash" do
18
18
  subject.config_hash.should == {
19
19
  :ignore_exceptions => [],
20
+ :send_params => true,
20
21
  :endpoint => 'https://push.appsignal.com/1',
21
22
  :slow_request_threshold => 200,
22
23
  :push_api_key => 'abc',
@@ -121,6 +122,7 @@ describe Appsignal::Config do
121
122
  subject.config_hash.should == {
122
123
  :push_api_key => 'push_api_key',
123
124
  :ignore_exceptions => [],
125
+ :send_params => true,
124
126
  :endpoint => 'https://push.appsignal.com/1',
125
127
  :slow_request_threshold => 200,
126
128
  :active => true
@@ -11,8 +11,7 @@ describe Appsignal::Transaction::Formatter do
11
11
  before { transaction.stub(:fullpath => '/foo') }
12
12
 
13
13
  describe "#to_hash" do
14
- before { formatter.to_hash }
15
- subject { formatter.hash }
14
+ subject { formatter.to_hash }
16
15
 
17
16
  context "with a regular request" do
18
17
  let(:transaction) { regular_transaction }
@@ -22,19 +21,15 @@ describe Appsignal::Transaction::Formatter do
22
21
  its([:request_id]) { should == '1' }
23
22
  its([:log_entry]) { should == {
24
23
  :action => "BlogPostsController#show",
25
- :db_runtime => 500,
26
24
  :duration => be_within(0.01).of(100.0),
27
25
  :end => 1389783600.1,
28
26
  :environment => {},
29
27
  :kind => "http_request",
30
- :path => "/blog",
31
- :request_format => "html",
32
- :request_method => "GET",
28
+ :path => "/foo",
33
29
  :session_data => {},
34
- :status => "200",
35
30
  :time => 1389783600.0,
36
- :view_runtime => 500
37
31
  } }
32
+ its([:events]) { should be_nil }
38
33
  its([:failed]) { should be_false }
39
34
  end
40
35
 
@@ -43,7 +38,7 @@ describe Appsignal::Transaction::Formatter do
43
38
  before { transaction.truncate! }
44
39
 
45
40
  context "log_entry content" do
46
- subject { formatter.hash[:log_entry] }
41
+ subject { formatter.to_hash[:log_entry] }
47
42
 
48
43
  its([:queue_duration]) { should be_within(0.01).of(40.0) }
49
44
  end
@@ -57,13 +52,24 @@ describe Appsignal::Transaction::Formatter do
57
52
  its([:failed]) { should be_true }
58
53
 
59
54
  context "log_entry content" do
60
- subject { formatter.hash[:log_entry] }
55
+ subject { formatter.to_hash[:log_entry] }
61
56
 
62
57
  its([:tags]) { should == {'user_id' => 123} }
58
+ its([:action]) { should == 'BlogPostsController#show' }
59
+ its([:params]) { should == {'action' => 'show', 'controller' => 'blog_posts', 'id' => '1'} }
60
+
61
+ context "when send_params in the config is false" do
62
+ before { Appsignal.config.config_hash[:send_params] = false }
63
+ after { Appsignal.config.config_hash[:send_params] = true }
64
+
65
+ it "should not send the params" do
66
+ subject[:params].should be_nil
67
+ end
68
+ end
63
69
  end
64
70
 
65
71
  context "exception content" do
66
- subject { formatter.hash[:exception] }
72
+ subject { formatter.to_hash[:exception] }
67
73
 
68
74
  its(:keys) { should =~ [:exception, :message, :backtrace] }
69
75
  its([:exception]) { should == 'ArgumentError' }
@@ -88,10 +94,39 @@ describe Appsignal::Transaction::Formatter do
88
94
 
89
95
  its(:keys) { should =~ [:request_id, :log_entry, :failed, :events] }
90
96
  its([:request_id]) { should == '1' }
97
+ its([:log_entry]) { should == {
98
+ :action => "BlogPostsController#show",
99
+ :duration => be_within(0.01).of(200.0),
100
+ :end => 1389783600.200002,
101
+ :environment => {},
102
+ :params => {
103
+ 'action' => 'show',
104
+ 'controller' => 'blog_posts',
105
+ 'id' => '1'
106
+ },
107
+ :kind => "http_request",
108
+ :path => "/blog",
109
+ :session_data => {},
110
+ :time => 1389783600.0,
111
+ :db_runtime => 500,
112
+ :view_runtime => 500,
113
+ :request_format => 'html',
114
+ :request_method => 'GET',
115
+ :status => '200'
116
+ } }
91
117
  its([:failed]) { should be_false }
92
118
 
119
+ context "when send_params in the config is false" do
120
+ before { Appsignal.config.config_hash[:send_params] = false }
121
+ after { Appsignal.config.config_hash[:send_params] = true }
122
+
123
+ it "should not send the params" do
124
+ subject[:log_entry][:params].should be_nil
125
+ end
126
+ end
127
+
93
128
  context "events content" do
94
- subject { formatter.hash[:events] }
129
+ subject { formatter.to_hash[:events] }
95
130
 
96
131
  its(:length) { should == 1 }
97
132
  its(:first) { should == {
@@ -103,6 +138,11 @@ describe Appsignal::Transaction::Formatter do
103
138
  :path => "/blog",
104
139
  :action => "show",
105
140
  :controller => "BlogPostsController",
141
+ :params => {
142
+ 'action' => 'show',
143
+ 'controller' => 'blog_posts',
144
+ 'id' => '1'
145
+ },
106
146
  :request_format => "html",
107
147
  :request_method => "GET",
108
148
  :status => "200",
@@ -116,7 +156,6 @@ describe Appsignal::Transaction::Formatter do
116
156
  context "with a background request" do
117
157
  let(:payload) { create_background_payload }
118
158
  let(:transaction) { background_job_transaction({}, payload) }
119
- before { transaction.truncate! }
120
159
 
121
160
  its(:keys) { should =~ [:request_id, :log_entry, :failed] }
122
161
  its([:request_id]) { should == '1' }
@@ -140,7 +179,7 @@ describe Appsignal::Transaction::Formatter do
140
179
  let(:payload) { create_background_payload(:queue_start => 0) }
141
180
 
142
181
  context "log entry" do
143
- subject { formatter.hash[:log_entry] }
182
+ subject { formatter.to_hash[:log_entry] }
144
183
 
145
184
  its([:queue_duration]) { should be_nil }
146
185
  end
@@ -17,6 +17,11 @@ module NotificationHelpers
17
17
  :path => '/blog',
18
18
  :action => 'show',
19
19
  :controller => 'BlogPostsController',
20
+ :params => {
21
+ 'controller' => 'blog_posts',
22
+ 'action' => 'show',
23
+ 'id' => '1'
24
+ },
20
25
  :request_format => 'html',
21
26
  :request_method => "GET",
22
27
  :status => '200',
@@ -12,7 +12,7 @@ module TransactionHelpers
12
12
  end
13
13
 
14
14
  def transaction_with_exception
15
- appsignal_transaction.tap do |o|
15
+ appsignal_transaction(:process_action_event => notification_event).tap do |o|
16
16
  o.set_tags('user_id' => 123)
17
17
  begin
18
18
  raise ArgumentError, 'oh no'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6.beta.1
4
+ version: 0.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Beekman
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-02-20 00:00:00.000000000 Z
15
+ date: 2014-02-21 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activesupport
@@ -241,9 +241,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
241
241
  version: 1.9.3
242
242
  required_rubygems_version: !ruby/object:Gem::Requirement
243
243
  requirements:
244
- - - ! '>'
244
+ - - ! '>='
245
245
  - !ruby/object:Gem::Version
246
- version: 1.3.1
246
+ version: '0'
247
247
  requirements: []
248
248
  rubyforge_project:
249
249
  rubygems_version: 2.0.3