logster 0.0.3 → 0.0.4
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 +31 -0
- data/assets/javascript/components/tab-contents.handlebars +1 -0
- data/assets/javascript/components/tabbed-section.handlebars +6 -0
- data/assets/javascript/templates/index.handlebars +4 -1
- data/assets/stylesheets/app.css +49 -0
- data/bower.json +24 -0
- data/lib/logster/message.rb +7 -3
- data/lib/logster/middleware/viewer.rb +11 -1
- data/lib/logster/redis_store.rb +11 -2
- data/lib/logster/version.rb +1 -1
- data/test/logster/test_redis_store.rb +14 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b23208e3d79e4cb73cbe9e80126b478cf04d6a2
|
4
|
+
data.tar.gz: 5b6eadd9d5eebe2c73ca8011fe95adf7f35ae1ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 048c85e54a50b34845fb61cf9c9c59c22e7f35833713636b5a03f408f58a319bd34474f6c0aa034730308ace8b20f886bb14e3818e16573846ef8e0731ae5260
|
7
|
+
data.tar.gz: e98d6c25f00340deae55c94ad6f5d929e3df88d8a287e8a0bcf9d6fb4fd0407f0b111bf6f5cac1a30a918a34f1d648054cd993c9b429b46908e4ce97599202bc
|
data/README.md
CHANGED
@@ -42,3 +42,6 @@ Logster UI is built using [Ember.js](http://emberjs.com/)
|
|
42
42
|
# CHANGELOG
|
43
43
|
|
44
44
|
- 2014-05-07: Started changelog :)
|
45
|
+
- 2014-05-07: Version 0.0.4
|
46
|
+
- Feature: Ability to ignore patterns with Logster.store.ignore = [/regex/]
|
47
|
+
- Feature: Store backtraces, allow people to view them in the GUI
|
data/assets/javascript/app.js
CHANGED
@@ -415,3 +415,34 @@ Handlebars.registerHelper('timeAgo', function(prop, options){
|
|
415
415
|
|
416
416
|
return new Handlebars.SafeString(formatted);
|
417
417
|
});
|
418
|
+
|
419
|
+
|
420
|
+
App.TabbedSectionComponent = Ember.Component.extend({
|
421
|
+
selectTab: function(view){
|
422
|
+
var selected = this.get("selected");
|
423
|
+
if(selected){
|
424
|
+
selected.set("active",false);
|
425
|
+
}
|
426
|
+
this.set("selected", view);
|
427
|
+
view.set("active", true);
|
428
|
+
},
|
429
|
+
tabs: function(){
|
430
|
+
var result = [],
|
431
|
+
first = true,
|
432
|
+
self = this;
|
433
|
+
|
434
|
+
this.get("childViews").forEach(function(view){
|
435
|
+
if(view.constructor + "" === "App.TabContentsComponent"){
|
436
|
+
result.push(view);
|
437
|
+
if(first){
|
438
|
+
self.selectTab(view);
|
439
|
+
first = false;
|
440
|
+
}
|
441
|
+
}
|
442
|
+
});
|
443
|
+
return result;
|
444
|
+
}.property()
|
445
|
+
});
|
446
|
+
App.TabContentsComponent = Ember.Component.extend({
|
447
|
+
classNameBindings: ["active", ":content"]
|
448
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
{{yield}}
|
@@ -20,7 +20,10 @@
|
|
20
20
|
<div id="divider"></div>
|
21
21
|
<div id="bottom-panel">
|
22
22
|
<div class="message-info">
|
23
|
-
|
23
|
+
{{#tabbed-section}}
|
24
|
+
{{#tab-contents name="info" hint="show info"}}<pre>{{currentMessage.message}}</pre>{{/tab-contents}}
|
25
|
+
{{#tab-contents name="backtrace" hint="show backtrace"}}<pre>{{currentMessage.backtrace}}</pre>{{/tab-contents}}
|
26
|
+
{{/tabbed-section}}
|
24
27
|
</div>
|
25
28
|
|
26
29
|
<div class="action-panel">
|
data/assets/stylesheets/app.css
CHANGED
@@ -193,3 +193,52 @@ tr.show-more {
|
|
193
193
|
cursor: row-resize;
|
194
194
|
opacity: 0;
|
195
195
|
}
|
196
|
+
|
197
|
+
.message-info .content {
|
198
|
+
position: absolute;
|
199
|
+
top: 5;
|
200
|
+
bottom: 40;
|
201
|
+
left: 5;
|
202
|
+
right: 5;
|
203
|
+
overflow: auto;
|
204
|
+
display: none;
|
205
|
+
}
|
206
|
+
|
207
|
+
.message-info .content.active {
|
208
|
+
display: block;
|
209
|
+
}
|
210
|
+
|
211
|
+
|
212
|
+
.tabs {
|
213
|
+
position: absolute;
|
214
|
+
bottom: 10;
|
215
|
+
left: 0;
|
216
|
+
right: 0;
|
217
|
+
list-style-type: none;
|
218
|
+
border-top: 1px solid #ddd;
|
219
|
+
margin: 0 0 5px;
|
220
|
+
padding: 0 0 0 14px;
|
221
|
+
}
|
222
|
+
.tabs li {
|
223
|
+
float: left;
|
224
|
+
position: relative;
|
225
|
+
padding-right: 5px;
|
226
|
+
margin: 0;
|
227
|
+
}
|
228
|
+
.tabs a {
|
229
|
+
position: relative;
|
230
|
+
top: 4px;
|
231
|
+
text-decoration: none;
|
232
|
+
color: #333;
|
233
|
+
border: 1px solid #ddd;
|
234
|
+
border-top: none;
|
235
|
+
border-bottom-left-radius: 5px;
|
236
|
+
border-bottom-right-radius: 5px;
|
237
|
+
padding: 4px;
|
238
|
+
background-color: #e1e1e1;
|
239
|
+
}
|
240
|
+
|
241
|
+
.tabs a.active{
|
242
|
+
border-top: 1px solid #f1f1f1;
|
243
|
+
background-color: #f1f1f1;
|
244
|
+
}
|
data/bower.json
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"name": "logster",
|
3
|
+
"version": "0.0.3",
|
4
|
+
"homepage": "https://github.com/SamSaffron/logster",
|
5
|
+
"description": "logging framework and viewer",
|
6
|
+
"authors": [
|
7
|
+
"Sam Saffron"
|
8
|
+
],
|
9
|
+
"license": "MIT",
|
10
|
+
"private": true,
|
11
|
+
"ignore": [
|
12
|
+
"**/.*",
|
13
|
+
"node_modules",
|
14
|
+
"bower_components",
|
15
|
+
"test",
|
16
|
+
"tests"
|
17
|
+
],
|
18
|
+
"dependencies": {
|
19
|
+
"ember": "~1.5.1",
|
20
|
+
"lodash": "~2.4.1",
|
21
|
+
"moment": "~2.6.0",
|
22
|
+
"qunit": "~1.14.0"
|
23
|
+
}
|
24
|
+
}
|
data/lib/logster/message.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Logster
|
2
2
|
class Message
|
3
|
-
attr_accessor :timestamp, :severity, :progname, :message, :key
|
3
|
+
attr_accessor :timestamp, :severity, :progname, :message, :key, :backtrace
|
4
4
|
|
5
5
|
def initialize(severity, progname, message, timestamp = nil, key = nil)
|
6
6
|
@timestamp = timestamp || get_timestamp
|
@@ -8,6 +8,7 @@ module Logster
|
|
8
8
|
@progname = progname
|
9
9
|
@message = message
|
10
10
|
@key = key || SecureRandom.hex
|
11
|
+
@backtrace = nil
|
11
12
|
end
|
12
13
|
|
13
14
|
def to_h
|
@@ -16,7 +17,8 @@ module Logster
|
|
16
17
|
progname: @progname,
|
17
18
|
severity: @severity,
|
18
19
|
timestamp: @timestamp,
|
19
|
-
key: @key
|
20
|
+
key: @key,
|
21
|
+
backtrace: @backtrace
|
20
22
|
}
|
21
23
|
end
|
22
24
|
|
@@ -26,11 +28,13 @@ module Logster
|
|
26
28
|
|
27
29
|
def self.from_json(json)
|
28
30
|
parsed = ::JSON.parse(json)
|
29
|
-
new( parsed["severity"],
|
31
|
+
msg = new( parsed["severity"],
|
30
32
|
parsed["progname"],
|
31
33
|
parsed["message"],
|
32
34
|
parsed["timestamp"],
|
33
35
|
parsed["key"] )
|
36
|
+
msg.backtrace = parsed["backtrace"]
|
37
|
+
msg
|
34
38
|
end
|
35
39
|
|
36
40
|
protected
|
@@ -103,8 +103,16 @@ module Logster
|
|
103
103
|
"<script src='#{@logs_path}/javascript/#{name}'></script>"
|
104
104
|
end
|
105
105
|
|
106
|
+
def component(name)
|
107
|
+
ember_template("components/#{name}", "components/" << name)
|
108
|
+
end
|
109
|
+
|
106
110
|
def handlebars(name)
|
107
|
-
|
111
|
+
ember_template("templates/#{name}", name)
|
112
|
+
end
|
113
|
+
|
114
|
+
def ember_template(location, name)
|
115
|
+
val = File.read("#{@assets_path}/javascript/#{location}.handlebars")
|
108
116
|
<<JS
|
109
117
|
<script>
|
110
118
|
Ember.TEMPLATES[#{name.inspect}] = Ember.Handlebars.compile(#{val.inspect});
|
@@ -125,6 +133,8 @@ JS
|
|
125
133
|
#{handlebars("application")}
|
126
134
|
#{handlebars("index")}
|
127
135
|
#{handlebars("message")}
|
136
|
+
#{component("tabbed-section")}
|
137
|
+
#{component("tab-contents")}
|
128
138
|
<script>
|
129
139
|
window.Logger = {
|
130
140
|
rootPath: "#{@logs_path}"
|
data/lib/logster/redis_store.rb
CHANGED
@@ -4,7 +4,8 @@ module Logster
|
|
4
4
|
class RedisStore
|
5
5
|
|
6
6
|
attr_accessor :level, :redis, :max_backlog,
|
7
|
-
:dedup, :max_retention, :skip_empty
|
7
|
+
:dedup, :max_retention, :skip_empty,
|
8
|
+
:ignore
|
8
9
|
|
9
10
|
def initialize(redis = nil)
|
10
11
|
@redis = redis || Redis.new
|
@@ -15,11 +16,19 @@ module Logster
|
|
15
16
|
end
|
16
17
|
|
17
18
|
|
18
|
-
def report(severity, progname, message)
|
19
|
+
def report(severity, progname, message, opts = nil)
|
19
20
|
return if (!message || (String === message && message.empty?)) && skip_empty
|
20
21
|
return if level && severity < level
|
22
|
+
return if @ignore && @ignore.any?{|pattern| message =~ pattern}
|
21
23
|
|
22
24
|
message = Message.new(severity, progname, message)
|
25
|
+
|
26
|
+
if opts && opts[:backtrace]
|
27
|
+
message.backtrace = backtrace
|
28
|
+
else
|
29
|
+
message.backtrace = caller.join("\n")
|
30
|
+
end
|
31
|
+
|
23
32
|
@redis.rpush(list_key, message.to_json)
|
24
33
|
|
25
34
|
# TODO make it atomic
|
data/lib/logster/version.rb
CHANGED
@@ -133,4 +133,18 @@ class TestRedisStore < Minitest::Test
|
|
133
133
|
assert_equal(1, latest.length)
|
134
134
|
end
|
135
135
|
|
136
|
+
def test_backtrace
|
137
|
+
@store.report(Logger::INFO, "test", "pattern_1")
|
138
|
+
message = @store.latest(limit: 1).first
|
139
|
+
assert_match("test_backtrace", message.backtrace)
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_ignore
|
143
|
+
@store.ignore = [/^test/]
|
144
|
+
@store.report(Logger::INFO, "test", "test it")
|
145
|
+
@store.report(Logger::INFO, "test", " test it")
|
146
|
+
|
147
|
+
assert_equal(1, @store.latest.count)
|
148
|
+
end
|
149
|
+
|
136
150
|
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.4
|
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-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,8 @@ files:
|
|
108
108
|
- README.md
|
109
109
|
- Rakefile
|
110
110
|
- assets/javascript/app.js
|
111
|
+
- assets/javascript/components/tab-contents.handlebars
|
112
|
+
- assets/javascript/components/tabbed-section.handlebars
|
111
113
|
- assets/javascript/external/ember.js
|
112
114
|
- assets/javascript/external/ember.min.js
|
113
115
|
- assets/javascript/external/handlebars.min.js
|
@@ -118,6 +120,7 @@ files:
|
|
118
120
|
- assets/javascript/templates/index.handlebars
|
119
121
|
- assets/javascript/templates/message.handlebars
|
120
122
|
- assets/stylesheets/app.css
|
123
|
+
- bower.json
|
121
124
|
- lib/logster.rb
|
122
125
|
- lib/logster/configuration.rb
|
123
126
|
- lib/logster/logger.rb
|