logster 2.9.0 → 2.9.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/.github/workflows/ci.yml +63 -0
 - data/.rubocop.yml +6 -0
 - data/CHANGELOG.md +23 -0
 - data/assets/javascript/client-app.js +65 -57
 - data/client-app/app/controllers/index.js +12 -14
 - data/client-app/app/lib/utilities.js +34 -0
 - data/client-app/app/models/message-collection.js +13 -2
 - data/client-app/app/routes/index.js +7 -1
 - data/client-app/package-lock.json +25640 -219
 - data/lib/logster/message.rb +3 -2
 - data/lib/logster/middleware/debug_exceptions.rb +2 -4
 - data/lib/logster/redis_store.rb +4 -1
 - data/lib/logster/version.rb +1 -1
 - data/logster.gemspec +1 -1
 - data/test/logster/middleware/test_reporter.rb +3 -3
 - data/test/logster/test_base_store.rb +12 -0
 - data/test/logster/test_redis_store.rb +18 -0
 - metadata +8 -8
 - data/.travis.yml +0 -17
 
    
        data/lib/logster/message.rb
    CHANGED
    
    | 
         @@ -99,7 +99,7 @@ module Logster 
     | 
|
| 
       99 
99 
     | 
    
         
             
                      env["time"] = @timestamp || get_timestamp
         
     | 
| 
       100 
100 
     | 
    
         
             
                    end
         
     | 
| 
       101 
101 
     | 
    
         
             
                  end
         
     | 
| 
       102 
     | 
    
         
            -
                   
     | 
| 
      
 102 
     | 
    
         
            +
                  self.env = Message.populate_from_env(env)
         
     | 
| 
       103 
103 
     | 
    
         
             
                end
         
     | 
| 
       104 
104 
     | 
    
         | 
| 
       105 
105 
     | 
    
         
             
                def self.default_env
         
     | 
| 
         @@ -113,7 +113,8 @@ module Logster 
     | 
|
| 
       113 
113 
     | 
    
         | 
| 
       114 
114 
     | 
    
         
             
                # in its own method so it can be overridden
         
     | 
| 
       115 
115 
     | 
    
         
             
                def grouping_hash
         
     | 
| 
       116 
     | 
    
         
            -
                   
     | 
| 
      
 116 
     | 
    
         
            +
                  message = self.message.gsub(/[0-9a-f]+/i, "X")
         
     | 
| 
      
 117 
     | 
    
         
            +
                  { message: message, severity: self.severity, backtrace: self.backtrace }
         
     | 
| 
       117 
118 
     | 
    
         
             
                end
         
     | 
| 
       118 
119 
     | 
    
         | 
| 
       119 
120 
     | 
    
         
             
                # todo - memoize?
         
     | 
| 
         @@ -14,13 +14,11 @@ class Logster::Middleware::DebugExceptions < ActionDispatch::DebugExceptions 
     | 
|
| 
       14 
14 
     | 
    
         
             
                exception = wrapper.exception
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                Logster.config.current_context.call(env) do
         
     | 
| 
       17 
     | 
    
         
            -
                  location = exception.backtrace[0]
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
17 
     | 
    
         
             
                  Logster.logger.add_with_opts(
         
     | 
| 
       20 
18 
     | 
    
         
             
                    ::Logger::Severity::FATAL,
         
     | 
| 
       21 
     | 
    
         
            -
                    "#{exception.class} (#{exception})\n#{ 
     | 
| 
      
 19 
     | 
    
         
            +
                    "#{exception.class} (#{exception})\n#{wrapper.application_trace.join("\n")}",
         
     | 
| 
       22 
20 
     | 
    
         
             
                    "web-exception",
         
     | 
| 
       23 
     | 
    
         
            -
                    backtrace:  
     | 
| 
      
 21 
     | 
    
         
            +
                    backtrace: wrapper.full_trace.join("\n"),
         
     | 
| 
       24 
22 
     | 
    
         
             
                    env: env
         
     | 
| 
       25 
23 
     | 
    
         
             
                  )
         
     | 
| 
       26 
24 
     | 
    
         
             
                end
         
     | 
    
        data/lib/logster/redis_store.rb
    CHANGED
    
    | 
         @@ -342,7 +342,10 @@ module Logster 
     | 
|
| 
       342 
342 
     | 
    
         
             
                def rate_limited?(ip_address, perform: false, limit: 60)
         
     | 
| 
       343 
343 
     | 
    
         
             
                  key = ip_rate_limit_key(ip_address)
         
     | 
| 
       344 
344 
     | 
    
         | 
