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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b23208e3d79e4cb73cbe9e80126b478cf04d6a2
4
- data.tar.gz: 5b6eadd9d5eebe2c73ca8011fe95adf7f35ae1ff
3
+ metadata.gz: 709b0b8ef1153c5a292e07e8531764850b2edbf7
4
+ data.tar.gz: 79f01414100ed958a1c552b6d0145d94bab3d753
5
5
  SHA512:
6
- metadata.gz: 048c85e54a50b34845fb61cf9c9c59c22e7f35833713636b5a03f408f58a319bd34474f6c0aa034730308ace8b20f886bb14e3818e16573846ef8e0731ae5260
7
- data.tar.gz: e98d6c25f00340deae55c94ad6f5d929e3df88d8a287e8a0bcf9d6fb4fd0407f0b111bf6f5cac1a30a918a34f1d648054cd993c9b429b46908e4ce97599202bc
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)
@@ -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
- 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()
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
 
@@ -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')
@@ -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
@@ -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
@@ -1,6 +1,14 @@
1
1
  module Logster
2
2
  class Message
3
- attr_accessor :timestamp, :severity, :progname, :message, :key, :backtrace
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
@@ -29,6 +29,10 @@ module Logster
29
29
  message.backtrace = caller.join("\n")
30
30
  end
31
31
 
32
+ if opts && env=opts[:env]
33
+ message.populate_from_env(env)
34
+ end
35
+
32
36
  @redis.rpush(list_key, message.to_json)
33
37
 
34
38
  # TODO make it atomic
@@ -1,3 +1,3 @@
1
1
  module Logster
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -3,7 +3,7 @@ require 'logster/logger'
3
3
  require 'logger'
4
4
 
5
5
  class NullStore
6
- def report(severity,progname,message)
6
+ def report(severity,progname,message,options=nil)
7
7
  end
8
8
  end
9
9
 
@@ -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
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-07 00:00:00.000000000 Z
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.0
160
+ rubygems_version: 2.2.2
159
161
  signing_key:
160
162
  specification_version: 4
161
163
  summary: UI for viewing logs in Rack