Lipsiasoft-exception_notifier 1.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.
- data/MIT-LICENSE +20 -0
- data/README +57 -0
- data/Rakefile +63 -0
- data/generators/exception_notifier/REMEMBER +9 -0
- data/generators/exception_notifier/exception_notifier_generator.rb +37 -0
- data/generators/exception_notifier/templates/exception_notifier.rb +6 -0
- data/generators/exception_notifier/templates/views/404.html.erb +4 -0
- data/generators/exception_notifier/templates/views/404.html.haml +5 -0
- data/generators/exception_notifier/templates/views/422.html.erb +4 -0
- data/generators/exception_notifier/templates/views/422.html.haml +3 -0
- data/generators/exception_notifier/templates/views/500.html.erb +7 -0
- data/generators/exception_notifier/templates/views/500.html.haml +8 -0
- data/init.rb +1 -0
- data/lib/controller/rescue.rb +41 -0
- data/lib/exception_notifier.rb +6 -0
- data/lib/mailer/exception/exception.html.erb +11 -0
- data/lib/mailer/exception_notifier.rb +38 -0
- data/test/exception_notifier_test.rb +8 -0
- data/test/test_helper.rb +3 -0
- metadata +77 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 [name of plugin creator]
|
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
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
ExceptionNotifier
|
2
|
+
=================
|
3
|
+
|
4
|
+
This plugin are raised when an exception fire up in controllers.
|
5
|
+
Now you can personalize exception and simplify the layout using templates
|
6
|
+
in app/views/exception
|
7
|
+
when an exception is raised it try to send an email, and for send an email
|
8
|
+
you need to configure in enviroment.
|
9
|
+
|
10
|
+
For test layouts and mailing do this:
|
11
|
+
|
12
|
+
Edit enviroments/development.rb
|
13
|
+
|
14
|
+
config.action_controller.consider_all_requests_local = false
|
15
|
+
|
16
|
+
Then in your browser open 192.168.1.3 where 192.168.1.3 is your lan ip.
|
17
|
+
|
18
|
+
Remember that if you use 127.0.0.1 Rails don't raise "production" errors.
|
19
|
+
|
20
|
+
Installation
|
21
|
+
============
|
22
|
+
|
23
|
+
Rails::Initializer.run do |config|
|
24
|
+
config.gem 'mislav-will_paginate', :version => '~> 2.2.3', :lib => 'will_paginate',
|
25
|
+
:source => 'http://gems.github.com'
|
26
|
+
end
|
27
|
+
|
28
|
+
Example
|
29
|
+
=======
|
30
|
+
|
31
|
+
script/generate exception_notifier [--haml-template]
|
32
|
+
|
33
|
+
Personalize yours app/views/exceptions/ templates
|
34
|
+
|
35
|
+
Remember that they use the layout of the controller where the exception is raised
|
36
|
+
|
37
|
+
Then in /config/initializers/exception_notifier.rb
|
38
|
+
|
39
|
+
Lipsiadmin::Mailer::ExceptionNotifier.sender_address = %("Exception Notifier" <server1@lipsiasoft.com>)
|
40
|
+
Lipsiadmin::Mailer::ExceptionNotifier.recipients_addresses = %(info@lipsiasoft.com)
|
41
|
+
Lipsiadmin::Mailer::ExceptionNotifier.email_prefix = "[Your Progect]"
|
42
|
+
|
43
|
+
|
44
|
+
Redmine
|
45
|
+
=======
|
46
|
+
|
47
|
+
This plugins is useful for redmine, if you have set the mail handler
|
48
|
+
http://www.redmine.org/wiki/redmine/RedmineReceivingEmails
|
49
|
+
|
50
|
+
you need to set the inizializers/exception_notifier.rb like this
|
51
|
+
|
52
|
+
Lipsiadmin::Mailer::ExceptionNotifier.sender_address = %("Exception Notifier" <server1@lipsiasoft.com>)
|
53
|
+
Lipsiadmin::Mailer::ExceptionNotifier.recipients_addresses = %(info@lipsiasoft.com)
|
54
|
+
Lipsiadmin::Mailer::ExceptionNotifier.email_prefix = "[Your Project]"
|
55
|
+
Lipsiadmin::Mailer::ExceptionNotifier.extra_options = { :project => "your-project-in-redmine", :tracker => "Bug", :priority => "Urgent" }
|
56
|
+
|
57
|
+
Copyright (c) 2009 Lipsiasoft s.r.l., released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'rake/packagetask'
|
5
|
+
require 'rake/gempackagetask'
|
6
|
+
|
7
|
+
PKG_NAME = 'exception_notifier'
|
8
|
+
PKG_VERSION = "1.0"
|
9
|
+
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
10
|
+
|
11
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
|
12
|
+
|
13
|
+
desc 'Default: install the gem.'
|
14
|
+
task :default => [:install]
|
15
|
+
|
16
|
+
desc 'Generate documentation for the paperclip plugin.'
|
17
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
18
|
+
rdoc.rdoc_dir = 'doc'
|
19
|
+
rdoc.title = 'Lipsiadmin Exception Notifier'
|
20
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
21
|
+
rdoc.rdoc_files.include('README*')
|
22
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'Clean up files.'
|
26
|
+
task :clean do |t|
|
27
|
+
FileUtils.rm_rf "doc"
|
28
|
+
FileUtils.rm_rf "tmp"
|
29
|
+
FileUtils.rm_rf "pkg"
|
30
|
+
end
|
31
|
+
|
32
|
+
spec = Gem::Specification.new do |s|
|
33
|
+
s.name = PKG_NAME
|
34
|
+
s.version = PKG_VERSION
|
35
|
+
s.author = "Davide D'Agostino"
|
36
|
+
s.email = "d.dagostino@lipsiasoft.com"
|
37
|
+
s.homepage = "http://groups.google.com/group/lipsiadmin"
|
38
|
+
s.platform = Gem::Platform::RUBY
|
39
|
+
s.summary = "Extracted exception notifier of Lipsiadmin"
|
40
|
+
s.files = FileList["README", "MIT-LICENSE", "Rakefile", "init.rb", "{generators,lib,test}/**/*"].to_a
|
41
|
+
s.has_rdoc = true
|
42
|
+
s.requirements << 'none'
|
43
|
+
s.require_path = 'lib'
|
44
|
+
s.autorequire = 'exception_notifier'
|
45
|
+
end
|
46
|
+
|
47
|
+
Rake::GemPackageTask.new(spec) do |p|
|
48
|
+
p.gem_spec = spec
|
49
|
+
p.need_tar = true
|
50
|
+
p.need_zip = true
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "Install the gem locally"
|
54
|
+
task :install => [:repackage] do
|
55
|
+
sh %{sudo gem install pkg/#{PKG_FILE_NAME}.gem}
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "Generate a gemspec file for GitHub"
|
59
|
+
task :gemspec do
|
60
|
+
File.open("#{spec.name}.gemspec", 'w') do |f|
|
61
|
+
f.write spec.to_ruby
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class ExceptionNotifierGenerator < Rails::Generator::NamedBase
|
2
|
+
default_options :haml_templates => false
|
3
|
+
|
4
|
+
def initialize(runtime_args, runtime_options = {})
|
5
|
+
runtime_args = ["none"].concat(runtime_args) # Skip usage
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def manifest
|
10
|
+
template = options[:haml_templates] ? "haml" : "erb"
|
11
|
+
|
12
|
+
record do |m|
|
13
|
+
m.directory File.join('app/views', 'exceptions')
|
14
|
+
m.directory File.join('config', 'initializers')
|
15
|
+
|
16
|
+
m.template('exception_notifier.rb', 'config/initializers/exception_notifier.rb')
|
17
|
+
|
18
|
+
%w(404 422 500).each do |page|
|
19
|
+
m.template("views/#{page}.html.#{template}", "app/views/exceptions/#{page}.html.#{template}")
|
20
|
+
end
|
21
|
+
|
22
|
+
m.readme "../REMEMBER"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
def banner
|
28
|
+
"Usage: #{$0} exception_notifier [--template]"
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_options!(opt)
|
32
|
+
opt.separator ''
|
33
|
+
opt.separator 'Options:'
|
34
|
+
opt.on("-t", "--haml-templates",
|
35
|
+
"Generate exception templates using haml template") { |v| options[:haml_templates] = v; puts v }
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
Lipsiadmin::Mailer::ExceptionNotifier.sender_address = %("Exception Notifier" <exceptions@lipsiasoft.com>)
|
2
|
+
Lipsiadmin::Mailer::ExceptionNotifier.recipients_addresses = %(helpdesk@lipsiasoft.com)
|
3
|
+
Lipsiadmin::Mailer::ExceptionNotifier.email_prefix = "[Project Name]"
|
4
|
+
|
5
|
+
# Uncomment this if this mail is for redmine handler
|
6
|
+
# Lipsiadmin::Mailer::ExceptionNotifier.extra_options = { :project => "lipsiabug", :tracker => "Bug", :priority => "Immediata" }
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<div class="exception">
|
2
|
+
<h1>We're sorry, but something went wrong.</h1>
|
3
|
+
<p>We've been notified about this issue and we'll take a look at it shortly.</p>
|
4
|
+
<p><small>(If you're the administrator of this website, then please read
|
5
|
+
the log file "<%=h RAILS_ENV %>.log"
|
6
|
+
to find out what went wrong.)</small></p>
|
7
|
+
</div>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
.exception
|
2
|
+
%h1 We're sorry, but something went wrong.
|
3
|
+
%p We've been notified about this issue and we'll take a look at it shortly.
|
4
|
+
%p
|
5
|
+
%small
|
6
|
+
(If you're the administrator of this website, then please read the log file
|
7
|
+
=h "#{RAILS_ENV}.log"
|
8
|
+
to find out what went wrong.)
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'exception_notifier'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Lipsiadmin
|
2
|
+
module Controller
|
3
|
+
# This module are raised when an exception fire up in controllers.
|
4
|
+
# Now you can personalize exception and simplify the layout using templates
|
5
|
+
# in app/views/exception
|
6
|
+
# when an exception is raised it try to send an email, and for send an email
|
7
|
+
# you need to configure in enviroment or in an initializer some like this:
|
8
|
+
#
|
9
|
+
# Examples:
|
10
|
+
#
|
11
|
+
# Lipsiadmin::Mailer::ExceptionNotifier.sender_address = %("Exception Notifier" <server1@lipsiasoft.com>)
|
12
|
+
# Lipsiadmin::Mailer::ExceptionNotifier.recipients_addresses = %(info@lipsiasoft.com)
|
13
|
+
# Lipsiadmin::Mailer::ExceptionNotifier.email_prefix = "[Your Project]"
|
14
|
+
#
|
15
|
+
module Rescue
|
16
|
+
|
17
|
+
def self.included(base)
|
18
|
+
base.class_eval do
|
19
|
+
alias_method_chain :rescue_action_in_public, :notifier
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Overwrite to implement public exception handling (for requests answering false to <tt>local_request?</tt>). By
|
24
|
+
# default will call render_optional_error_file. Override this method to provide more user friendly error messages.
|
25
|
+
def rescue_action_in_public_with_notifier(exception) #:doc:
|
26
|
+
response_code = response_code_for_rescue(exception)
|
27
|
+
status = interpret_status(response_code)[0,3]
|
28
|
+
render :template => "/exceptions/#{status}", :status => status
|
29
|
+
if response_code != :not_found
|
30
|
+
Lipsiadmin::Mailer::ExceptionNotifier.deliver_exception(exception, self, request)
|
31
|
+
end
|
32
|
+
rescue Exception => e
|
33
|
+
logger.error e.message
|
34
|
+
erase_results
|
35
|
+
rescue_action_in_public_without_notifier(exception)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
A <%= @exception.class %> occurred in <%= @controller.controller_name %>#<%= @controller.action_name %>:
|
2
|
+
|
3
|
+
<%= @exception.message %>
|
4
|
+
<%= @backtrace.join("\n") %>
|
5
|
+
|
6
|
+
* URL : <%= @request.protocol %><%= @host %><%= @request.request_uri %>
|
7
|
+
* IP address: <%= @request.env["HTTP_X_FORWARDED_FOR"] || @request.env["REMOTE_ADDR"] %>
|
8
|
+
* Parameters: <%= @request.parameters.inspect %>
|
9
|
+
* Rails root: <%= RAILS_ROOT %>
|
10
|
+
|
11
|
+
<%= @extra_options.collect { |k,v| "#{k.to_s.capitalize}: #{v}" }.join("\n") %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Lipsiadmin
|
2
|
+
module Mailer
|
3
|
+
class ExceptionNotifier < ActionMailer::Base
|
4
|
+
|
5
|
+
@@sender_address = %("Exception Notifier" <exception.notifier@default.com>)
|
6
|
+
cattr_accessor :sender_address
|
7
|
+
|
8
|
+
@@recipients_addresses = []
|
9
|
+
cattr_accessor :recipients_addresses
|
10
|
+
|
11
|
+
@@extra_options = {}
|
12
|
+
cattr_accessor :extra_options
|
13
|
+
|
14
|
+
@@email_prefix = "[ERROR] "
|
15
|
+
cattr_accessor :email_prefix
|
16
|
+
|
17
|
+
self.mailer_name = "exception"
|
18
|
+
self.template_root = "#{File.dirname(__FILE__)}"
|
19
|
+
|
20
|
+
def self.reloadable?() false end
|
21
|
+
|
22
|
+
def exception(exception, controller, request)
|
23
|
+
content_type "text/plain"
|
24
|
+
|
25
|
+
subject "#{email_prefix} #{exception.message.inspect}"
|
26
|
+
|
27
|
+
recipients recipients_addresses
|
28
|
+
from sender_address
|
29
|
+
|
30
|
+
body :controller => controller, :request => request,
|
31
|
+
:exception => exception, :host => (request.env["HTTP_X_FORWARDED_HOST"] || request.env["HTTP_HOST"]),
|
32
|
+
:backtrace => exception.backtrace, :extra_options => extra_options
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Lipsiasoft-exception_notifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "1.0"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Davide D'Agostino
|
8
|
+
autorequire: exception_notifier
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-23 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: d.dagostino@lipsiasoft.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- README
|
26
|
+
- MIT-LICENSE
|
27
|
+
- Rakefile
|
28
|
+
- init.rb
|
29
|
+
- generators/exception_notifier
|
30
|
+
- generators/exception_notifier/exception_notifier_generator.rb
|
31
|
+
- generators/exception_notifier/REMEMBER
|
32
|
+
- generators/exception_notifier/templates
|
33
|
+
- generators/exception_notifier/templates/exception_notifier.rb
|
34
|
+
- generators/exception_notifier/templates/views
|
35
|
+
- generators/exception_notifier/templates/views/404.html.erb
|
36
|
+
- generators/exception_notifier/templates/views/404.html.haml
|
37
|
+
- generators/exception_notifier/templates/views/422.html.erb
|
38
|
+
- generators/exception_notifier/templates/views/422.html.haml
|
39
|
+
- generators/exception_notifier/templates/views/500.html.erb
|
40
|
+
- generators/exception_notifier/templates/views/500.html.haml
|
41
|
+
- lib/controller
|
42
|
+
- lib/controller/rescue.rb
|
43
|
+
- lib/exception_notifier.rb
|
44
|
+
- lib/mailer
|
45
|
+
- lib/mailer/exception
|
46
|
+
- lib/mailer/exception/exception.html.erb
|
47
|
+
- lib/mailer/exception_notifier.rb
|
48
|
+
- test/exception_notifier_test.rb
|
49
|
+
- test/test_helper.rb
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://groups.google.com/group/lipsiadmin
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
requirements:
|
70
|
+
- none
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.2.0
|
73
|
+
signing_key:
|
74
|
+
specification_version: 2
|
75
|
+
summary: Extracted exception notifier of Lipsiadmin
|
76
|
+
test_files: []
|
77
|
+
|