cheaptoad 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -1
- data/Manifest.txt +7 -0
- data/README.rdoc +25 -3
- data/app/controllers/notices_controller.rb +18 -9
- data/app/models/notice.rb +14 -0
- data/app/views/layouts/with_feed.html.erb +5 -0
- data/app/views/notices/index.html.erb +4 -0
- data/app/views/notices/list_by_api_key.html.erb +7 -0
- data/app/views/notices/list_notices.atom.builder +18 -0
- data/app/views/notices/list_notices.html.erb +9 -0
- data/app/views/notices/show.html.erb +20 -0
- data/generators/cheaptoad_migration/templates/20090914074933_ct_migrate.rb +13 -35
- data/lib/cheaptoad.rb +1 -1
- metadata +9 -2
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -5,6 +5,13 @@ PostInstall.txt
|
|
5
5
|
README.rdoc
|
6
6
|
Rakefile
|
7
7
|
app/controllers/notices_controller.rb
|
8
|
+
app/models/notice.rb
|
9
|
+
app/views/layouts/with_feed.html.erb
|
10
|
+
app/views/notices/index.html.erb
|
11
|
+
app/views/notices/list_by_api_key.html.erb
|
12
|
+
app/views/notices/list_notices.atom.builder
|
13
|
+
app/views/notices/list_notices.html.erb
|
14
|
+
app/views/notices/show.html.erb
|
8
15
|
generators/cheaptoad_migration/USAGE
|
9
16
|
generators/cheaptoad_migration/cheaptoad_migration_generator.rb
|
10
17
|
generators/cheaptoad_migration/templates/20090914074933_ct_migrate.rb
|
data/README.rdoc
CHANGED
@@ -16,25 +16,47 @@ app a HopToad server in just a couple of lines!
|
|
16
16
|
== SYNOPSIS:
|
17
17
|
|
18
18
|
Make a Rails app, or choose an existing one. In config/environment.rb,
|
19
|
-
add the line
|
19
|
+
add the line 'config.gem "cheaptoad"'. Now, that app can receive
|
20
|
+
HopToad errors! If you want it to give you an RSS feed of errors (who
|
21
|
+
wouldn't?), you'll also need to go into config/routes.rb and add the
|
22
|
+
line "resources :notices".
|
20
23
|
|
21
|
-
|
24
|
+
In any and all apps that you want to send errors to your app, create a
|
25
|
+
file called config/initializers/hoptoad.rb, as you always would when
|
26
|
+
using HopToad. Install the HopToad notifier also, of course. The config
|
27
|
+
file will look a bit like this:
|
22
28
|
|
23
29
|
HoptoadNotifier.configure do |config|
|
24
30
|
config.api_key = 'My Project Name'
|
25
|
-
config.host = '
|
31
|
+
config.host = 'mycheaptoadapp.host.com'
|
26
32
|
config.port = 3000
|
27
33
|
|
28
34
|
config.environment_filters << "MY_SECRET_KEY"
|
29
35
|
|
30
36
|
end
|
31
37
|
|
38
|
+
Note that the host and port are for the app that will *receive* HopToad
|
39
|
+
errors, the app you added the 'config.gem "cheaptoad"' to.
|
40
|
+
|
32
41
|
== REQUIREMENTS:
|
33
42
|
|
34
43
|
You'll need a Rails app, which will be your CheapToad server. It can do
|
35
44
|
whatever else you like, but its notices controller (by default
|
36
45
|
"/notices") will be used for CheapToad stuff.
|
37
46
|
|
47
|
+
You will *not* need a HopToad API key. That's kind of the point of this
|
48
|
+
project. Instead of using a big hexadecimal string as your API key, I
|
49
|
+
recommend you use a simple string like "My Blog" or "Secret Project X".
|
50
|
+
|
51
|
+
== RESKINNING:
|
52
|
+
|
53
|
+
By default, CheapToad has a built-in set of HTML and RSS files to give
|
54
|
+
a very simple list of your errors. If you'd rather use your own, it's
|
55
|
+
probably easiest to just build your own notices_controller.rb file and
|
56
|
+
appropriate view files to go with it. You can look at the ones in
|
57
|
+
your local copy of the CheapToad gem to do it -- they're really quite
|
58
|
+
simple. Then, add your own new HTML, CSS and whatnot to pretty it up.
|
59
|
+
|
38
60
|
== INSTALL:
|
39
61
|
|
40
62
|
sudo gem install cheaptoad
|
@@ -1,15 +1,24 @@
|
|
1
1
|
class NoticesController < ApplicationController
|
2
2
|
def index
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
#error_class = notice['error_class']
|
7
|
-
#error_message = notice['error_message']
|
8
|
-
#backtrace = notice['back'].blank? : notice['backtrace'] : notice['back']
|
9
|
-
#sess = notice['session']
|
10
|
-
#envir = notice['environment']
|
3
|
+
if request.put? or request.post?
|
4
|
+
notice = Notice.create_from_yaml(request.raw_post)
|
5
|
+
notice.save!
|
11
6
|
|
12
|
-
|
7
|
+
render :text => "Successfully received error from hoptoad_notifier!"
|
8
|
+
elsif params[:api_key]
|
9
|
+
@api_key = params[:api_key]
|
10
|
+
@notices = Notice.find_all_by_api_key(@api_key)
|
11
|
+
render :layout => "with_feed", :action => "list_notices"
|
12
|
+
else
|
13
|
+
# List API keys
|
14
|
+
res = Notice.connection.execute("SELECT DISTINCT api_key FROM notices")
|
15
|
+
@keys = res.map {|i| i["api_key"]}
|
16
|
+
render :action => "list_by_api_key"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def show
|
21
|
+
@notice = Notice.find(params[:id])
|
13
22
|
end
|
14
23
|
|
15
24
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Notice < ActiveRecord::Base
|
2
|
+
[:session, :request, :environment, :backtrace].each {|a| serialize a}
|
3
|
+
|
4
|
+
def self.create_from_yaml(str)
|
5
|
+
full_yaml = YAML.load(str) if str.kind_of? String
|
6
|
+
full_yaml = full_yaml['notice'] if full_yaml['notice']
|
7
|
+
|
8
|
+
notice = Notice.create(full_yaml)
|
9
|
+
notice.backtrace_digest = Digest::SHA1.hexdigest(notice.backtrace)
|
10
|
+
|
11
|
+
notice
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
atom_feed do |feed|
|
2
|
+
feed.title(@feedtitle || "Error Feed from CheapToad")
|
3
|
+
feed.updated(@notices.first.created_at)
|
4
|
+
|
5
|
+
@notices.each do |notice|
|
6
|
+
feed.entry(notice) do |entry|
|
7
|
+
entry.title(notice.error_message)
|
8
|
+
entry.content(<<END ,
|
9
|
+
<b>Project/APIkey:</b> #{notice.api_key} <br/>
|
10
|
+
|
11
|
+
<b>Error location:</b> #{notice.backtrace[0]} <br/>
|
12
|
+
|
13
|
+
<b>Request:</b> #{simple_format notice.request.to_yaml}
|
14
|
+
END
|
15
|
+
:type => 'html')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<h1> Notice: <%= @notice.error_message %> </h1>
|
2
|
+
<h3> Project (API_key): <%= @notice.api_key %> </h3>
|
3
|
+
|
4
|
+
<hr />
|
5
|
+
|
6
|
+
<h2> Request </h2>
|
7
|
+
|
8
|
+
<%= simple_format @notice.request.to_yaml %>
|
9
|
+
|
10
|
+
<h2> Backtrace </h2>
|
11
|
+
|
12
|
+
<%= simple_format @notice.backtrace.to_yaml %>
|
13
|
+
|
14
|
+
<h2> Session Info </h2>
|
15
|
+
|
16
|
+
<%= simple_format @notice.session.to_yaml %>
|
17
|
+
|
18
|
+
<h2> Environment Variables </h2>
|
19
|
+
|
20
|
+
<%= simple_format @notice.environment.to_yaml %>
|
@@ -1,45 +1,23 @@
|
|
1
|
-
class
|
1
|
+
class CtMigrate < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
|
-
create_table "
|
4
|
-
t.string :
|
5
|
-
t.string :
|
3
|
+
create_table "notices", :force => true do |t|
|
4
|
+
t.string :api_key, :limit => 100
|
5
|
+
t.string :error_message, :limit => 200
|
6
|
+
t.string :error_class, :limit => 100
|
7
|
+
t.string :backtrace_digest, :limit => 256
|
8
|
+
t.text :session
|
9
|
+
t.text :request
|
10
|
+
t.text :environment
|
11
|
+
t.text :backtrace
|
6
12
|
|
7
|
-
t.string :base_description, :limit => 240
|
8
|
-
|
9
|
-
# These are used for serialized fields
|
10
|
-
t.text :tags
|
11
|
-
t.text :descriptions
|
12
|
-
|
13
|
-
t.timestamps
|
14
|
-
end
|
15
|
-
|
16
|
-
create_table "basic_exits", :force => true do |t|
|
17
|
-
t.integer :basic_object_id, :null => false
|
18
|
-
t.integer :destination_id, :null => false
|
19
|
-
t.string :type, :limit => 80
|
20
|
-
t.string :name, :limit => 80
|
21
|
-
t.string :description, :limit => 240
|
22
|
-
t.text :tags
|
23
13
|
t.timestamps
|
24
14
|
end
|
25
15
|
|
26
|
-
|
27
|
-
t.integer :current_room_id
|
28
|
-
t.integer :current_body_id
|
29
|
-
t.string :name, :limit => 80
|
30
|
-
t.string :type, :limit => 80
|
31
|
-
|
32
|
-
# Serialized fields
|
33
|
-
t.text :tags
|
34
|
-
t.text :descriptions
|
35
|
-
|
36
|
-
t.timestamps
|
37
|
-
end
|
16
|
+
add_index("notices", "backtrace_digest")
|
38
17
|
end
|
39
18
|
|
40
19
|
def self.down
|
41
|
-
drop_table "
|
42
|
-
|
43
|
-
drop_table "basic_mobiles"
|
20
|
+
drop_table "notices"
|
21
|
+
remove_index("notices", "backtrace_digest")
|
44
22
|
end
|
45
23
|
end
|
data/lib/cheaptoad.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cheaptoad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noah Gibbs
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-10-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -53,6 +53,13 @@ files:
|
|
53
53
|
- README.rdoc
|
54
54
|
- Rakefile
|
55
55
|
- app/controllers/notices_controller.rb
|
56
|
+
- app/models/notice.rb
|
57
|
+
- app/views/layouts/with_feed.html.erb
|
58
|
+
- app/views/notices/index.html.erb
|
59
|
+
- app/views/notices/list_by_api_key.html.erb
|
60
|
+
- app/views/notices/list_notices.atom.builder
|
61
|
+
- app/views/notices/list_notices.html.erb
|
62
|
+
- app/views/notices/show.html.erb
|
56
63
|
- generators/cheaptoad_migration/USAGE
|
57
64
|
- generators/cheaptoad_migration/cheaptoad_migration_generator.rb
|
58
65
|
- generators/cheaptoad_migration/templates/20090914074933_ct_migrate.rb
|