logster 0.0.9 → 0.0.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad8ab40a4cbb66a605f51194121b6d53c06b535d
4
- data.tar.gz: 62a4583c35dc53e28ae789ff3c4d74304bce8861
3
+ metadata.gz: eadf4ac198a2256f98ce3bfcb70be74dbe2056eb
4
+ data.tar.gz: c85f2dac78f07d7cc0b77eedcafd1572942e9ebe
5
5
  SHA512:
6
- metadata.gz: 0a750c530e9b5b2365ba544aa034a9433992d24ef7da5c79d688263946d999445284f3c79682c2341b54ec7885f10bf7c95e5572467008c72a0da7b5327d7cd9
7
- data.tar.gz: 5706d286cad50e1a00200be2a78199284b44076ab3aa8c028b17ba7a6e16072edc4e0873d4643637721050df1a218beca5d426374b617f74bd9cfd808d5458bf
6
+ metadata.gz: caee98bce33d83120e194452898da0533a1ffcd180c05f8c893563b0039d453b3cd6620cf9a5ffa333722ee1cabc17eefb1c2c61acddfb31afb739f61642b2c9
7
+ data.tar.gz: 7b35e552e33df43b0d3e513f68cc380b21064b48df88b82f5aaa333345844b457f7f677a0ef79a1492e4049cf9bb5d2d91b1333bb42fdc6abaf73a2c60723c85
data/README.md CHANGED
@@ -17,15 +17,17 @@ And then execute:
17
17
 
18
18
  $ bundle
19
19
 
20
- Logster will wire up `/logs` path in your Rails app in **development** mode only. Production mode is being worked on.
20
+ Logster will wire up `/logs` path in your Rails app in **development** mode only. To wire up in production you will need to set
21
21
 
22
- ## Usage
22
+ ```
23
+ Logster.config.authorize_callback = lambda{|env| your_own_can_see_logs? }
24
+ ```
23
25
 
24
- Logster is in current development, at the moment the focus is on a decent tool for dev. Once that is complete production mode will be built.
26
+ ## Usage
25
27
 
26
28
  The concept is to have an embedded "exception reporting service" admins can view on live sites.
27
29
 
28
- Logs will be visible by default at `http://sitename.com/logs`, only dev mode is implemented now.
30
+ Logs will be visible by default at `http://sitename.com/logs`
29
31
 
30
32
  ## Thanks
31
33
 
