cheaptoad 0.0.1 → 0.0.3
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/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
|