exception_log 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ exception_log
2
+ =============
3
+
4
+ send rails exception to email and give web ui to watch exception, and it's live stream
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env rake
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'action_mailer'
4
+ require 'exception_log'
5
+
6
+ begin
7
+ require 'bundler/setup'
8
+ rescue LoadError
9
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
10
+ end
11
+
12
+ task :build do
13
+ system "gem build exception_log.gemspec"
14
+ end
15
+
16
+ task :install => :build do
17
+ system "gem install exception_log-#{ExceptionLog::VERSION}.gem"
18
+ end
19
+
20
+ task :release => :build do
21
+ puts "Tagging #{ExceptionLog::VERSION}..."
22
+ system "git tag -a #{ExceptionLog::VERSION} -m 'Tagging #{ExceptionLog::VERSION}'"
23
+ puts "Pushing to Github..."
24
+ system "git push --tags"
25
+ puts "Pushing to rubygems.org..."
26
+ system "gem push exception_log-#{ExceptionLog::VERSION}.gem"
27
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,2 @@
1
+ require File.expand_path("../exception_log/middleware.rb",__FILE__)
2
+ require File.expand_path("../exception_log/version.rb",__FILE__)
@@ -0,0 +1,62 @@
1
+ #encoding:utf-8
2
+ require File.expand_path("../mailer.rb",__FILE__)
3
+
4
+ module ExceptionLog
5
+ class Handler
6
+
7
+ def initialize(env,exception,options={})
8
+ @exception = exception
9
+ @request = ActionDispatch::Request.new(env)
10
+ @controller = env['action_controller.instance']
11
+ @options = options
12
+ @body = generate_text
13
+ end
14
+
15
+ def generate_text
16
+ org_str = if @controller.respond_to? :current_orgnization
17
+ org = @controller.send(:current_orgnization)
18
+ "orgnization: #{org.try(:id)} #{org.try(:name)}"
19
+ end
20
+ user_str = if @controller.respond_to? :current_user
21
+ user = @controller.send(:current_user)
22
+ "user: #{user.try(:id)} #{user.try(:name)}"
23
+ end
24
+ error =<<HERE
25
+ \n\n\n========================================= EXCEPTION ==============================================================
26
+ #{org_str}
27
+ #{user_str}
28
+ time: #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}
29
+ method: #{@request.method}
30
+ url: #{@request.url}
31
+ user-agent: #{@request.user_agent}
32
+ referer: #{@request.headers["Referer"]}
33
+ params: #{@controller.params}
34
+ exception: #{@exception.class}
35
+ message: #{@exception.message}
36
+ backtace: \n#{@exception.backtrace.join("\n")}
37
+ HERE
38
+ return error
39
+ end
40
+
41
+ def default_log_path
42
+ "#{Rails.root}/log/exception.log"
43
+ end
44
+
45
+ def write_file
46
+ log_path = @options[:log_path] || default_log_path
47
+ File.open(log_path,"a+") do |f|
48
+ f.puts @body
49
+ end
50
+ end
51
+
52
+ def send_mail
53
+ ExceptionLog::Mailer.exception_mail(@body,:from=>@options[:from],:to=>@options[:to]).deliver
54
+ end
55
+
56
+ def do
57
+ write_file
58
+ send_mail
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,14 @@
1
+ #encoding:utf-8
2
+ module ExceptionLog
3
+ class Mailer < ::ActionMailer::Base
4
+
5
+ def exception_mail(body,options = {})
6
+ from = options[:from]
7
+ to = options[:to]
8
+ subject = "NOTICE,your site raise a exception!"
9
+ body = body
10
+ mail(:from=>from, :to => to, :subject => subject, :body => body)
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ #encoding:utf-8
2
+ require File.expand_path("../handler",__FILE__)
3
+
4
+ module ExceptionLog
5
+ class Middleware
6
+ def initialize(app, options = {})
7
+ @app = app
8
+ @options = options
9
+ end
10
+
11
+ def call(env)
12
+ @app.call(env)
13
+ rescue Exception => e
14
+ pid = fork {
15
+ ExceptionLog::Handler.new(env,e,@options).do
16
+ }
17
+ Process.detach(pid)
18
+ raise e
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module ExceptionLog
2
+ VERSION = File.read File.expand_path("../../../VERSION",__FILE__)
3
+ end
@@ -0,0 +1,49 @@
1
+ // node /data/projects/exception_log/lib/nodejs/server.js -host=192.168.10.107 -log=/data/projects/entos/log/exception.log
2
+
3
+ var app = require('http').createServer(handler)
4
+ , io = require('socket.io').listen(app)
5
+ // , fs = require('fs')
6
+
7
+ var args = process.argv.slice(2); //
8
+ var host = args[0].substr(6);
9
+ var log = args[1].substr(5)
10
+
11
+ console.log("listeing log:" + log);
12
+
13
+ app.listen(1337);
14
+
15
+ function handler (req, res) {
16
+
17
+ var data = '<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>' +
18
+ '<script src="http://'+ host +':1337/socket.io/socket.io.js"></script>' +
19
+ '<style type="text/css" media="screen">' +
20
+ 'body {background:#000; color:#fff;}' +
21
+ '</style>' +
22
+
23
+ '<div style="width:100%">' +
24
+ '<pre id="tail"></pre>' +
25
+ '</div>' +
26
+
27
+ '<script type="text/javascript">' +
28
+ 'var socket = io.connect("http://'+ host +':1337");' +
29
+ 'socket.on("tail", function (data) {' +
30
+ '$("#tail").append(data.tail);' +
31
+ '}); ' +
32
+ '</script>';
33
+
34
+ res.writeHead(200);
35
+ res.end(data);
36
+
37
+ }
38
+
39
+ io.sockets.on('connection', function (socket) {
40
+ var spawn = require('child_process').spawn;
41
+ var tail = spawn("tail", ["-n10000", "-f" , log]);
42
+
43
+ tail.stdout.on("data", function (data) {
44
+ // console.log(data.toString('utf-8'));
45
+ socket.emit('tail', { tail : data.toString('utf-8') } )
46
+ });
47
+ });
48
+
49
+ console.log('Log Server running now at http://'+ host +':1337/ in your browser');
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: exception_log
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - wxianfeng
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-08 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: rails exception send to email, and watch in web ui interface
15
+ email:
16
+ - wang.fl1429@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - README.md
22
+ - VERSION
23
+ - Rakefile
24
+ - lib/exception_log/middleware.rb
25
+ - lib/exception_log/mailer.rb
26
+ - lib/exception_log/version.rb
27
+ - lib/exception_log/handler.rb
28
+ - lib/nodejs/server.js
29
+ - lib/exception_log.rb
30
+ homepage: http://github.com/wxianfeng/exception_log
31
+ licenses: []
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ segments:
43
+ - 0
44
+ hash: -3635286804832592620
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: 1.3.6
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 1.8.24
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: rails exception send to email, and watch in web ui interface
57
+ test_files: []