ramon 0.3.3 → 0.4.0

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.
@@ -1,28 +1,71 @@
1
1
  def require_local(file)
2
- require File.join(File.dirname(__FILE__), 'ramon', file)
2
+ require File.join(File.dirname(__FILE__), "ramon", file)
3
3
  end
4
4
 
5
- require_local "version"
6
- require_local "log_factory"
7
- require_local "remote"
8
- require_local "catcher"
5
+ require_local "version"
6
+ require_local "sender"
7
+ require_local "configuration"
8
+ require_local "catcher"
9
9
  require_local "exception_data"
10
10
  require_local "controller_exception_data"
11
11
  require_local "enviroment_data"
12
12
 
13
- require_local 'integration/rails' if defined?(Rails)
14
- require_local 'railtie' if defined?(Rails)
13
+ require_local "integration/rails" if defined?(Rails)
14
+ require_local "railtie" if defined?(Rails)
15
15
 
16
16
  module Ramon
17
17
 
18
- def self.log(message, tags=nil)
19
- log_hash = Log.log(message, tags)
20
- Remote.post('log', log_hash)
21
- end
18
+ class << self
22
19
 
23
- def self.post(type, data)
24
- Remote.post(type, data)
25
- end
20
+ # The sender object is responsible for delivering formatted data to the Amon server.
21
+ attr_accessor :sender
26
22
 
27
- end
23
+ # Ramon configuration object. Must act like a hash and return sensible
24
+ # values for all configuration options.
25
+ attr_writer :configuration
26
+
27
+ # Call this method to modify defaults in your initializers.
28
+ #
29
+ # @example
30
+ # Ramon.configure do |config|
31
+ # config.app_key = '1234567890abcdef'
32
+ # config.host = 'http://127.0.0.1'
33
+ # config.port = 2464
34
+ # end
35
+ def configure()
36
+ yield(configuration)
37
+ self.sender = Sender.new(configuration)
38
+ self.sender
39
+ end
40
+
41
+ # The configuration object.
42
+ # @see Ramon.configure
43
+ def configuration
44
+ @configuration ||= Configuration.new
45
+ end
46
+
47
+
48
+ # Look for the Rails logger currently defined
49
+ def logger
50
+ self.configuration.logger
51
+ end
52
+
53
+ def format_log(message, tags=nil)
54
+ tags ||= 'notset'
55
+ log = {"message" => message, "tags" => tags}
56
+ log
57
+ end
58
+
59
+ def log(message, tags=nil)
60
+ log = format_log(message, tags)
61
+ sender.post('log', log)
62
+ end
63
+
64
+ def post(type, data)
65
+ sender.post(type, data)
66
+ end
67
+
68
+ end # self end
69
+
70
+ end # module end
28
71
 
@@ -1,22 +1,22 @@
1
1
  module Ramon
2
- class Catcher
3
- class << self
4
-
5
- def handle_with_controller(exception, controller=nil, request=nil)
6
- data = ControllerExceptionData.new(exception, controller, request)
7
- Ramon.post('exception', data)
8
- end
9
-
10
- def handle_with_rack(exception, environment, request)
11
- data = RackExceptionData.new(exception, environment, request)
12
- Ramon.post('exception', data)
13
- end
2
+ class Catcher
3
+ class << self
14
4
 
15
- def handle(exception, name=nil)
16
- data = ExceptionData.new(exception, name)
17
- Ramon.post('exception', data)
18
- end
5
+ def handle_with_controller(exception, controller=nil, request=nil)
6
+ data = ControllerExceptionData.new(exception, controller, request)
7
+ Ramon.post('exception', data)
8
+ end
19
9
 
20
- end
21
- end # class end
10
+ def handle_with_rack(exception, environment, request)
11
+ data = RackExceptionData.new(exception, environment, request)
12
+ Ramon.post('exception', data)
13
+ end
14
+
15
+ def handle(exception, name=nil)
16
+ data = ExceptionData.new(exception, name)
17
+ Ramon.post('exception', data)
18
+ end
19
+
20
+ end
21
+ end # class end
22
22
  end # module end