@@ -56,3 +58,7 @@ Logster UI is built using [Ember.js](http://emberjs.com/)
56
58
  - Fix pacakging binstubs by mistake
57
59
  - 2014-05-13: Version 0.0.9
58
60
  - Stray debugger message removed, add window.location logging to js
61
+ - 2014-05-24: Version 0.0.10
62
+ - Correct context for error reporting
63
+ - Clean up backtraces of reported exceptions
64
+ - Report params in env tab
@@ -62,8 +62,19 @@ App.Message = Ember.Object.extend({
62
62
  if(env){
63
63
  var buffer = [];
64
64
  _.each(env, function(v,k){
65
- buffer.push(k + ": " + v);
65
+ if(k !== "params"){
66
+ buffer.push(k + ": " + v);
67
+ }
66
68
  });
69
+
70
+ buffer.push("");
71
+ if(_.size(env.params) > 0){
72
+ buffer.push("Params:");
73
+ buffer.push("");
74
+ _.each(env.params, function(v,k){
75
+ buffer.push(" " + k + ": " + v);
76
+ });
77
+ }
67
78
  return buffer.join("\n");
68
79
  }
69
80
 
@@ -1,5 +1,5 @@
1
1
  module Logster
2
2
  class Configuration
3
- attr_accessor :authorize_callback, :subdirectory
3
+ attr_accessor :authorize_callback, :subdirectory, :current_context
4
4
  end
5
5
  end
@@ -4,7 +4,7 @@ module Logster
4
4
  class Logger < ::Logger
5
5
  LOGSTER_ENV = "logster_env".freeze
6
6
 
7
- attr_accessor :store
7
+ attr_accessor :store, :skip_store
8
8
 
9
9
  def initialize(store)
10
10
  super(nil)
@@ -16,6 +16,7 @@ module Logster
16
16
  @chained << logger
17
17
  end
18
18
 
19
+
19
20
  def add(severity, message, progname, &block)
20
21
  if severity < @level
21
22
  return true
@@ -41,6 +42,8 @@ module Logster
41
42
  end
42
43
  end
43
44
 
45
+ return if @skip_store
46
+
44
47
  @store.report(severity, progname, message, {
45
48
  env: Thread.current[LOGSTER_ENV]
46
49
  })
@@ -59,6 +59,16 @@ module Logster
59
59
  def self.populate_from_env(env)
60
60
  env[LOGSTER_ENV] ||= begin
61
61
  scrubbed = {}
62
+ request = Rack::Request.new(env)
63
+ params = {}
64
+ request.params.each do |k,v|
65
+ if k.include? "password"
66
+ params[k] = "[reducted]"
67
+ else
68
+ params[k] = v[0..100]
69
+ end
70
+ end
71
+ scrubbed["params"] = params if params.length > 0
62
72
  ALLOWED_ENV.map{ |k|
63
73
  scrubbed[k] = env[k] if env[k]
64
74
  }
@@ -0,0 +1,19 @@
1
+ class Logster::Middleware::DebugExceptions < ActionDispatch::DebugExceptions
2
+ private
3
+
4
+ def log_error(env,wrapper)
5
+ Logster.logger.skip_store = true
6
+ exception = wrapper.exception
7
+
8
+ Logster.config.current_context.call(env) do
9
+ Logster.store.report(::Logger::Severity::FATAL,
10
+ "web",
11
+ exception.class.to_s << " (" << exception.to_s << ")",
12
+ backtrace: exception.backtrace.join("\n"),
13
+ env: env)
14
+ end
15
+ super(env, wrapper)
16
+ ensure
17
+ Logster.logger.skip_store = false
18
+ end
19
+ end
@@ -14,7 +14,10 @@ module Logster
14
14
 
15
15
  path = env[PATH_INFO]
16
16
  if path == @error_path
17
- return report_js_error(env)
17
+ Logster.config.current_context.call(env) do
18
+ report_js_error(env)
19
+ end
20
+ return [200,{},["OK"]]
18
21
  end
19
22
 
20
23
  @app.call(env)
@@ -36,7 +39,6 @@ module Logster
36
39
  message,
37
40
  backtrace: backtrace,
38
41
  env: env)
39
- [200,{},["OK"]]
40
42
  end
41
43
 
42
44
  end
@@ -16,7 +16,6 @@ module Logster
16
16
 
17
17
  @assets_path = File.expand_path("../../../../assets", __FILE__)
18
18
  @fileserver = Rack::File.new(@assets_path)
19
- @authorize_callback = Logster.config.authorize_callback
20
19
  end
21
20
 
22
21
  def call(env)
@@ -29,7 +28,7 @@ module Logster
29
28
 
30
29
  if resource = resolve_path(path)
31
30
 
32
- return @app.call(env) if @authorize_callback && !@authorize_callback.call(env)
31
+ return @app.call(env) if !Logster.config.authorize_callback.call(env)
33
32
 
34
33
  if resource =~ /\.js$|\.handlebars$|\.css$/
35
34
  env[PATH_INFO] = resource
@@ -8,7 +8,7 @@ module Logster::Rails
8
8
  return unless Rails.env.development? || Rails.env.production?
9
9
 
10
10
  if defined?(Redis)
11
- require 'logster/middleware/viewer'
11
+ require 'logster/middleware/debug_exceptions'
12
12
  require 'logster/middleware/reporter'
13
13
  require 'logster/redis_store'
14
14
 
@@ -25,18 +25,14 @@ module Logster::Rails
25
25
  end
26
26
  end
27
27
 
28
+
28
29
  def self.initialize!(app)
29
30
  return unless Rails.env.development? || Rails.env.production?
30
31
 
31
32
  if Logster::Logger === Rails.logger
32
- if Rails.env.development?
33
- # in production you must mount in routes.rb
34
- # or by inserting middleware
35
- app.middleware.use Logster::Middleware::Viewer
36
- end
37
-
38
33
  app.middleware.insert_before ActionDispatch::ShowExceptions, Logster::Middleware::Reporter
39
-
34
+ app.middleware.insert_before ActionDispatch::DebugExceptions, Logster::Middleware::DebugExceptions, Rails.application
35
+ app.middleware.delete ActionDispatch::DebugExceptions
40
36
  app.config.colorize_logging = false
41
37
  end
42
38
  end
@@ -44,6 +40,9 @@ module Logster::Rails
44
40
  class Railtie < ::Rails::Railtie
45
41
 
46
42
  config.before_initialize do
43
+ Logster.config.authorize_callback = lambda {|env|
44
+ Rails.env == "development"
45
+ }
47
46
  Logster::Rails.set_logger(config)
48
47
  end
49
48
 
@@ -1,3 +1,3 @@
1
1
  module Logster
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -0,0 +1,8 @@
1
+ require 'logster/middleware/viewer'
2
+
3
+ class Logster::Web
4
+ def self.call(env)
5
+ @middleware ||= Logster::Middleware::Viewer.new(nil)
6
+ @middleware.call(env)
7
+ end
8
+ end
data/lib/logster.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'logster/logger'
2
2
  require 'logster/message'
3
3
  require 'logster/configuration'
4
+ require 'logster/web'
4
5
 
5
6
  module Logster
6
7
  def self.logger=(logger)
@@ -33,6 +34,9 @@ module Logster
33
34
  end
34
35
  end
35
36
 
37
+ Logster.config.current_context = lambda{|env, &block| block.call}
38
+ Logster.config.authorize_callback = lambda{|env| true}
39
+
36
40
  if defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i >= 3
37
41
  require 'logster/rails/railtie'
38
42
  end
@@ -0,0 +1,21 @@
1
+ require_relative '../../test_helper'
2
+ require 'rack'
3
+ require 'logster/redis_store'
4
+ require 'logster/middleware/reporter'
5
+
6
+
7
+ class TestReporter < Minitest::Test
8
+
9
+ def test_logs_errors
10
+ Logster.store = Logster::TestStore.new
11
+
12
+ reporter = Logster::Middleware::Reporter.new(nil)
13
+ env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello")
14
+ status, = reporter.call(env)
15
+
16
+ assert_equal(200, status)
17
+ assert_equal(1, Logster.store.reported.length)
18
+ end
19
+
20
+ end
21
+
@@ -1,5 +1,6 @@
1
1
  require_relative '../test_helper'
2
2
  require 'logster/redis_store'
3
+ require 'rack'
3
4
 
4
5
  class TestRedisStore < Minitest::Test
5
6
 
@@ -148,18 +149,26 @@ class TestRedisStore < Minitest::Test
148
149
  end
149
150
 
150
151
  def test_env
151
- env = {
152
- "REQUEST_URI" => "/test",
152
+ env = Rack::MockRequest.env_for("/test").merge({
153
153
  "HTTP_HOST" => "www.site.com",
154
- "REQUEST_METHOD" => "GET",
155
154
  "HTTP_USER_AGENT" => "SOME WHERE"
156
- }
155
+ })
157
156
  orig = env.dup
158
157
  orig["test"] = "tests"
159
158
  orig["test1"] = "tests1"
160
-
161
159
  Logster.add_to_env(env,"test","tests")
162
160
  Logster.add_to_env(env,"test1","tests1")
161
+
162
+ orig.delete_if do |k,v|
163
+ !%w{
164
+ HTTP_HOST
165
+ REQUEST_METHOD
166
+ HTTP_USER_AGENT
167
+ test
168
+ test1
169
+ }.include? k
170
+ end
171
+
163
172
  @store.report(Logger::INFO, "test", "test", env: env)
164
173
  assert_equal(orig, @store.latest.last.env)
165
174
  end
data/test/test_helper.rb CHANGED
@@ -5,3 +5,14 @@ require 'minitest/pride'
5
5
  require 'logster'
6
6
  require 'redis'
7
7
 
8
+
9
+ class Logster::TestStore
10
+ attr_accessor :reported
11
+ def initialize
12
+ @reported = []
13
+ end
14
+
15
+ def report(*args)
16
+ @reported << args
17
+ end
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - UI for viewing logs in Rack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2014-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,12 +125,15 @@ files:
125
125
  - lib/logster/configuration.rb
126
126
  - lib/logster/logger.rb
127
127
  - lib/logster/message.rb
128
+ - lib/logster/middleware/debug_exceptions.rb
128
129
  - lib/logster/middleware/reporter.rb
129
130
  - lib/logster/middleware/viewer.rb
130
131
  - lib/logster/rails/railtie.rb
131
132
  - lib/logster/redis_store.rb
132
133
  - lib/logster/version.rb
134
+ - lib/logster/web.rb
133
135
  - logster.gemspec
136
+ - test/logster/middleware/test_reporter.rb
134
137
  - test/logster/middleware/test_viewer.rb
135
138
  - test/logster/test_logger.rb
136
139
  - test/logster/test_redis_store.rb
@@ -161,6 +164,7 @@ signing_key:
161
164
  specification_version: 4
162
165
  summary: UI for viewing logs in Rack
163
166
  test_files:
167
+ - test/logster/middleware/test_reporter.rb
164
168
  - test/logster/middleware/test_viewer.rb
165
169
  - test/logster/test_logger.rb
166
170
  - test/logster/test_redis_store.rb