rnotifier 0.0.6 → 0.0.8
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 +7 -0
- data/Gemfile +1 -3
- data/LICENSE.txt +22 -0
- data/README.md +24 -33
- data/Rakefile +0 -1
- data/bin/rnotifier +38 -0
- data/lib/generators/rnotifier/rnotifier_generator.rb +0 -3
- data/lib/generators/rnotifier/templates/initializer.rb +0 -2
- data/lib/rnotifier/config.rb +85 -0
- data/lib/rnotifier/exception_code.rb +31 -0
- data/lib/rnotifier/exception_data.rb +98 -0
- data/lib/rnotifier/notifier.rb +16 -50
- data/lib/rnotifier/parameter_filter.rb +78 -0
- data/lib/rnotifier/rack_middleware.rb +26 -0
- data/lib/rnotifier/railtie.rb +21 -0
- data/lib/rnotifier/rlogger.rb +20 -18
- data/lib/rnotifier/version.rb +1 -1
- data/lib/rnotifier.rb +49 -11
- data/rnotifier.gemspec +25 -16
- data/spec/code.text +18 -0
- data/spec/config_spec.rb +60 -0
- data/spec/exception_code_spec.rb +48 -0
- data/spec/exception_data_spec.rb +60 -0
- data/spec/fixtures/fake_app.rb +21 -0
- data/spec/fixtures/rnotifier.yaml +2 -0
- data/spec/fixtures/rnotifier_test.yaml +2 -0
- data/spec/rack_middleware_spec.rb +22 -0
- data/spec/spec_helper.rb +59 -0
- metadata +152 -69
- data/LICENSE +0 -21
- data/lib/rnotifier/configuration.rb +0 -51
- data/lib/rnotifier/email_notifier.rb +0 -19
- data/lib/rnotifier/rails_exception.rb +0 -48
- data/lib/rnotifier/util.rb +0 -29
- data/lib/rnotifier/views/email_notifier/exception_notify.html.erb +0 -29
@@ -1,51 +0,0 @@
|
|
1
|
-
module Rnotifier
|
2
|
-
class Configuration
|
3
|
-
DEFAULT_CONFIG = {
|
4
|
-
:api_host => 'http://rnotifier.com/notify/api/v1',
|
5
|
-
:validate_path => 'validate',
|
6
|
-
:notify_path => 'exception'
|
7
|
-
}
|
8
|
-
|
9
|
-
FILTER_PARAMS = ['password', 'password_confirmation']
|
10
|
-
|
11
|
-
class << self
|
12
|
-
attr_accessor :api_key
|
13
|
-
attr_accessor :client_ip
|
14
|
-
attr_accessor :client_host_name
|
15
|
-
attr_accessor :is_valid
|
16
|
-
attr_accessor :filter_params
|
17
|
-
attr_accessor :notification_server
|
18
|
-
attr_accessor :exception_recipients
|
19
|
-
|
20
|
-
def [](key)
|
21
|
-
DEFAULT_CONFIG[key] || send(key)
|
22
|
-
end
|
23
|
-
|
24
|
-
def validate_config
|
25
|
-
|
26
|
-
unless self.notification_server
|
27
|
-
self.notification_server = DEFAULT_CONFIG[:api_host]
|
28
|
-
else
|
29
|
-
self.notification_server += '/notify/api/v1'
|
30
|
-
end
|
31
|
-
|
32
|
-
=begin
|
33
|
-
if self.api_key
|
34
|
-
response = Util.get(self[:validate_path])
|
35
|
-
self.is_valid = true if response['valid_api_key']
|
36
|
-
else
|
37
|
-
Rlogger.error('[CONFIG] Check your config API key is not define.')
|
38
|
-
end
|
39
|
-
|
40
|
-
unless self.is_valid
|
41
|
-
Rlogger.error('[CONFIG] Invalid API KEY. Please check it.')
|
42
|
-
else
|
43
|
-
Rlogger.info('[CONFIG] API key is valid.')
|
44
|
-
end
|
45
|
-
=end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Rnotifier
|
2
|
-
class EmailNotifier < ActionMailer::Base
|
3
|
-
default :from => 'Rnotifier Exception<exception@rnotifier.in>'
|
4
|
-
self.mailer_name = 'email_notifier'
|
5
|
-
self.append_view_path "#{File.dirname(__FILE__)}/views"
|
6
|
-
|
7
|
-
def exception_notify(exception)
|
8
|
-
@exception = exception
|
9
|
-
@project_name = Rails.application.class.to_s.sub('::Application', '')
|
10
|
-
|
11
|
-
emails = Configuration.exception_recipients
|
12
|
-
subject = "[RNOTIFIER][#{@project_name}##{@exception[:environment]}] #{@exception[:message]}"
|
13
|
-
|
14
|
-
mail(:to => emails, :subject => subject) do |format|
|
15
|
-
format.html { render "#{mailer_name}/exception_notify" }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
module Rnotifier
|
2
|
-
module RailsException
|
3
|
-
module Catcher
|
4
|
-
|
5
|
-
def self.included(base)
|
6
|
-
base.send(:alias_method, :render_exception_without_rnotifier, :render_exception)
|
7
|
-
base.send(:alias_method, :render_exception, :render_exception_with_rnotifier)
|
8
|
-
end
|
9
|
-
|
10
|
-
private
|
11
|
-
def render_exception_with_rnotifier(env,exception)
|
12
|
-
request = ActionDispatch::Request.new(env)
|
13
|
-
unless (@consider_all_requests_local || request.local?)
|
14
|
-
exception_data = {
|
15
|
-
:url => request.url,
|
16
|
-
:params => request.params,
|
17
|
-
:session => request.session,
|
18
|
-
:ip => request.ip,
|
19
|
-
:http_method => request.method,
|
20
|
-
:status_code => status_code(exception),
|
21
|
-
:class_name => exception.class.to_s,
|
22
|
-
:message => exception.message,
|
23
|
-
:exception_line => Rails.backtrace_cleaner.clean(exception.backtrace, :silent).first,
|
24
|
-
:backtrace => Rails.backtrace_cleaner.clean(exception.backtrace, nil),
|
25
|
-
:environment => Rails.env.capitalize,
|
26
|
-
:user_agent => request.user_agent
|
27
|
-
}
|
28
|
-
|
29
|
-
exception_data[:session].delete('session_id')
|
30
|
-
exception_data[:exception_hash] = Digest::MD5.hexdigest("#{exception_data[:message].gsub(/#<\w*:\w*>/, '')}#{exception_data[:exception_line]}")
|
31
|
-
exception_data[:env_variables] = Util.request_env(request.filtered_env)
|
32
|
-
|
33
|
-
Notifier.send_exception(exception_data)
|
34
|
-
end
|
35
|
-
|
36
|
-
render_exception_without_rnotifier(env, exception)
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.initialize
|
42
|
-
if defined?(ActionDispatch::ShowExceptions)
|
43
|
-
Configuration.filter_params = Rails.application.config.filter_parameters.uniq
|
44
|
-
ActionDispatch::ShowExceptions.send(:include, Rnotifier::RailsException::Catcher)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/lib/rnotifier/util.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
module Rnotifier
|
2
|
-
class Util
|
3
|
-
class << self
|
4
|
-
def post(path, data = {})
|
5
|
-
url = URI.parse(Configuration.notification_server)
|
6
|
-
post = Net::HTTP::Post.new("#{url.path}/#{path}/#{Configuration[:api_key]}",{'Content-Type' =>'application/json'})
|
7
|
-
|
8
|
-
http = Net::HTTP.new(url.host, url.port)
|
9
|
-
http.use_ssl = true if url.port == 443
|
10
|
-
JSON.parse(http.request(post, data.to_json).body)
|
11
|
-
end
|
12
|
-
|
13
|
-
def get(path, params = {})
|
14
|
-
url = "#{Configuration.notification_server}/#{path}/#{Configuration[:api_key]}"
|
15
|
-
JSON.parse(Net::HTTP.get(URI.parse(url)))
|
16
|
-
end
|
17
|
-
|
18
|
-
def request_env(env)
|
19
|
-
env_hash = env.reject{|k,v| k.include?('action') || k.include?('rack')}
|
20
|
-
env_hash.delete('HTTP_COOKIE')
|
21
|
-
env_hash['HOSTNAME'] = Socket.gethostname
|
22
|
-
|
23
|
-
env_hash.to_json
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
|
5
|
-
</head>
|
6
|
-
<body style='color:#333;font-size:14px;margin-top:30px;'>
|
7
|
-
<span style='font-size:15px;'>
|
8
|
-
<strong style='margin-right:45px;'>Project</strong> : <%= @project_name %>
|
9
|
-
<br/>
|
10
|
-
<strong style='margin-right:5px;'>Environment</strong> : <%= @exception[:environment] %>
|
11
|
-
</span>
|
12
|
-
<div style='border:2px solid #FBC7C6;padding:10px 15px;margin-top:20px;'>
|
13
|
-
<p style='font-weight:bold'>
|
14
|
-
Exception: <%= @exception[:message] %>
|
15
|
-
</p>
|
16
|
-
<p>
|
17
|
-
<strong>Action : </strong><%= "#{@exception[:params][:controller]}##{@exception[:params][:action]}" %>
|
18
|
-
</p>
|
19
|
-
<p>
|
20
|
-
<strong>Exception Line : </strong><%= @exception[:exception_line] %>
|
21
|
-
</p>
|
22
|
-
<p>
|
23
|
-
<strong>Occurred at : </strong><%= @exception[:occurred_at] %> </p>
|
24
|
-
<p>
|
25
|
-
<strong>Request Url : </strong><%= "#{@exception[:http_method]} #{@exception[:url]}" %>
|
26
|
-
</p>
|
27
|
-
</div>
|
28
|
-
</body>
|
29
|
-
</html>
|