@@ -0,0 +1,63 @@
1
+ module Ramon
2
+ class Configuration
3
+ class ConfigurationException < StandardError; end
4
+ OPTIONS = [:app_key, :host, :port, :secret,
5
+ :environment_name, :framework, :project_root].freeze
6
+
7
+ # The Aplication key. Only in Amon Plus.
8
+ attr_accessor :app_key
9
+
10
+ # Secret key, used for securely logging in the normal Amon version
11
+ attr_accessor :secret
12
+
13
+ # The host to connect to (defaults to 127.0.0.1).
14
+ attr_accessor :host
15
+
16
+ # The port on which your Amon instance runs. Defaults to 2464
17
+ attr_accessor :port
18
+
19
+ # The name of the environment the application is running in
20
+ attr_accessor :environment_name
21
+
22
+ # The path to the project in which the error occurred, such as the RAILS_ROOT
23
+ attr_accessor :project_root
24
+
25
+ # The framework Ramon is configured to use
26
+ attr_accessor :framework
27
+
28
+ # The logger used by Amon
29
+ attr_accessor :logger
30
+
31
+ def initialize
32
+ @host = 'http://127.0.0.1'
33
+ @port = 2464
34
+ @app_key = ''
35
+ @secret = ''
36
+ @framework = 'Standalone'
37
+ end
38
+
39
+
40
+ # Allows config options to be read like a hash
41
+ #
42
+ # @param [Symbol] option Key for a given attribute
43
+ def [](option)
44
+ send(option)
45
+ end
46
+
47
+ # Returns a hash of all configurable options
48
+ def to_hash
49
+ OPTIONS.inject({}) do |hash, option|
50
+ hash.merge(option.to_sym => send(option))
51
+ end
52
+ end
53
+
54
+ # Returns a hash of all configurable options merged with +hash+
55
+ #
56
+ # @param [Hash] hash A set of configuration options that will take precedence over the defaults
57
+ def merge(hash)
58
+ to_hash.merge(hash)
59
+ end
60
+
61
+
62
+ end # Class end
63
+ end # Module end
@@ -1,59 +1,59 @@
1
1
  require 'digest/md5'
2
2
 
3
3
  module Ramon
4
- class ControllerExceptionData < ExceptionData
5
- def initialize(exception, controller=nil, request=nil)
6
- super(exception)
7
- @request = request
8
- @controller = controller
9
- end
4
+ class ControllerExceptionData < ExceptionData
5
+ def initialize(exception, controller=nil, request=nil)
6
+ super(exception)
7
+ @request = request
8
+ @controller = controller
9
+ end
10
10
 
11
- def framework
12
- "rails"
13
- end
11
+ def framework
12
+ "rails"
13
+ end
14
14
 
15
- def additional_data
16
- return {} if @request.nil?
17
- {
18
- 'request' => {
19
- 'url' => (@request.respond_to?(:url) ? @request.url : "#{@request.protocol}#{@request.host}#{@request.request_uri}"),
20
- 'controller' => @controller.class.to_s,
21
- 'action' => (@request.respond_to?(:parameters) ? @request.parameters['action'] : @request.params['action']),
22
- 'parameters' => filter_paramaters(@request.respond_to?(:parameters) ? @request.parameters : @request.params),
23
- 'request_method' => @request.request_method.to_s,
24
- 'remote_ip' => (@request.respond_to?(:remote_ip) ? @request.remote_ip : @request.ip),
25
- #'headers' => extract_http_headers(@request.env),
26
- 'session' => self.class.sanitize_session(@request)
27
- }
28
- }
29
- end
15
+ def additional_data
16
+ return {} if @request.nil?
17
+ {
18
+ 'request' => {
19
+ 'url' => (@request.respond_to?(:url) ? @request.url : "#{@request.protocol}#{@request.host}#{@request.request_uri}"),
20
+ 'controller' => @controller.class.to_s,
21
+ 'action' => (@request.respond_to?(:parameters) ? @request.parameters['action'] : @request.params['action']),
22
+ 'parameters' => filter_paramaters(@request.respond_to?(:parameters) ? @request.parameters : @request.params),
23
+ 'request_method' => @request.request_method.to_s,
24
+ 'remote_ip' => (@request.respond_to?(:remote_ip) ? @request.remote_ip : @request.ip),
25
+ #'headers' => extract_http_headers(@request.env),
26
+ 'session' => self.class.sanitize_session(@request)
27
+ }
28
+ }
29
+ end
30
30
 
