copperegg-apm 1.0.0.pre4 → 1.0.0.pre5

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79163ffe60c85728d0ef7395b45576b8adafe04a
4
- data.tar.gz: dac7a7d0928a0b5ed9d3db1781e488a9e9e44598
3
+ metadata.gz: 4e143cece9e590383a13e4f8a29a5f3e6a8a39fe
4
+ data.tar.gz: b4fc0574c45b9dd1a838b54e515c5c79178d8b3e
5
5
  SHA512:
6
- metadata.gz: 49594494683194b6838c4c5a40dac5a44addadb07cf2039232ec1b4115fe3b1dc3e684143a231b23a2d45d0bea33fd152d18b1c0e5f5fd570299ae632ceac898
7
- data.tar.gz: 093ba0a311bc4c252686d63894d6faedb0fd14a255e9fecb68067d9e23a2baccbaf38c17a0c111c9e3ff6fe5e638ad4de33ba77357c7ee95ac11f9a42efed8b4
6
+ metadata.gz: 64aec00ee6e653dd59884633de9824fce8ee4327e2328e8580a45939e8b69aeddc1bffb5c02914028a354515243d42af849ad823a82c7ada0ab0a9b6e1442487
7
+ data.tar.gz: 77dc00611f2344497ed8621b3f185025cfe59faf60bd31a050128e5dcc26d883d7f8ba56c434c0471eb7d1a96c8a23daf4da2cb93397f52fab52e3ad1832ff57
data/README.md CHANGED
@@ -8,9 +8,17 @@ Monitor the performance of your application with code instrumentation and except
8
8
 
9
9
  ## Getting Started
10
10
 
11
- ### Set Up Your CopperEgg Account
11
+ ### Prerequisites
12
12
 
