logster 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/javascript/app.js +19 -13
- data/assets/javascript/components/message-info.handlebars +7 -5
- data/assets/javascript/templates/show.handlebars +1 -3
- data/assets/stylesheets/app.css +5 -0
- data/lib/logster/message.rb +4 -2
- data/lib/logster/middleware/viewer.rb +20 -9
- data/lib/logster/redis_store.rb +7 -4
- data/lib/logster/version.rb +1 -1
- data/test/logster/test_redis_store.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b21c5ac2f54261afd0a6b2b35bff091e19b8c585
|
4
|
+
data.tar.gz: 2f14a5000271e1017c380379cbcf377025747eda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 423e3ed1d419725174e2593f237274821edcc0b904f7286d7e88f0afccc040a321de66a9d410b6e646b153060f0fd094a54fa46c6387e8f418b1c48a49c50994
|
7
|
+
data.tar.gz: 59143d70c2839be397e98025ae4d66fd4e987e3bc86d7d5c382f851cd4cafa19fc7fc79f7549a85096fa56b8a4ec08cec72221c2fb4857cd2aa5b2bd74eb4856
|
data/assets/javascript/app.js
CHANGED
@@ -59,12 +59,12 @@ App.Message = Ember.Object.extend({
|
|
59
59
|
},
|
60
60
|
|
61
61
|
protect: function() {
|
62
|
-
this.set('
|
62
|
+
this.set('protected', true);
|
63
63
|
return App.ajax("/protect/" + this.get('key'), { type: "PUT" });
|
64
64
|
},
|
65
65
|
unprotect: function() {
|
66
|
-
this.set('
|
67
|
-
return App.ajax("/
|
66
|
+
this.set('protected', false);
|
67
|
+
return App.ajax("/unprotect/" + this.get('key'), { type: "DELETE" });
|
68
68
|
},
|
69
69
|
|
70
70
|
hasMore: function(){
|
@@ -78,6 +78,10 @@ App.Message = Ember.Object.extend({
|
|
78
78
|
return Logger.rootPath + "/show/" + this.get('key');
|
79
79
|
}.property("key"),
|
80
80
|
|
81
|
+
protectUrl: function() {
|
82
|
+
return Logger.rootPath + (this.get('protected') ? '/unprotect/' : '/protect/') + this.get('key');
|
83
|
+
}.property("key"),
|
84
|
+
|
81
85
|
displayMessage: function(){
|
82
86
|
var message = this.get("message");
|
83
87
|
var expanded = this.get("expanded");
|
@@ -279,16 +283,6 @@ App.ShowRoute = Em.Route.extend({
|
|
279
283
|
resolve(App.Message.create(json));
|
280
284
|
}).error(reject);
|
281
285
|
});
|
282
|
-
},
|
283
|
-
|
284
|
-
actions: {
|
285
|
-
protect: function(message) {
|
286
|
-
this.get('model').protect();
|
287
|
-
},
|
288
|
-
|
289
|
-
unprotect: function(message) {
|
290
|
-
this.get('model').unprotect();
|
291
|
-
}
|
292
286
|
}
|
293
287
|
});
|
294
288
|
|
@@ -370,6 +364,18 @@ App.IndexController = Em.Controller.extend({
|
|
370
364
|
}
|
371
365
|
});
|
372
366
|
|
367
|
+
App.ShowController = Em.Controller.extend({
|
368
|
+
actions: {
|
369
|
+
protect: function(message) {
|
370
|
+
this.get('model').protect();
|
371
|
+
},
|
372
|
+
|
373
|
+
unprotect: function(message) {
|
374
|
+
this.get('model').unprotect();
|
375
|
+
}
|
376
|
+
}
|
377
|
+
});
|
378
|
+
|
373
379
|
App.IndexView = Em.View.extend({
|
374
380
|
divideView: function(fromTop, win){
|
375
381
|
var $win = win || $(window);
|
@@ -4,11 +4,13 @@
|
|
4
4
|
<pre>{{currentMessage.message}}</pre>
|
5
5
|
{{#if currentMessage}}
|
6
6
|
<a {{bind-attr href=currentMessage.shareUrl}} class="share">Share</a>
|
7
|
-
{{
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
<a {{bind-attr href=currentMessage.protectUrl}} class="save">
|
8
|
+
{{#if currentMessage.protected}}
|
9
|
+
Unprotect
|
10
|
+
{{else}}
|
11
|
+
Protect
|
12
|
+
{{/if}}
|
13
|
+
</a>
|
12
14
|
{{/if}}
|
13
15
|
{{/tab-contents}}
|
14
16
|
{{#tab-contents name="backtrace" hint="show backtrace"}}<pre>{{currentMessage.backtrace}}</pre>{{/tab-contents}}
|
data/assets/stylesheets/app.css
CHANGED
data/lib/logster/message.rb
CHANGED
@@ -12,7 +12,7 @@ module Logster
|
|
12
12
|
HTTP_X_REAL_IP
|
13
13
|
}
|
14
14
|
|
15
|
-
attr_accessor :timestamp, :severity, :progname, :message, :key, :backtrace, :count, :env
|
15
|
+
attr_accessor :timestamp, :severity, :progname, :message, :key, :backtrace, :count, :env, :protected
|
16
16
|
|
17
17
|
def initialize(severity, progname, message, timestamp = nil, key = nil)
|
18
18
|
@timestamp = timestamp || get_timestamp
|
@@ -22,6 +22,7 @@ module Logster
|
|
22
22
|
@key = key || SecureRandom.hex
|
23
23
|
@backtrace = nil
|
24
24
|
@count = 1
|
25
|
+
@protected = false
|
25
26
|
end
|
26
27
|
|
27
28
|
def to_h
|
@@ -33,7 +34,8 @@ module Logster
|
|
33
34
|
key: @key,
|
34
35
|
backtrace: @backtrace,
|
35
36
|
count: @count,
|
36
|
-
env: @env
|
37
|
+
env: @env,
|
38
|
+
protected: @protected
|
37
39
|
}
|
38
40
|
end
|
39
41
|
|
@@ -39,16 +39,27 @@ module Logster
|
|
39
39
|
@fileserver.call(env)
|
40
40
|
elsif resource.start_with?("/messages.json")
|
41
41
|
serve_messages(Rack::Request.new(env))
|
42
|
-
elsif resource =~ /\/protect\/([0-9a-f]+)$/
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
42
|
+
elsif resource =~ /\/(un)?protect\/([0-9a-f]+)$/
|
43
|
+
off = $1 == "un"
|
44
|
+
key = $2
|
45
|
+
|
46
|
+
message = Logster.store.get(key)
|
47
|
+
unless message
|
48
|
+
return [404, {}, ["Message not found"]]
|
49
|
+
end
|
50
|
+
|
51
|
+
if off
|
52
|
+
if Logster.store.unprotect(key)
|
53
|
+
return [301, {"Location" => "#{@logs_path}/show/#{key}?protected=false"}, []]
|
54
|
+
else
|
55
|
+
return [500, {}, ["Failed"]]
|
56
|
+
end
|
50
57
|
else
|
51
|
-
|
58
|
+
if Logster.store.protect(key)
|
59
|
+
return [301, {"Location" => "#{@logs_path}/show/#{key}?protected=true"}, []]
|
60
|
+
else
|
61
|
+
return [500, {}, ["Failed"]]
|
62
|
+
end
|
52
63
|
end
|
53
64
|
elsif resource =~ /\/show\/([0-9a-f]+)(\.json)?$/
|
54
65
|
key = $1
|
data/lib/logster/redis_store.rb
CHANGED
@@ -122,15 +122,18 @@ module Logster
|
|
122
122
|
json = @redis.hget(hash_key, message_key)
|
123
123
|
return nil unless json
|
124
124
|
|
125
|
-
Message.from_json(json)
|
125
|
+
message = Message.from_json(json)
|
126
|
+
message.protected = @redis.sismember(protected_key, message_key)
|
127
|
+
message
|
126
128
|
end
|
127
129
|
|
128
130
|
def protect(message_key)
|
129
|
-
|
130
|
-
#
|
131
|
-
return false unless
|
131
|
+
json = @redis.hget(hash_key, message_key)
|
132
|
+
# Message already lost
|
133
|
+
return false unless json
|
132
134
|
|
133
135
|
@redis.sadd(protected_key, message_key)
|
136
|
+
|
134
137
|
true
|
135
138
|
end
|
136
139
|
|
data/lib/logster/version.rb
CHANGED
@@ -108,10 +108,12 @@ class TestRedisStore < Minitest::Test
|
|
108
108
|
|
109
109
|
# Saved messages still accessible by key
|
110
110
|
assert_equal("B", @store.get(b_message.key).message)
|
111
|
+
assert_equal(true, @store.get(b_message.key).protected)
|
111
112
|
|
112
113
|
# Unsave does not delete message if still recent
|
113
114
|
@store.unprotect c_message.key
|
114
115
|
assert_equal("C", @store.get(c_message.key).message)
|
116
|
+
assert_equal(false, @store.get(c_message.key).protected)
|
115
117
|
|
116
118
|
# Unsave *does* delete message if not recent
|
117
119
|
@store.unprotect b_message.key
|
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.12
|
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-07-
|
11
|
+
date: 2014-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|