31
- def filter_hash(keys_to_filter, hash)
32
- if keys_to_filter.is_a?(Array) && !keys_to_filter.empty?
33
- hash.each do |key, value|
34
- if value.respond_to?(:to_hash)
35
- filter_hash(keys_to_filter, hash[key])
36
- elsif key_match?(key, keys_to_filter)
37
- hash[key] = "[FILTERED]"
38
- end
39
- end
40
- end
41
- hash
42
- end
31
+ def filter_hash(keys_to_filter, hash)
32
+ if keys_to_filter.is_a?(Array) && !keys_to_filter.empty?
33
+ hash.each do |key, value|
34
+ if value.respond_to?(:to_hash)
35
+ filter_hash(keys_to_filter, hash[key])
36
+ elsif key_match?(key, keys_to_filter)
37
+ hash[key] = "[FILTERED]"
38
+ end
39
+ end
40
+ end
41
+ hash
42
+ end
43
43
 
44
- def key_match?(key, keys_to_filter)
45
- keys_to_filter.map {|k| k.to_s}.include?(key.to_s)
46
- end
44
+ def key_match?(key, keys_to_filter)
45
+ keys_to_filter.map {|k| k.to_s}.include?(key.to_s)
46
+ end
47
47
 
48
- def filter_paramaters(hash)
49
- if @request.respond_to?(:env) && @request.env["action_dispatch.parameter_filter"]
50
- filter_hash(@request.env["action_dispatch.parameter_filter"], hash)
51
- elsif @controller.respond_to?(:filter_parameters)
52
- @controller.send(:filter_parameters, hash)
53
- else
54
- hash
55
- end
56
- end
48
+ def filter_paramaters(hash)
49
+ if @request.respond_to?(:env) && @request.env["action_dispatch.parameter_filter"]
50
+ filter_hash(@request.env["action_dispatch.parameter_filter"], hash)
51
+ elsif @controller.respond_to?(:filter_parameters)
52
+ @controller.send(:filter_parameters, hash)
53
+ else
54
+ hash
55
+ end
56
+ end
57
57
 
58
- end # class end
58
+ end # class end
59
59
  end # module end
@@ -1,37 +1,37 @@
1
1
  require 'digest/md5'
2
2
 
3
3
  module Ramon
4
- class ApplicationEnvironment
5
- def self.to_hash(framework)
6
- {
7
- 'language' => 'ruby',
8
- 'language_version' => language_version_string,
9
- 'framework' => framework,
10
- #'libraries_loaded' => libraries_loaded
11
- }
12
- end
4
+ class ApplicationEnvironment
5
+ def self.to_hash(framework)
6
+ {
7
+ 'language' => 'ruby',
8
+ 'language_version' => language_version_string,
9
+ 'framework' => framework,
10
+ #'libraries_loaded' => libraries_loaded
11
+ }
12
+ end
13
13
 
14
-
15
- def self.get_hostname
16
- require 'socket' unless defined?(Socket)
17
- Socket.gethostname
18
- rescue
19
- 'UNKNOWN'
20
- end
21
14
 
