Skip to content

Instantly share code, notes, and snippets.

@ngauthier
Created June 12, 2014 14:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ngauthier/43a938706a5be55f8785 to your computer and use it in GitHub Desktop.
Save ngauthier/43a938706a5be55f8785 to your computer and use it in GitHub Desktop.
Squeaky: Ultralight Exception Notification and General Notifier
class ApplicationController < ActionController::Base
rescue_from StandardError, with: :handle_exception
def squeak(*args)
SqueakyMailer.notification(*args).deliver
end
def handle_exception(e)
squeak(
message: "Error: #{e.message}",
request: {
url: request.url,
request_method: request.request_method,
remote_ip: request.remote_ip,
},
params: params,
session: session,
backtrace: e.backtrace,
)
raise e
end
end
<body><h1>Description</h1>
<pre>"This is a preview"
</pre>
<h1>Request</h1>
<pre>#&lt;ActionDispatch::Request:0x007f7c51eb1818
@env={},
@filtered_env=nil,
@filtered_parameters=nil,
@filtered_path=nil,
@fullpath=nil,
@ip=nil,
@method=nil,
@original_fullpath=nil,
@port=nil,
@protocol=nil,
@remote_ip=nil,
@request_method=nil,
@symbolized_path_params=nil,
@uuid=nil&gt;
</pre>
<h1>Params</h1>
<pre>{"thing"=&gt;{"id"=&gt;1}}
</pre>
<h1>Session</h1>
<pre>{:id=&gt;"1234567890qwertyuiop", :user_id=&gt;"87"}
</pre>
<h1>Backtrace</h1>
<pre>["/home/nick/workspace/app/test/mailers/previews/squeaky_mailer_preview.rb:4:in `notification'",
"/home/nick/.gems/gems/actionmailer-4.1.2.rc1/lib/action_mailer/preview.rb:56:in `public_send'",
"/home/nick/.gems/gems/actionmailer-4.1.2.rc1/lib/action_mailer/preview.rb:56:in `call'",
"/home/nick/.gems/gems/railties-4.1.2.rc1/lib/rails/mailers_controller.rb:22:in `preview'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal/implicit_render.rb:4:in `send_action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/abstract_controller/base.rb:189:in `process_action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal/rendering.rb:10:in `process_action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:113:in `call'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:113:in `call'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:166:in `call'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:166:in `block in halting'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:86:in `call'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:86:in `run_callbacks'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/abstract_controller/callbacks.rb:19:in `process_action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal/rescue.rb:29:in `process_action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/notifications.rb:159:in `block in instrument'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/notifications.rb:159:in `instrument'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'",
"/home/nick/.gems/gems/activerecord-4.1.2.rc1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/abstract_controller/base.rb:136:in `process'",
"/home/nick/.gems/gems/actionview-4.1.2.rc1/lib/action_view/rendering.rb:30:in `process'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal.rb:196:in `dispatch'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_controller/metal.rb:232:in `block in action'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/routing/route_set.rb:82:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/routing/route_set.rb:82:in `dispatch'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/routing/route_set.rb:50:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/journey/router.rb:71:in `block in call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/journey/router.rb:59:in `each'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/journey/router.rb:59:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/routing/route_set.rb:678:in `call'",
"/home/nick/.gems/gems/newrelic_rpm-3.8.1.221/lib/new_relic/rack/error_collector.rb:55:in `call'",
"/home/nick/.gems/gems/newrelic_rpm-3.8.1.221/lib/new_relic/rack/agent_hooks.rb:32:in `call'",
"/home/nick/.gems/gems/newrelic_rpm-3.8.1.221/lib/new_relic/rack/browser_monitoring.rb:27:in `call'",
"/home/nick/.gems/gems/newrelic_rpm-3.8.1.221/lib/new_relic/rack/developer_mode.rb:45:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/etag.rb:23:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/conditionalget.rb:25:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/head.rb:11:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/params_parser.rb:27:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/flash.rb:254:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:225:in `context'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:220:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/cookies.rb:560:in `call'",
"/home/nick/.gems/gems/activerecord-4.1.2.rc1/lib/active_record/query_cache.rb:36:in `call'",
"/home/nick/.gems/gems/activerecord-4.1.2.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'",
"/home/nick/.gems/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:380:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/callbacks.rb:82:in `run_callbacks'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/callbacks.rb:27:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/reloader.rb:73:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/remote_ip.rb:76:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'",
"/home/nick/.gems/gems/railties-4.1.2.rc1/lib/rails/rack/logger.rb:38:in `call_app'",
"/home/nick/.gems/gems/railties-4.1.2.rc1/lib/rails/rack/logger.rb:20:in `block in call'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/tagged_logging.rb:68:in `block in tagged'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/tagged_logging.rb:26:in `tagged'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/tagged_logging.rb:68:in `tagged'",
"/home/nick/.gems/gems/railties-4.1.2.rc1/lib/rails/rack/logger.rb:20:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/request_id.rb:21:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/runtime.rb:17:in `call'",
"/home/nick/.gems/gems/activesupport-4.1.2.rc1/lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/lock.rb:17:in `call'",
"/home/nick/.gems/gems/actionpack-4.1.2.rc1/lib/action_dispatch/middleware/static.rb:64:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'",
"/home/nick/.gems/gems/railties-4.1.2.rc1/lib/rails/engine.rb:514:in `call'",
"/home/nick/.gems/gems/railties-4.1.2.rc1/lib/rails/application.rb:144:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/deflater.rb:25:in `call'",
"/home/nick/.gems/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'",
"/home/nick/.gems/gems/puma-2.8.2/lib/puma/server.rb:490:in `handle_request'",
"/home/nick/.gems/gems/puma-2.8.2/lib/puma/server.rb:361:in `process_client'",
"/home/nick/.gems/gems/puma-2.8.2/lib/puma/server.rb:254:in `block in run'",
"/home/nick/.gems/gems/puma-2.8.2/lib/puma/thread_pool.rb:92:in `call'",
"/home/nick/.gems/gems/puma-2.8.2/lib/puma/thread_pool.rb:92:in `block in spawn_thread'"]
</pre>
<h1>Dynamic Key One</h1>
<pre>"Value One"
</pre>
<h1>Dynamic Key Two</h1>
<pre>{:foo=&gt;"bar", :baz=&gt;"qux"}
</pre>
</body>
<% @options.each do |k,v| %>
<h1><%= k.to_s.humanize.titleize %></h1>
<pre><%= v.pretty_inspect %></pre>
<% end %>
require 'pp'
class SqueakyMailer < ActionMailer::Base
default from: "noreply@example.com"
def notification(message: "Notification", **options)
@options = options
mail(
subject: "[APP] #{message}",
to: %{"Your Name" <you@example.com>}
)
end
end
class ThingsController < ApplicationController
def create
@thing = current_user.things.new(params[:thing])
if @thing.save
redirect_to things_path
squeak(
message: "User hit things limit",
user: current_user
) if current_user.at_things_limit?
else
render :new
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment