logster 0.0.4 → 0.0.5
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 +4 -4
- data/README.md +3 -0
- data/assets/javascript/app.js +45 -17
- data/assets/javascript/templates/index.handlebars +3 -0
- data/bin/guard +16 -0
- data/lib/logster.rb +5 -0
- data/lib/logster/logger.rb +5 -1
- data/lib/logster/message.rb +27 -2
- data/lib/logster/middleware/reporter.rb +4 -0
- data/lib/logster/rails/railtie.rb +3 -0
- data/lib/logster/redis_store.rb +4 -0
- data/lib/logster/version.rb +1 -1
- data/test/logster/test_logger.rb +1 -1
- data/test/logster/test_redis_store.rb +17 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 709b0b8ef1153c5a292e07e8531764850b2edbf7
|
4
|
+
data.tar.gz: 79f01414100ed958a1c552b6d0145d94bab3d753
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fada9c1ddfe55e3fb129dee46480d9ae18d26966ed9756a8bf0fb1be19e3c96ab18e3c87c431e19f9e42a85246df1610c2866eedb24d337b3b010eb3da103426
|
7
|
+
data.tar.gz: 2eb3dc534fcebc02802dfc8271d587217728b290315d488ac7efee4d96ae6b5c701de65e14a671febfdaa57661e0e73194bf6554d2b7211d492f3f4e9cc03c45
|
data/README.md
CHANGED
@@ -45,3 +45,6 @@ Logster UI is built using [Ember.js](http://emberjs.com/)
|
|
45
45
|
- 2014-05-07: Version 0.0.4
|
46
46
|
- Feature: Ability to ignore patterns with Logster.store.ignore = [/regex/]
|
47
47
|
- Feature: Store backtraces, allow people to view them in the GUI
|
48
|
+
- 2014-05-12: Version 0.0.5
|
49
|
+
- Feature: We now log basic rack environment with the messages
|
50
|
+
- Add your on with Logster.add_to_env(env, key, value)
|
data/assets/javascript/app.js
CHANGED
@@ -57,6 +57,18 @@ App.Message = Ember.Object.extend({
|
|
57
57
|
return message;
|
58
58
|
}.property("message","expanded"),
|
59
59
|
|
60
|
+
envDebug: function(){
|
61
|
+
var env = this.get("env");
|
62
|
+
if(env){
|
63
|
+
var buffer = [];
|
64
|
+
_.each(env, function(v,k){
|
65
|
+
buffer.push(k + ": " + v);
|
66
|
+
});
|
67
|
+
return buffer.join("\n");
|
68
|
+
}
|
69
|
+
|
70
|
+
}.property("env"),
|
71
|
+
|
60
72
|
rowClass: function() {
|
61
73
|
switch(this.get("severity")){
|
62
74
|
case 0:
|
@@ -418,6 +430,7 @@ Handlebars.registerHelper('timeAgo', function(prop, options){
|
|
418
430
|
|
419
431
|
|
420
432
|
App.TabbedSectionComponent = Ember.Component.extend({
|
433
|
+
tabs: Em.A(),
|
421
434
|
selectTab: function(view){
|
422
435
|
var selected = this.get("selected");
|
423
436
|
if(selected){
|
@@ -426,23 +439,38 @@ App.TabbedSectionComponent = Ember.Component.extend({
|
|
426
439
|
this.set("selected", view);
|
427
440
|
view.set("active", true);
|
428
441
|
},
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
});
|
443
|
-
return result;
|
444
|
-
}.property()
|
442
|
+
addTab: function(tab){
|
443
|
+
this.get("tabs").addObject(tab);
|
444
|
+
if(!this.get("selected")){
|
445
|
+
this.selectTab(tab);
|
446
|
+
}
|
447
|
+
},
|
448
|
+
removeTab: function(tab){
|
449
|
+
|
450
|
+
if(this.get("selected") === tab){
|
451
|
+
this.set("selected", null);
|
452
|
+
}
|
453
|
+
this.get("tabs").removeObject(tab);
|
454
|
+
}
|
445
455
|
});
|
456
|
+
|
446
457
|
App.TabContentsComponent = Ember.Component.extend({
|
447
|
-
classNameBindings: ["active", ":content"]
|
458
|
+
classNameBindings: ["active", ":content"],
|
459
|
+
|
460
|
+
invokeParent: function(name){
|
461
|
+
var current = this.get("parentView");
|
462
|
+
while(current && !current[name]) {
|
463
|
+
current = current.get("parentView");
|
464
|
+
}
|
465
|
+
if(current){
|
466
|
+
current[name](this);
|
467
|
+
}
|
468
|
+
},
|
469
|
+
|
470
|
+
didInsertElement: function(){
|
471
|
+
this.invokeParent("addTab");
|
472
|
+
},
|
473
|
+
willDestroyElement: function(){
|
474
|
+
this.invokeParent("removeTab");
|
475
|
+
}
|
448
476
|
});
|
@@ -23,6 +23,9 @@
|
|
23
23
|
{{#tabbed-section}}
|
24
24
|
{{#tab-contents name="info" hint="show info"}}<pre>{{currentMessage.message}}</pre>{{/tab-contents}}
|
25
25
|
{{#tab-contents name="backtrace" hint="show backtrace"}}<pre>{{currentMessage.backtrace}}</pre>{{/tab-contents}}
|
26
|
+
{{#if currentMessage.env}}
|
27
|
+
{{#tab-contents name="env" hint="show environment"}}<pre>{{currentMessage.envDebug}}</pre>{{/tab-contents}}
|
28
|
+
{{/if}}
|
26
29
|
{{/tabbed-section}}
|
27
30
|
</div>
|
28
31
|
|
data/bin/guard
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'guard' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('guard', 'guard')
|
data/lib/logster.rb
CHANGED
@@ -26,6 +26,11 @@ module Logster
|
|
26
26
|
def self.config
|
27
27
|
@config ||= Configuration.new
|
28
28
|
end
|
29
|
+
|
30
|
+
def self.add_to_env(env, key, value)
|
31
|
+
logster_env = Logster::Message.populate_from_env(env)
|
32
|
+
logster_env[key] = value
|
33
|
+
end
|
29
34
|
end
|
30
35
|
|
31
36
|
if defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i >= 3
|
data/lib/logster/logger.rb
CHANGED
@@ -2,6 +2,8 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module Logster
|
4
4
|
class Logger < ::Logger
|
5
|
+
LOGSTER_ENV = "logster_env".freeze
|
6
|
+
|
5
7
|
attr_accessor :store
|
6
8
|
|
7
9
|
def initialize(store)
|
@@ -39,7 +41,9 @@ module Logster
|
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
|
-
@store.report(severity, progname, message
|
44
|
+
@store.report(severity, progname, message, {
|
45
|
+
env: Thread.current[LOGSTER_ENV]
|
46
|
+
})
|
43
47
|
|
44
48
|
end
|
45
49
|
end
|
data/lib/logster/message.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
module Logster
|
2
2
|
class Message
|
3
|
-
|
3
|
+
LOGSTER_ENV = "_logster_env".freeze
|
4
|
+
ALLOWED_ENV = %w{
|
5
|
+
HTTP_HOST
|
6
|
+
REQUEST_URI
|
7
|
+
REQUEST_METHOD
|
8
|
+
HTTP_USER_AGENT
|
9
|
+
}
|
10
|
+
|
11
|
+
attr_accessor :timestamp, :severity, :progname, :message, :key, :backtrace, :env
|
4
12
|
|
5
13
|
def initialize(severity, progname, message, timestamp = nil, key = nil)
|
6
14
|
@timestamp = timestamp || get_timestamp
|
@@ -18,7 +26,8 @@ module Logster
|
|
18
26
|
severity: @severity,
|
19
27
|
timestamp: @timestamp,
|
20
28
|
key: @key,
|
21
|
-
backtrace: @backtrace
|
29
|
+
backtrace: @backtrace,
|
30
|
+
env: @env
|
22
31
|
}
|
23
32
|
end
|
24
33
|
|
@@ -34,9 +43,25 @@ module Logster
|
|
34
43
|
parsed["timestamp"],
|
35
44
|
parsed["key"] )
|
36
45
|
msg.backtrace = parsed["backtrace"]
|
46
|
+
msg.env = parsed["env"]
|
37
47
|
msg
|
38
48
|
end
|
39
49
|
|
50
|
+
def populate_from_env(env)
|
51
|
+
@env = Message.populate_from_env(env)
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def self.populate_from_env(env)
|
56
|
+
env[LOGSTER_ENV] ||= begin
|
57
|
+
scrubbed = {}
|
58
|
+
ALLOWED_ENV.map{ |k|
|
59
|
+
scrubbed[k] = env[k] if env[k]
|
60
|
+
}
|
61
|
+
scrubbed
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
40
65
|
protected
|
41
66
|
|
42
67
|
def get_timestamp
|
@@ -1,12 +1,16 @@
|
|
1
1
|
module Logster
|
2
2
|
module Middleware
|
3
3
|
class Reporter
|
4
|
+
|
4
5
|
def initialize(app, config={})
|
5
6
|
@app = app
|
6
7
|
end
|
7
8
|
|
8
9
|
def call(env)
|
10
|
+
Thread.current[Logster::Logger::LOGSTER_ENV] = env
|
9
11
|
@app.call(env)
|
12
|
+
ensure
|
13
|
+
Thread.current[Logster::Logger::LOGSTER_ENV] = nil
|
10
14
|
end
|
11
15
|
end
|
12
16
|
end
|
@@ -5,6 +5,7 @@ module Logster::Rails
|
|
5
5
|
|
6
6
|
if defined?(Redis)
|
7
7
|
require 'logster/middleware/viewer'
|
8
|
+
require 'logster/middleware/reporter'
|
8
9
|
require 'logster/redis_store'
|
9
10
|
|
10
11
|
store = Logster.store ||= Logster::RedisStore.new
|
@@ -30,6 +31,8 @@ module Logster::Rails
|
|
30
31
|
app.middleware.use Logster::Middleware::Viewer
|
31
32
|
end
|
32
33
|
|
34
|
+
app.middleware.insert_before ActionDispatch::ShowExceptions, Logster::Middleware::Reporter
|
35
|
+
|
33
36
|
app.config.colorize_logging = false
|
34
37
|
end
|
35
38
|
end
|
data/lib/logster/redis_store.rb
CHANGED
data/lib/logster/version.rb
CHANGED
data/test/logster/test_logger.rb
CHANGED
@@ -147,4 +147,21 @@ class TestRedisStore < Minitest::Test
|
|
147
147
|
assert_equal(1, @store.latest.count)
|
148
148
|
end
|
149
149
|
|
150
|
+
def test_env
|
151
|
+
env = {
|
152
|
+
"REQUEST_URI" => "/test",
|
153
|
+
"HTTP_HOST" => "www.site.com",
|
154
|
+
"REQUEST_METHOD" => "GET",
|
155
|
+
"HTTP_USER_AGENT" => "SOME WHERE"
|
156
|
+
}
|
157
|
+
orig = env.dup
|
158
|
+
orig["test"] = "tests"
|
159
|
+
orig["test1"] = "tests1"
|
160
|
+
|
161
|
+
Logster.add_to_env(env,"test","tests")
|
162
|
+
Logster.add_to_env(env,"test1","tests1")
|
163
|
+
@store.report(Logger::INFO, "test", "test", env: env)
|
164
|
+
assert_equal(orig, @store.latest.last.env)
|
165
|
+
end
|
166
|
+
|
150
167
|
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.
|
4
|
+
version: 0.0.5
|
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-
|
11
|
+
date: 2014-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -97,7 +97,8 @@ dependencies:
|
|
97
97
|
description: UI for viewing logs in Rack
|
98
98
|
email:
|
99
99
|
- sam.saffron@gmail.com
|
100
|
-
executables:
|
100
|
+
executables:
|
101
|
+
- guard
|
101
102
|
extensions: []
|
102
103
|
extra_rdoc_files: []
|
103
104
|
files:
|
@@ -120,6 +121,7 @@ files:
|
|
120
121
|
- assets/javascript/templates/index.handlebars
|
121
122
|
- assets/javascript/templates/message.handlebars
|
122
123
|
- assets/stylesheets/app.css
|
124
|
+
- bin/guard
|
123
125
|
- bower.json
|
124
126
|
- lib/logster.rb
|
125
127
|
- lib/logster/configuration.rb
|
@@ -155,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
157
|
version: '0'
|
156
158
|
requirements: []
|
157
159
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.2.
|
160
|
+
rubygems_version: 2.2.2
|
159
161
|
signing_key:
|
160
162
|
specification_version: 4
|
161
163
|
summary: UI for viewing logs in Rack
|