22
- def self.language_version_string
23
- "#{RUBY_VERSION rescue '?.?.?'} p#{RUBY_PATCHLEVEL rescue '???'}
24
- #{RUBY_RELEASE_DATE rescue '????-??-??'} #{RUBY_PLATFORM rescue '????'}"
25
- end
15
+ def self.get_hostname
16
+ require 'socket' unless defined?(Socket)
17
+ Socket.gethostname
18
+ rescue
19
+ 'UNKNOWN'
20
+ end
26
21
 
22
+ def self.language_version_string
23
+ "#{RUBY_VERSION rescue '?.?.?'} p#{RUBY_PATCHLEVEL rescue '???'}
24
+ #{RUBY_RELEASE_DATE rescue '????-??-??'} #{RUBY_PLATFORM rescue '????'}"
25
+ end
27
26
 
28
- def self.libraries_loaded
29
- begin
30
- return Hash[*Gem.loaded_specs.map{|name, gem_specification| [name, gem_specification.version.to_s]}.flatten]
31
- rescue
32
- end
33
- {}
34
- end
35
27
 
36
- end # class end
28
+ def self.libraries_loaded
29
+ begin
30
+ return Hash[*Gem.loaded_specs.map{|name, gem_specification| [name, gem_specification.version.to_s]}.flatten]
31
+ rescue
32
+ end
33
+ {}
34
+ end
35
+
36
+ end # class end
37
37
  end # module end
@@ -1,99 +1,99 @@
1
1
  module Ramon
