logster 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|