| 
       345 
     | 
    
         
            -
                  limited = @redis.exists 
     | 
| 
      
 345 
     | 
    
         
            +
                  limited = @redis.call([:exists, key])
         
     | 
| 
      
 346 
     | 
    
         
            +
                  if Integer === limited
         
     | 
| 
      
 347 
     | 
    
         
            +
                    limited = limited != 0
         
     | 
| 
      
 348 
     | 
    
         
            +
                  end
         
     | 
| 
       346 
349 
     | 
    
         | 
| 
       347 
350 
     | 
    
         
             
                  if perform && !limited
         
     | 
| 
       348 
351 
     | 
    
         
             
                    @redis.setex key, limit, ""
         
     | 
    
        data/lib/logster/version.rb
    CHANGED
    
    
    
        data/logster.gemspec
    CHANGED
    
    | 
         @@ -33,5 +33,5 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       33 
33 
     | 
    
         
             
              spec.add_development_dependency "guard-minitest"
         
     | 
| 
       34 
34 
     | 
    
         
             
              spec.add_development_dependency "timecop"
         
     | 
| 
       35 
35 
     | 
    
         
             
              spec.add_development_dependency "byebug", "~> 11.1.0"
         
     | 
| 
       36 
     | 
    
         
            -
              spec.add_development_dependency "rubocop-discourse" 
     | 
| 
      
 36 
     | 
    
         
            +
              spec.add_development_dependency "rubocop-discourse"
         
     | 
| 
       37 
37 
     | 
    
         
             
            end
         
     | 
| 
         @@ -28,19 +28,19 @@ class TestReporter < Minitest::Test 
     | 
|
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                reporter = Logster::Middleware::Reporter.new(nil)
         
     | 
| 
       30 
30 
     | 
    
         
             
                env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello")
         
     | 
| 
       31 
     | 
    
         
            -
                 
     | 
| 
      
 31 
     | 
    
         
            +
                reporter.call(env)
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                assert_equal(Logger::Severity::WARN, Logster.store.latest[-1].severity)
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                reporter = Logster::Middleware::Reporter.new(nil)
         
     | 
| 
       36 
36 
     | 
    
         
             
                env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello&severity=invalid")
         
     | 
| 
       37 
     | 
    
         
            -
                 
     | 
| 
      
 37 
     | 
    
         
            +
                reporter.call(env)
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
                assert_equal(Logger::Severity::WARN, Logster.store.latest[-1].severity)
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
                reporter = Logster::Middleware::Reporter.new(nil)
         
     | 
| 
       42 
42 
     | 
    
         
             
                env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello&severity=error")
         
     | 
| 
       43 
     | 
    
         
            -
                 
     | 
| 
      
 43 
     | 
    
         
            +
                reporter.call(env)
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
                assert_equal(Logger::Severity::ERROR, Logster.store.latest[-1].severity)
         
     | 
| 
       46 
46 
     | 
    
         
             
              end
         
     | 
| 
         @@ -188,4 +188,16 @@ class TestBaseStore < Minitest::Test 
     | 
|
| 
       188 
188 
     | 
    
         
             
                  refute_includes(store.reported.first.env.keys.map(&:to_sym), :backtrace)
         
     | 
| 
       189 
189 
     | 
    
         
             
                end
         
     | 
| 
       190 
190 
     | 
    
         
             
              end
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
              def test_envs_with_invalid_encoding_dont_raise_errors
         
     | 
| 
      
 193 
     | 
    
         
            +
                msg = @store.report(
         
     | 
| 
      
 194 
     | 
    
         
            +
                  Logger::WARN,
         
     | 
| 
      
 195 
     | 
    
         
            +
                  '',
         
     | 
| 
      
 196 
     | 
    
         
            +
                  'me have invalid encoding',
         
     | 
| 
      
 197 
     | 
    
         
            +
                  env: {
         
     | 
| 
      
 198 
     | 
    
         
            +
                    axe: "a\xF1xasa"
         
     | 
| 
      
 199 
     | 
    
         
            +
                  }
         
     | 
| 
      
 200 
     | 
    
         
            +
                )
         
     | 
| 
      
 201 
     | 
    
         
            +
                assert_equal("a�xasa", msg.env[:axe])
         
     | 
| 
      
 202 
     | 
    
         
            +
              end
         
     | 
| 
       191 
203 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1044,6 +1044,24 @@ class TestRedisStore < Minitest::Test 
     | 
|
| 
       1044 
1044 
     | 
    
         
             
                end
         
     | 
| 
       1045 
1045 
     | 
    
         
             
              end
         
     | 
| 
       1046 
1046 
     | 
    
         | 