2
- class ExceptionData
3
-
4
- def initialize(exception, name=nil)
5
- @exception = exception
6
- @name = name
7
- end
8
-
9
- def to_hash
10
- hash = {}
11
- # We need the url before the main exception info
12
- hash['data'] = additional_data
13
-
14
- hash.merge!({
15
- 'exception_class' => @exception.class.to_s,
16
- 'message' => @exception.message,
17
- 'backtrace' => @exception.backtrace,
18
- 'url' => hash['data']['request']['url']
19
- })
20
-
21
- hash['data'].merge!(ApplicationEnvironment.to_hash(framework))
22
- hash['data'].merge!(context_stuff)
23
- hash['data'].merge!(extra_stuff)
24
- self.class.sanitize_hash(hash)
25
- end
26
-
27
- def extra_stuff
28
- if @name
29
- {'name' => @name}
30
- else
31
- {}
32
- end
33
- end
34
-
35
- def context_stuff
36
- context = Thread.current[:exceptional_context]
37
- (context.nil? || context.empty?) ? {} : {'context' => context}
38
- end
39
-
40
- def framework
41
- nil
42
- end
43
-
44
-
45
- def self.sanitize_hash(hash)
46
-
47
- case hash
48
- when Hash
49
- hash.inject({}) do |result, (key, value)|
50
- result.update(key => sanitize_hash(value))
51
- end
52
- when Array
53
- hash.collect{|value| sanitize_hash(value)}
54
- when Fixnum, String, Bignum
55
- hash
56
- else
57
- hash.to_s
58
- end
59
- rescue Exception => e
60
- {}
61
- end
62
-
63
- def extract_http_headers(env)
64
- headers = {}
65
- env.select{|k, v| k =~ /^HTTP_/}.each do |name, value|
66
- proper_name = name.sub(/^HTTP_/, '').split('_').map{|upper_case| upper_case.capitalize}.join('-')
67
- headers[proper_name] = value
68
- end
69
- unless headers['Cookie'].nil?
70
- headers['Cookie'] = headers['Cookie'].sub(/_session=\S+/, '_session=[FILTERED]')
71
- end
72
- headers
73
- end
74
-
75
- def self.sanitize_session(request)
76
-
77
- session_hash = {'session_id' => "", 'data' => {}}
78
-
79
- if request.respond_to?(:session)
80
-
81
- session = request.session
82
- session_hash['session_id'] = request.session_options ? request.session_options[:id] : nil
83
- session_hash['session_id'] ||= session.respond_to?(:session_id) ? session.session_id : session.instance_variable_get("@session_id")
84
- session_hash['data'] = session.respond_to?(:to_hash) ? session.to_hash : session.instance_variable_get("@data") || {}
85
- session_hash['session_id'] ||= session_hash['data'][:session_id]
86
- session_hash['data'].delete(:session_id)
87
- end
88
-
89
- # Don't return the session hash if there is nothing in it
90
- if session_hash['session_id'].nil? && session_hash['data'].empty?
91
- {}
92
- else
93
- self.sanitize_hash(session_hash)
94
- end
95
-
96
- end
97
-
98
- end # class end
2
+ class ExceptionData
3
+
4
+ def initialize(exception, name=nil)
5
+ @exception = exception
6
+ @name = name
7
+ end
8
+
9
+ def to_hash
10
+ hash = {}
11
+ # We need the url before the main exception info
12
+ hash['data'] = additional_data
13
+
14
+ hash.merge!({
15
+ 'exception_class' => @exception.class.to_s,
16
+ 'message' => @exception.message,
17
+ 'backtrace' => @exception.backtrace,
18
+ 'url' => hash['data']['request']['url']
19
+ })
20
+
21
+ hash['data'].merge!(ApplicationEnvironment.to_hash(framework))
22
+ hash['data'].merge!(context_stuff)
23
+ hash['data'].merge!(extra_stuff)
24
+ self.class.sanitize_hash(hash)
25
+ end
26
+
27
+ def extra_stuff
28
+ if @name
29
+ {'name' => @name}
30
+ else
31
+ {}
32
+ end
33
+ end
34
+
35
+ def context_stuff
36
+ context = Thread.current[:exceptional_context]
37
+ (context.nil? || context.empty?) ? {} : {'context' => context}
38
+ end
39
+
40
+ def framework
41
+ nil
42
+ end
43
+
44
+
45
+ def self.sanitize_hash(hash)
46
+
47
+ case hash
48
+ when Hash
49
+ hash.inject({}) do |result, (key, value)|
50
+ result.update(key => sanitize_hash(value))
51
+ end
52
+ when Array
53
+ hash.collect{|value| sanitize_hash(value)}
54
+ when Fixnum, String, Bignum
55
+ hash
56
+ else
57
+ hash.to_s
58
+ end
59
+ rescue Exception => e
60
+ {}
61
+ end
62
+
63
+ def extract_http_headers(env)
64
+ headers = {}
65
+ env.select{|k, v| k =~ /^HTTP_/}.each do |name, value|
66
+ proper_name = name.sub(/^HTTP_/, '').split('_').map{|upper_case| upper_case.capitalize}.join('-')
67
+ headers[proper_name] = value
68
+ end
69
+ unless headers['Cookie'].nil?
70
+ headers['Cookie'] = headers['Cookie'].sub(/_session=\S+/, '_session=[FILTERED]')
71
+ end
72
+ headers
73
+ end
74
+
75
+ def self.sanitize_session(request)
76
+
77
+ session_hash = {'session_id' => "", 'data' => {}}
78
+
79
+ if request.respond_to?(:session)
80
+
81
+ session = request.session
82
+ session_hash['session_id'] = request.session_options ? request.session_options[:id] : nil
83
+ session_hash['session_id'] ||= session.respond_to?(:session_id) ? session.session_id : session.instance_variable_get("@session_id")
84
+ session_hash['data'] = session.respond_to?(:to_hash) ? session.to_hash : session.instance_variable_get("@data") || {}
85
+ session_hash['session_id'] ||= session_hash['data'][:session_id]
86
+ session_hash['data'].delete(:session_id)
87
+ end
88
+
89
+ # Don't return the session hash if there is nothing in it
90
+ if session_hash['session_id'].nil? && session_hash['data'].empty?
91
+ {}
92
+ else
93
+ self.sanitize_hash(session_hash)
94
+ end
95
+
96
+ end
97
+
98
+ end # class end
99
99
  end # module end
@@ -6,6 +6,17 @@ class Railtie < Rails::Railtie
6
6
  initializer "amon.middleware" do |app|