13
- ![CopperEgg App Screenshot](https://raw.github.com/CopperEgg/apm/master/screenshot01.png)
13
+ To get started monitoring your project's code, you'll need to complete the following steps:
14
+
15
+ + Signup for a [CopperEgg Account](http://copperegg.com/copperegg-signup/)
16
+ + Install [RevealCloud](http://copperegg.com/revealcloud-server-monitoring/), CopperEgg's server monitoring tool
17
+ + Create an App under your CopperEgg Account, as described below
18
+
19
+ ### Create An App Under Your CopperEgg Account
20
+
21
+ ![CopperEgg App Screenshot](/screenshot01.png?raw=true "CopperEgg App Screenshot")
14
22
 
15
23
  Login to your account at [CopperEgg.com](https://app.copperegg.com/login) and click on the `Apps` tag to create a new App. An App represents your existing application. Give it a descriptive name like 'MySaaSApp.com'.
16
24
 
@@ -44,9 +52,9 @@ From your project's root directory, run `copperegg-apm-init`. This will create a
44
52
 
45
53
  Require this file below your other require directives.
46
54
 
47
- ### Configuration
55
+ ## Configuration
48
56
 
49
- Instrumentation is initiated in your project by calling the `CopperEgg::APM.configure` block.
57
+ Instrumentation is initiated in your project by calling the `CopperEgg::APM.configure` block. While your application runs, performance data is sent to the RevealCloud tool installed on your server over UDP on port 28344 in either 8 kB packets or at 15-second intervals, whichever comes first. RevealCloud in turn aggregates this data and transmits it to CopperEgg in 60-second intervals. This aggregation and transmission happens outside of your application code and has a negligible impact on your server performance.
50
58
 
51
59
  The auto-generated configuration script contains the default configuration values.
52
60
 
@@ -137,7 +145,18 @@ def generate_password(length=16)
137
145
  end
138
146
  ```
139
147
 
140
- ### Supported Databases
148
+ ## Viewing Your Performance Data
149
+
150
+ Once your application starts, it will take a few minutes before performance data appears in the CopperEgg UI. To view this data, log into your account and navigate to the `Apps` tag. You will see the name of your App listed in the sidebar to the left.
151
+
152
+ ![CopperEgg App Screenshot](/screenshot02.png "CopperEgg App Screenshot")
153
+
154
+ ## Supported Ruby Versions
155
+
156
+ + 1.8.7 (with the exception of automatic method benchmarking)
157
+ + 1.9+
158
+
159
+ ## Supported Databases
141
160
 
142
161
  Database query benchmarking is supported for the following engines:
143
162
 
@@ -145,7 +164,7 @@ Database query benchmarking is supported for the following engines:
145
164
  + PostgreSQL (via the pg gem)
146
165
  + SQLite (via the sqlite3 gem)
147
166
 
148
- ### Supported Gems For Benchmarking Outbound HTTP Requests
167
+ ## Supported Gems For Benchmarking Outbound HTTP Requests
149
168
 
150
169
  Outbound HTTP requests performed within your project will be benchmarked from any of the following sources:
151
170
 
Binary file
data/lib/copperegg/apm.rb CHANGED
@@ -24,4 +24,4 @@ end
24
24
  version
25
25
  ).each { |file| require "copperegg/apm/#{file}" }
26
26
 
27
- require 'copperegg/apm/engine' if defined?(::Rails::Engine)
27
+ require 'copperegg/apm/railtie' if defined?(::Rails::Railtie)
@@ -15,7 +15,8 @@ module CopperEgg
15
15
 
16
16
  def configure(&block)
17
17
  Configuration.configure(&block)
18
- @@payload_cache = { :version => GEM_VERSION,
18
+ @@payload_cache = { :ruby_version => ENV["RUBY_VERSION"],
19
+ :apm_gem_version => GEM_VERSION,
19
20
  :id => Configuration.instrument_key,
20
21
  :sql => Configuration.benchmark_sql?,
21
22
  :http => Configuration.benchmark_http?,
@@ -53,14 +54,8 @@ module CopperEgg
53
54
  def benchmarkable_methods
54
55
  return @@benchmarkable_methods if @@benchmarkable_methods.size > 0
55
56
 
56
- if defined?(::Rails) && Rails.respond_to?(:configuration)
57
- $LOAD_PATH.each do |path|
58
- v, $VERBOSE = $VERBOSE, nil
59
- if path.include?(Rails.configuration.root.to_s) && DO_NOT_INCLUDE_PATHS.detect {|part| path.include?("/#{part}")}.nil?
60
- Dir.glob("#{path}/**/*.rb").each {|f| ActiveSupport::Dependencies::Loadable.require_dependency f, ""}
61
- end
62
- $VERBOSE = v
63
- end
57
+ if defined?(::Rails) && Rails.respond_to?(:application) && Rails.application.respond_to?(:eager_load!)
58
+ Rails.application.eager_load!
64
59
  end
65
60
 
66
61
  ObjectSpace.each_object(Class) do |class_or_module|
@@ -211,6 +206,7 @@ module CopperEgg
211
206
  args.first.exception(args[1])
212
207
  end
213
208
  stacktrace = trim_stacktrace(caller)
209
+ return if stacktrace.length == 0
214
210
  parameters = {:error => "#{exception.class}|#{stacktrace.first}", :stacktrace => "#{exception.message}\n#{stacktrace.join("\n")}", :ts => Time.now.to_i}
215
211
  send_payload(parameters)
216
212
  end
@@ -1,6 +1,9 @@
1
+ require 'copperegg-apm'
2
+ require 'rails'
3
+
1
4
  module CopperEgg
2
5
  module APM
3
- class Engine < ::Rails::Engine
6
+ class Railtie < ::Rails::Railtie
4
7
  initializer "copperegg_apm.helpers" do
5
8
  ActiveSupport.on_load_all do
6
9
  helper CopperEgg::APM::Rum
@@ -1,5 +1,5 @@
1
1
  module CopperEgg
2
2
  module APM
3
- GEM_VERSION = '1.0.0.pre4'
3
+ GEM_VERSION = '1.0.0.pre5'
4
4
  end
5
5
  end
@@ -0,0 +1,65 @@
1
+ module CopperEgg
2
+ module APM
3
+ class BenchmarkMethodsTable
4
+ def benchmarkable_methods
5
+ @benchmarkable_methods ||= CopperEgg::APM.benchmarkable_methods.sort_by(&:display_name)
6
+ end
7
+
8
+ def excluded_methods
9
+ benchmarkable_methods.select {|method| method.excluded?}
10
+ end
11
+
12
+ def method_column_width
13
+ benchmarkable_methods.reduce(0) do |memo, method|
14
+ method.display_name.size > memo ? method.display_name.size : memo
15
+ end + column_padding
16
+ end
17
+
18
+ def source_filename_column_width
19
+ benchmarkable_methods.reduce(0) do |memo, method|
20
+ method.display_filename.size > memo ? method.display_filename.size : memo
21
+ end + column_padding
22
+ end
23
+
24
+ def column_padding
25
+ 2
26
+ end
27
+
28
+ def separator
29
+ "+" + "-"*(method_column_width+1) + "+" + "-"*(source_filename_column_width+1) + "+" + "--------------+"
30
+ end
31
+
32
+ def header_columns
33
+ "| Method" + " "*(method_column_width - 6).abs + "| Source Location" + " "*(source_filename_column_width - 15).abs + "| Benchmarked? |"
34
+ end
35
+
36
+ def method_columns(method)
37
+ "| #{method.display_name}" + " "*(method_column_width - method.display_name.size) + "| #{method.display_filename}" + " "*(source_filename_column_width - method.display_filename.size) + "| #{method.excluded? ? "NO " : "YES"} |"
38
+ end
39
+
40
+ def classes_count
41
+ benchmarkable_methods.map(&:owner).uniq!.size
42
+ end
43
+
44
+ def file_count
45
+ benchmarkable_methods.map(&:source_filename).uniq!.size
46
+ end
47
+
48
+ def print_table
49
+ if RUBY_VERSION < "1.9"
50
+ puts "Method benchmarking is not available in Ruby #{RUBY_VERSION}. It is only available in Ruby 1.9 or later."
51
+ elsif CopperEgg::APM::Configuration.benchmark_methods_level == :disabled
52
+ puts "Method benchmarking is disabled. You can enable method benchmarking by setting the benchmark_methods configuration value."
53
+ elsif benchmarkable_methods.size == 0
54
+ puts "No methods benchmarked"
55
+ else
56
+ puts
57
+ puts "#{separator}\n#{header_columns}\n#{separator}\n#{benchmarkable_methods.map {|method| method_columns(method)}.join("\n")}\n#{separator}"
58
+ puts "#{benchmarkable_methods.size} methods defined in #{classes_count} classes across #{file_count} files. #{benchmarkable_methods.size - excluded_methods.size == 1 ? "1 method" : "#{benchmarkable_methods.size - excluded_methods.size} methods"} benchmarked."
59
+ puts
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,19 @@
1
+ module CopperEgg
2
+ module APM
3
+ class RevealCloud
4
+
5
+ def self.installed?
6
+ end
7
+
8
+ def self.api_url
9
+ end
10
+
11
+ def self.api_key
12
+ end
13
+
14
+ def self.supports_instrumentation?
15
+ end
16
+
17
+ end
18
+ end
19
+ end
data/screenshot02.png ADDED
Binary file
data/spec/apm_spec.rb CHANGED
@@ -26,7 +26,8 @@ describe CopperEgg::APM do
26
26
  it "should send a payload with version and configuration settings" do
27
27
  Socket.any_instance.should_receive(:send) do |payload_cache, flag|
28
28
  hash = JSON.parse(payload_cache)
29
- expect(hash["version"]).to eq CopperEgg::APM::GEM_VERSION
29
+ expect(hash.has_key?("ruby_version")).to be_true
30
+ expect(hash["apm_gem_version"]).to eq CopperEgg::APM::GEM_VERSION
30
31
  expect(hash["id"]).to match(/\A[0-1a-z]{16}\z/i)
31
32
  expect(hash["sql"]).to eq true
32
33
  expect(hash["http"]).to eq true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: copperegg-apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre4
4
+ version: 1.0.0.pre5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Bradford
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-31 00:00:00.000000000 Z
11
+ date: 2013-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -198,7 +198,6 @@ files:
198
198
  - ./lib/copperegg/apm/benchmark.rb
199
199
  - ./lib/copperegg/apm/benchmark_methods_table.rb
200
200
  - ./lib/copperegg/apm/configuration.rb
201
- - ./lib/copperegg/apm/engine.rb
202
201
  - ./lib/copperegg/apm/errors.rb
203
202
  - ./lib/copperegg/apm/ethon/easy/operations.rb
204
203
  - ./lib/copperegg/apm/kernel.rb
@@ -206,6 +205,7 @@ files:
206
205
  - ./lib/copperegg/apm/mysql2/client.rb
207
206
  - ./lib/copperegg/apm/net/http.rb
208
207
  - ./lib/copperegg/apm/pg/connection.rb
208
+ - ./lib/copperegg/apm/railtie.rb
209
209
  - ./lib/copperegg/apm/restclient/request.rb
210
210
  - ./lib/copperegg/apm/rum.rb
211
211
  - ./lib/copperegg/apm/sqlite3/database.rb
@@ -217,10 +217,13 @@ files:
217
217
  - ./lib/copperegg-apm.rb
218
218
  - ./lib/generators/copperegg/apm/init_generator.rb
219
219
  - ./lib/generators/copperegg/apm/templates/config.rb
220
+ - ./lib/helpers/benchmark_methods_table.rb
221
+ - ./lib/helpers/reveal_cloud.rb
220
222
  - ./performance/mysql2.rb
221
223
  - ./Rakefile
222
224
  - ./README.md
223
225
  - ./screenshot01.png
226
+ - ./screenshot02.png
224
227
  - ./spec/action_controller_spec.rb
225
228
  - ./spec/apm_spec.rb
226
229
  - ./spec/ethon_spec.rb
@@ -291,7 +294,7 @@ rubyforge_project:
291
294
  rubygems_version: 2.0.3
292
295
  signing_key:
293
296
  specification_version: 4
294
- summary: copperegg-apm-1.0.0.pre4
297
+ summary: copperegg-apm-1.0.0.pre5
295
298
  test_files:
296
299
  - spec/action_controller_spec.rb
297
300
  - spec/apm_spec.rb