| 
      
 1047 
     | 
    
         
            +
              def test_messages_that_differ_only_by_numbers_or_hashes_are_merged
         
     | 
| 
      
 1048 
     | 
    
         
            +
                config_reset(allow_grouping: true) do
         
     | 
| 
      
 1049 
     | 
    
         
            +
                  first_message = <<~TEXT
         
     | 
| 
      
 1050 
     | 
    
         
            +
                    DistributedMutex("download_20450e291e8f1e5ba03ca7f20fb7d9da570c94a6"):
         
     | 
| 
      
 1051 
     | 
    
         
            +
                    held for too long, expected max: 60 secs, took an extra 73 secs
         
     | 
| 
      
 1052 
     | 
    
         
            +
                  TEXT
         
     | 
| 
      
 1053 
     | 
    
         
            +
                  msg = @store.report(Logger::WARN, '', first_message, backtrace: caller)
         
     | 
| 
      
 1054 
     | 
    
         
            +
             
     | 
| 
      
 1055 
     | 
    
         
            +
                  second_message = <<~TEXT
         
     | 
| 
      
 1056 
     | 
    
         
            +
                    DistributedMutex("download_e09ae082c60a351dedec67ed869652862b232a0b"):
         
     | 
| 
      
 1057 
     | 
    
         
            +
                    held for too long, expected max: 60 secs, took an extra 287 secs
         
     | 
| 
      
 1058 
     | 
    
         
            +
                  TEXT
         
     | 
| 
      
 1059 
     | 
    
         
            +
                  msg2 = @store.report(Logger::WARN, '', second_message, backtrace: caller)
         
     | 
| 
      
 1060 
     | 
    
         
            +
             
     | 
| 
      
 1061 
     | 
    
         
            +
                  assert_equal(msg.key, msg2.key)
         
     | 
| 
      
 1062 
     | 
    
         
            +
                end
         
     | 
| 
      
 1063 
     | 
    
         
            +
              end
         
     | 
| 
      
 1064 
     | 
    
         
            +
             
     | 
| 
       1047 
1065 
     | 
    
         
             
              private
         
     | 
| 
       1048 
1066 
     | 
    
         | 
| 
       1049 
1067 
     | 
    
         
             
              def config_reset(configs)
         
     | 
    
        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: 2.9. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.9.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sam Saffron
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-01-21 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -126,16 +126,16 @@ dependencies: 
     | 
|
| 
       126 
126 
     | 
    
         
             
              name: rubocop-discourse
         
     | 
| 
       127 
127 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       128 
128 
     | 
    
         
             
                requirements:
         
     | 
| 
       129 
     | 
    
         
            -
                - - " 
     | 
| 
      
 129 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       130 
130 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       131 
     | 
    
         
            -
                    version:  
     | 
| 
      
 131 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       132 
132 
     | 
    
         
             
              type: :development
         
     | 
| 
       133 
133 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       134 
134 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       135 
135 
     | 
    
         
             
                requirements:
         
     | 
| 
       136 
     | 
    
         
            -
                - - " 
     | 
| 
      
 136 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       137 
137 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       138 
     | 
    
         
            -
                    version:  
     | 
| 
      
 138 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       139 
139 
     | 
    
         
             
            description: UI for viewing logs in Rack
         
     | 
| 
       140 
140 
     | 
    
         
             
            email:
         
     | 
| 
       141 
141 
     | 
    
         
             
            - sam.saffron@gmail.com
         
     | 
| 
         @@ -143,9 +143,9 @@ executables: [] 
     | 
|
| 
       143 
143 
     | 
    
         
             
            extensions: []
         
     | 
| 
       144 
144 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       145 
145 
     | 
    
         
             
            files:
         
     | 
| 
      
 146 
     | 
    
         
            +
            - ".github/workflows/ci.yml"
         
     | 
| 
       146 
147 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       147 
148 
     | 
    
         
             
            - ".rubocop.yml"
         
     | 
| 
       148 
     | 
    
         
            -
            - ".travis.yml"
         
     | 
| 
       149 
149 
     | 
    
         
             
            - CHANGELOG.md
         
     | 
| 
       150 
150 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       151 
151 
     | 
    
         
             
            - Guardfile
         
     | 
| 
         @@ -295,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       295 
295 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       296 
296 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       297 
297 
     | 
    
         
             
            requirements: []
         
     | 
| 
       298 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 298 
     | 
    
         
            +
            rubygems_version: 3.0.3
         
     | 
| 
       299 
299 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       300 
300 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       301 
301 
     | 
    
         
             
            summary: UI for viewing logs in Rack
         
     |