7
7
  app.config.middleware.use "Rack::RailsAmonException"
8
8
  end
9
- end
10
- end
9
+
10
+
11
+ config.after_initialize do
12
+ Ramon.configure do |config|
13
+ config.logger ||= ::Rails.logger
14
+ config.environment_name ||= ::Rails.env
15
+ config.project_root ||= ::Rails.root
16
+ config.framework = "Rails: #{::Rails::VERSION::STRING}"
17
+ end
18
+ end
19
+
20
+ end # class end
21
+ end # module end
11
22
 
@@ -0,0 +1,65 @@
1
+ require 'net/http'
2
+ require 'json'
3
+ require 'zlib'
4
+
5
+ module Ramon
6
+ class Sender
7
+ def initialize(options = {})
8
+ [ :host,
9
+ :port,
10
+ :app_key,
11
+ :secret
12
+ ].each do |option|
13
+ instance_variable_set("@#{option}", options[option])
14
+ end
15
+ end
16
+
17
+
18
+ attr_reader :host,
19
+ :port,
20
+ :app_key,
21
+ :secret
22
+
23
+ def log(level, message)
24
+ logger.send level, '** Amon '+ message
25
+ end
26
+
27
+
28
+ def logger
29
+ Ramon.logger
30
+ end
31
+
32
+
33
+ def url
34
+ URI.parse("#{host}:#{port}/api/")
35
+ end
36
+
37
+ def post(type, data)
38
+
39
+ if type == 'log'
40
+ @url = "#{url}log/#{app_key}"
41
+ else
42
+ @url = "#{url}exception/#{app_key}"
43
+ end
44
+
45
+ request = Net::HTTP::Post.new(@url, initheader = {'Content-Type' =>'application/json'})
46
+ request.body = data.to_json
47
+
48
+ begin
49
+ response = Net::HTTP.new(url.host, url.port).start {|http| http.request(request) }
50
+ case response
51
+ when Net::HTTPSuccess
52
+ log :error, "#{@url} - #{response.message}"
53
+ return response
54
+ else
55
+ log :error, "#{@url} - #{response.code} - #{response.message}"
56
+ end
57
+ rescue Exception => e
58
+ log :error, "[Ramon::Sender#post] Cannot send data to #{@url} Error: #{e.class} - #{e.message}"
59
+ nil
60
+ end
61
+
62
+ end
63
+
64
+ end # Class end
65
+ end # Module end
@@ -1,3 +1,3 @@
1
1
  module Ramon
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ module Ramon
4
+ describe Configuration do
5
+
6
+ it "should provide default values" do
7
+ config = Ramon::Configuration.new
8
+ config.port.should == 2464
9
+ config.host.should == 'http://127.0.0.1'
10
+ end
11
+
12
+ end
13
+ end # end module
@@ -1,40 +1,40 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Ramon
4
- describe Log do
4
+ describe "log" do
5
5
 
6
6
  it "should return a hash with tags - debug and message - test" do
7
- @log = Log.log('test', 'debug')
7
+ @log = Ramon.format_log('test', 'debug')
8
8
  @log.should == {"tags" => "debug", "message" => "test"}
9
9
  end
10
10
 
11
11
  it "should return a hash with tags - info and message - test" do
12
- @log = Log.log('test', 'info')
12
+ @log = Ramon.format_log('test', 'info')
13
13
  @log.should == {"tags" => "info", "message" => "test"}
14
14
  end
15
15
 
16
16
  it "should return a hash with tags - notset and message - test" do
17
- @log = Log.log('test')
17
+ @log = Ramon.format_log('test')
18
18
  @log.should == {"tags" => "notset", "message" => "test"}
19
19
  end
20
20
 
21
21
  it "should return a hash with tags - notset and a message hash" do
22
- @log = Log.log({:test => "test value", :more => "even more value"})
22
+ @log = Ramon.format_log({:test => "test value", :more => "even more value"})
23
23
  @log.should == {"tags" => "notset", "message"=>{:more=>"even more value", :test=>"test value"}}
24
24
  end
25
25
 
26
26
  it "should return a hash with tags - debug and a message hash" do
27
- @log = Log.log({:test => "test value", :more => "even more value"},'debug')
27
+ @log = Ramon.format_log({:test => "test value", :more => "even more value"},'debug')
28
28
  @log.should == {"tags" => "debug", "message"=>{:more=>"even more value", :test=>"test value"}}
29
29
  end
30
30
 
31
31
  it "should return a hash with tags - notset and a message array" do
32
- @log = Log.log([1,2,3,4])
32
+ @log = Ramon.format_log([1,2,3,4])
33
33
  @log.should == {"tags" => "notset", "message"=>[1,2,3,4]}
34
34
  end
35
35
 
36
36
  it "should return an array with tags - debug, benchmark and a message string" do
37
- @log = Log.log("test", ["debug", "benchmark"])
37
+ @log = Ramon.format_log("test", ["debug", "benchmark"])
38
38
  @log.should == {"tags" => ["debug", "benchmark"], "message"=>"test"}
39
39
  end
40
40
 
@@ -1,22 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
- # Works only when the Amon application is started
4
- describe 'Web app test' do
3
+ module Ramon
4
+ # Works only when the Amon application is started
5
+ describe 'Web app test' do
5
6
 
6
- it 'Test logging' do
7
- Ramon.log([1,2,3,4]).response.code.should == "200"
8
- Ramon.log({:test => 'data', :more_test => 'more_data'}).response.code.should == "200"
9
- end
10
-
11
- it 'Test logging with multiple tags' do
12
- Ramon.log("test", ['debug', 'benchmark']).response.code.should == "200"
13
- Ramon.log({:test => 'data', :more_test => 'more_data'}, ['info','warning','user']).response.code.should == "200"
14
- end
7
+ it 'Test logging' do
15
8
 
9
+ Ramon.configure do |config|
10
+ config.host = 'http://127.0.0.1'
11
+ config.port = 2464
12
+ end
13
+
14
+ Ramon.log([1,2,3,4]).response.code.should == "200"
15
+ Ramon.log({:test => 'data', :more_test => 'more_data'}).response.code.should == "200"
16
+ end
16
17
 
17
- it 'Test Exceptions' do
18
- Ramon.post('exception', {:url => 'test', :exception_class => 'test_me'}).response.code.should == "200"
19
- end
18
+ it 'Test logging with multiple tags' do
19
+ Ramon.log("test", ['debug', 'benchmark']).response.code.should == "200"
20
+ Ramon.log({:test => 'data', :more_test => 'more_data'}, ['info','warning','user']).response.code.should == "200"
21
+ end
20
22
 
21
- end
23
+
24
+ it 'Test Exceptions' do
25
+ Ramon.post('exception', {:url => 'test', :exception_class => 'test_me'}).response.code.should == "200"
26
+ end
27
+
28
+ end
29
+ end
22
30
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ramon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 3
10
- version: 0.3.3
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - martinrusev
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-03 00:00:00 +00:00
18
+ date: 2012-02-23 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -47,21 +47,19 @@ files:
47
47
  - Rakefile
48
48
  - lib/ramon.rb
49
49
  - lib/ramon/catcher.rb
50
- - lib/ramon/config.rb
50
+ - lib/ramon/configuration.rb
51
51
  - lib/ramon/controller_exception_data.rb
52
52
  - lib/ramon/enviroment_data.rb
53
53
  - lib/ramon/exception_data.rb
54
54
  - lib/ramon/integration/rails.rb
55
- - lib/ramon/log_factory.rb
56
55
  - lib/ramon/railtie.rb
57
- - lib/ramon/remote.rb
56
+ - lib/ramon/sender.rb
58
57
  - lib/ramon/version.rb
59
58
  - ramon.gemspec
60
59
  - spec/config_spec.rb
61
60
  - spec/exception_data_spec.rb
62
- - spec/logger_spec.rb
61
+ - spec/log_spec.rb
63
62
  - spec/rails_integration_spec.rb
64
- - spec/remote_spec.rb
65
63
  - spec/spec_helper.rb
66
64
  - spec/web_spec.rb
67
65
  has_rdoc: true
@@ -1,48 +0,0 @@
1
- require 'json'
2
-
3
- module Ramon
4
- class Config
5
- class ConfigurationException < StandardError; end
6
-
7
- class << self
8
- DEFAULTS = {
9
- :host => '127.0.0.1',
10
- :port => 2464
11
- }
12
-
13
- def load
14
- config_file ||= "/etc/amon.conf"
15
-
16
- if File.file?(config_file)
17
- begin
18
- f = File.read(config_file)
19
- config = JSON.parse(f)
20
-
21
- @app_key = config['application_key'] unless config['application_key'].nil?
22
- @port = config['web_app']['port'].to_i unless config['web_app']['port'].nil?
23
- @host = config['web_app']['host'].to_s unless config['web_app']['host'].nil?
24
-
25
- rescue Exception => e
26
- raise ConfigurationException.new("Unable to load configuration file: #{config_file}")
27
- end
28
- else
29
- puts "Amon::Config.load - /etc/amon.conf not found"
30
- end
31
- end
32
-
33
- def application_root
34
- (defined?(Rails) && Rails.respond_to?(:root)) ? Rails.root : Dir.pwd
35
- end
36
-
37
- def port
38
- @port ||= DEFAULTS[:port]
39
- end
40
-
41
- def host
42
- @host ||= DEFAULTS[:host]
43
- end
44
-
45
- end # self end
46
- load
47
- end # Config end
48
- end # Module end
@@ -1,46 +0,0 @@
1
- require 'logger'
2
- require 'date'
3
-
4
- module Ramon
5
- class Log
6
-
7
- def self.log(message, tags=nil)
8
- tags ||= 'notset'
9
- log = {"message" => message, "tags" => tags}
10
-
11
- log
12
- end
13
-
14
- end # class end
15
-
16
- # Used internally
17
- class LogFactory
18
-
19
- def self.log
20
- @logger ||= define_internal_logger
21
- end
22
-
23
- private
24
- def self.define_internal_logger
25
- log_dir = File.join(Config.application_root, 'log')
26
- Dir.mkdir(log_dir) unless File.directory?(log_dir)
27
- log_path = File.join(log_dir, "/ramon.log")
28
-
29
- log = Logger.new(log_path)
30
- log.level = Logger::INFO
31
-
32
- log.formatter = proc do |severity, datetime, progname, msg|
33
- "#{datetime}: #{msg} -- #{severity}\n"
34
- end
35
-
36
- log
37
- end
38
-
39
- end # class end
40
-
41
- end # module end
42
-
43
-
44
-
45
-
46
-
@@ -1,35 +0,0 @@
1
- require 'net/http'
2
- require 'json'
3
- require 'zlib'
4
- require "#{File.dirname(__FILE__)}/config"
5
-
6
- module Ramon
7
- class Remote
8
- def self.post(type, data)
9
-
10
- if type == 'log'
11
- @url = '/api/log'
12
- else
13
- @url = '/api/exception'
14
- end
15
-
16
- request = Net::HTTP::Post.new(@url, initheader = {'Content-Type' =>'application/json'})
17
- request.body = data.to_json
18
-
19
- begin
20
- response = Net::HTTP.new(Config::host, Config::port).start {|http| http.request(request) }
21
- case response
22
- when Net::HTTPSuccess
23
- LogFactory.log.info( "#{@url} - #{response.message}")
24
- return response
25
- else
26
- LogFactory.log.error("#{@url} - #{response.code} - #{response.message}")
27
- end
28
- rescue Exception => e
29
- LogFactory.log.error(e)
30
- end
31
-
32
- end
33
- end # class end
34
- end # module end
35
-
File without changes