logster 1.3.4 → 1.4.0.pre
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/.travis.yml +2 -1
- data/CHANGELOG.md +7 -0
- data/README.md +1 -1
- data/Rakefile +0 -3
- data/assets/javascript/client-app.js +41 -33
- data/assets/stylesheets/client-app.css +1 -1
- data/client-app/app/components/env-tab.js +44 -0
- data/client-app/app/components/message-row.js +1 -1
- data/client-app/app/components/panel-resizer.js +4 -5
- data/client-app/app/controllers/index.js +15 -2
- data/client-app/app/models/message-collection.js +25 -5
- data/client-app/app/models/message.js +9 -8
- data/client-app/app/styles/app.css +63 -54
- data/client-app/app/templates/components/env-tab.hbs +10 -0
- data/client-app/app/templates/components/message-info.hbs +1 -1
- data/client-app/app/templates/components/message-row.hbs +10 -12
- data/client-app/app/templates/index.hbs +9 -16
- data/client-app/tests/integration/components/env-tab-test.js +73 -0
- data/lib/logster/base_store.rb +2 -5
- data/lib/logster/ignore_pattern.rb +1 -1
- data/lib/logster/logger.rb +1 -1
- data/lib/logster/message.rb +53 -27
- data/lib/logster/redis_store.rb +58 -7
- data/lib/logster/version.rb +1 -1
- data/test/logster/test_message.rb +59 -0
- data/test/logster/test_redis_store.rb +130 -7
- metadata +7 -4
| @@ -198,28 +198,29 @@ class TestRedisStore < Minitest::Test | |
| 198 198 | 
             
              end
         | 
| 199 199 |  | 
| 200 200 | 
             
              def test_search
         | 
| 201 | 
            -
                @store.report(Logger::INFO, "test", " | 
| 202 | 
            -
                @store.report(Logger::INFO, "test", " | 
| 201 | 
            +
                @store.report(Logger::INFO, "test", "ABCDEFG")
         | 
| 202 | 
            +
                @store.report(Logger::INFO, "test", "TUVWXYZ")
         | 
| 203 203 |  | 
| 204 204 | 
             
                messages = @store.latest
         | 
| 205 205 | 
             
                assert_equal(2, messages.length)
         | 
| 206 206 |  | 
| 207 | 
            -
                latest = @store.latest(search: " | 
| 207 | 
            +
                latest = @store.latest(search: "TUVWXYZ")
         | 
| 208 208 |  | 
| 209 209 | 
             
                assert_equal(1, latest.length)
         | 
| 210 | 
            +
                assert_equal("TUVWXYZ", latest[0].message)
         | 
| 210 211 | 
             
              end
         | 
| 211 212 |  | 
| 212 213 | 
             
              def test_search_exclude_results
         | 
| 213 | 
            -
                @store.report(Logger::INFO, "test", " | 
| 214 | 
            -
                @store.report(Logger::INFO, "test", " | 
| 214 | 
            +
                @store.report(Logger::INFO, "test", "ABCDEFG")
         | 
| 215 | 
            +
                @store.report(Logger::INFO, "test", "TUVWXYZ")
         | 
| 215 216 |  | 
| 216 217 | 
             
                messages = @store.latest
         | 
| 217 218 | 
             
                assert_equal(2, messages.length)
         | 
| 218 219 |  | 
| 219 | 
            -
                latest = @store.latest(search: "- | 
| 220 | 
            +
                latest = @store.latest(search: "-ABCD")
         | 
| 220 221 |  | 
| 221 222 | 
             
                assert_equal(1, latest.length)
         | 
| 222 | 
            -
                assert_equal(" | 
| 223 | 
            +
                assert_equal("TUVWXYZ", latest[0].message)
         | 
| 223 224 | 
             
              end
         | 
| 224 225 |  | 
| 225 226 | 
             
              def test_regex_search
         | 
| @@ -234,6 +235,128 @@ class TestRedisStore < Minitest::Test | |
| 234 235 | 
             
                assert_equal(1, latest.length)
         | 
| 235 236 | 
             
              end
         | 
| 236 237 |  | 
| 238 | 
            +
              def test_env_search
         | 
| 239 | 
            +
                @store.report(Logger::INFO, "test", "message ABCD", env: { cluster: "business5" })
         | 
| 240 | 
            +
                @store.report(Logger::INFO, "test", "message WXYZ", env: { cluster: "business7" })
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                messages = @store.latest
         | 
| 243 | 
            +
                assert_equal(2, messages.length)
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                latest = @store.latest(search: "business5")
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                assert_equal(1, latest.length)
         | 
| 248 | 
            +
                assert_equal("message ABCD", latest[0].message)
         | 
| 249 | 
            +
             | 
| 250 | 
            +
                latest = @store.latest(search: "-business5")
         | 
| 251 | 
            +
             | 
| 252 | 
            +
                assert_equal(1, latest.length)
         | 
| 253 | 
            +
                assert_equal("message WXYZ", latest[0].message)
         | 
| 254 | 
            +
             | 
| 255 | 
            +
                latest = @store.latest(search: /business/)
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                assert_equal(2, latest.length)
         | 
| 258 | 
            +
                assert_equal(["message ABCD", "message WXYZ"], latest.map(&:message).sort)
         | 
| 259 | 
            +
              end
         | 
| 260 | 
            +
             | 
| 261 | 
            +
              def test_array_env_search_preserve_env
         | 
| 262 | 
            +
                m1_original_env = [{ cluster: "business5" }, { cluster: "standard3" }]
         | 
| 263 | 
            +
                m2_original_env = [{ cluster: "business2" }, { cluster: "standard7" }]
         | 
| 264 | 
            +
             | 
| 265 | 
            +
                @store.report(Logger::INFO, "test", "message ABCD", env: m1_original_env, count: 2)
         | 
| 266 | 
            +
                @store.report(Logger::INFO, "test", "message WXYZ", env: m2_original_env, count: 2)
         | 
| 267 | 
            +
             | 
| 268 | 
            +
                messages = @store.latest
         | 
| 269 | 
            +
                assert_equal(2, messages.length)
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                m1_key = messages[0].key
         | 
| 272 | 
            +
                m2_key = messages[1].key
         | 
| 273 | 
            +
             | 
| 274 | 
            +
                messages = @store.latest(search: "business")
         | 
| 275 | 
            +
                assert_equal(2, messages.size)
         | 
| 276 | 
            +
             | 
| 277 | 
            +
                # any hashes that don't match should be stripped from the env
         | 
| 278 | 
            +
                # array but only temporarily until it's sent to the client
         | 
| 279 | 
            +
                # env array should remain untouched in redis memory
         | 
| 280 | 
            +
                assert_equal(["business5"], messages[0].env.map { |env| env["cluster"]})
         | 
| 281 | 
            +
                assert_equal(1, messages[0].count)
         | 
| 282 | 
            +
                assert_equal(["business2"], messages[1].env.map { |env| env["cluster"]})
         | 
| 283 | 
            +
                assert_equal(1, messages[1].count)
         | 
| 284 | 
            +
             | 
| 285 | 
            +
                m1 = @store.get(m1_key)
         | 
| 286 | 
            +
                m2 = @store.get(m2_key)
         | 
| 287 | 
            +
                # original env should preserved in redis memory
         | 
| 288 | 
            +
                assert_equal(["business5", "standard3"], m1.env.map { |env| env["cluster"] })
         | 
| 289 | 
            +
                assert_equal(["business2", "standard7"], m2.env.map { |env| env["cluster"] })
         | 
| 290 | 
            +
              end
         | 
| 291 | 
            +
             | 
| 292 | 
            +
              def test_both_env_and_title_match_search
         | 
| 293 | 
            +
                @store.report(Logger::INFO, "test", "message", env: [{ cluster: "business15" }])
         | 
| 294 | 
            +
                @store.report(Logger::INFO, "test", "message2", env: { cluster: "business15" })
         | 
| 295 | 
            +
             | 
| 296 | 
            +
                messages = @store.latest
         | 
| 297 | 
            +
                assert_equal(2, messages.size)
         | 
| 298 | 
            +
             | 
| 299 | 
            +
                messages = @store.latest(search: "-business15")
         | 
| 300 | 
            +
                assert_equal(0, messages.size)
         | 
| 301 | 
            +
              end
         | 
| 302 | 
            +
             | 
| 303 | 
            +
              def test_data_kept_intact_on_report_when_env_matches_an_ignore_pattern
         | 
| 304 | 
            +
                begin
         | 
| 305 | 
            +
                  Logster.config.allow_grouping = true
         | 
| 306 | 
            +
                  backtrace = caller
         | 
| 307 | 
            +
                  message = @store.report(Logger::WARN, "", "my error", env: { whatever: "something", backtrace: backtrace })
         | 
| 308 | 
            +
             | 
| 309 | 
            +
                  @store.ignore = [
         | 
| 310 | 
            +
                      Logster::IgnorePattern.new("business")
         | 
| 311 | 
            +
                  ]
         | 
| 312 | 
            +
                  message2 = @store.report(Logger::WARN, "", "my error", env: { cluster: "business17", backtrace: backtrace })
         | 
| 313 | 
            +
             | 
| 314 | 
            +
                  message = @store.get(message.key)
         | 
| 315 | 
            +
                  assert(Array === message.env)
         | 
| 316 | 
            +
                  assert_equal(2, message.env.size)
         | 
| 317 | 
            +
                  # message2 shouldn't vanish even if
         | 
| 318 | 
            +
                  # its env matches an ignore pattern
         | 
| 319 | 
            +
                  # however it should be merged with message1
         | 
| 320 | 
            +
                  assert_equal("business17", message.env[1]["cluster"])
         | 
| 321 | 
            +
                ensure
         | 
| 322 | 
            +
                  # reset so it doesn't affect other tests
         | 
| 323 | 
            +
                  @store.ignore = nil
         | 
| 324 | 
            +
                  Logster.config.allow_grouping = false
         | 
| 325 | 
            +
                end
         | 
| 326 | 
            +
              end
         | 
| 327 | 
            +
             | 
| 328 | 
            +
              def test_array_env_negative_search
         | 
| 329 | 
            +
                @store.report(Logger::INFO, "test", "message ABCD", env: [{ cluster: "business5" }, { cluster: "standard3" }], count: 2)
         | 
| 330 | 
            +
                @store.report(Logger::INFO, "test", "message WXYZ", env: [{ cluster: "business2" }, { cluster: "standard7" }], count: 2)
         | 
| 331 | 
            +
             | 
| 332 | 
            +
                messages = @store.latest
         | 
| 333 | 
            +
                assert_equal(2, messages.length)
         | 
| 334 | 
            +
             | 
| 335 | 
            +
                messages = @store.latest(search: "-business")
         | 
| 336 | 
            +
                assert_equal(2, messages.size)
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                assert_equal(["standard3"], messages[0].env.map { |env| env["cluster"]})
         | 
| 339 | 
            +
                assert_equal(1, messages[0].count)
         | 
| 340 | 
            +
                assert_equal(["standard7"], messages[1].env.map { |env| env["cluster"]})
         | 
| 341 | 
            +
                assert_equal(1, messages[1].count)
         | 
| 342 | 
            +
              end
         | 
| 343 | 
            +
             | 
| 344 | 
            +
              def test_negative_search_MUST_not_match_title_in_order_to_include_message
         | 
| 345 | 
            +
                @store.report(Logger::INFO, "test", "message ABCD", env: [{ cluster: "business5" }, { cluster: "standard3" }], count: 2)
         | 
| 346 | 
            +
             | 
| 347 | 
            +
                messages = @store.latest(search: "-ABCD")
         | 
| 348 | 
            +
                assert_equal(0, messages.size) # cause title has ABCD
         | 
| 349 | 
            +
              end
         | 
| 350 | 
            +
             | 
| 351 | 
            +
              def test_positive_search_looks_at_title_OR_env
         | 
| 352 | 
            +
                @store.report(Logger::INFO, "test", "message", env: [{ cluster: "business5 ABCDEFG" }, { cluster: "standard3" }], count: 2)
         | 
| 353 | 
            +
             | 
| 354 | 
            +
                messages = @store.latest(search: "ABCDEFG")
         | 
| 355 | 
            +
                assert_equal(1, messages.size)
         | 
| 356 | 
            +
                assert_equal(1, messages[0].env.size)
         | 
| 357 | 
            +
                assert_equal("business5 ABCDEFG", messages[0].env[0]["cluster"])
         | 
| 358 | 
            +
              end
         | 
| 359 | 
            +
             | 
| 237 360 | 
             
              def test_backtrace
         | 
| 238 361 | 
             
                @store.report(Logger::INFO, "test", "pattern_1")
         | 
| 239 362 | 
             
                message = @store.latest(limit: 1).first
         | 
    
        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: 1. | 
| 4 | 
            +
              version: 1.4.0.pre
         | 
| 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:  | 
| 11 | 
            +
            date: 2019-01-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -162,6 +162,7 @@ files: | |
| 162 162 | 
             
            - client-app/README.md
         | 
| 163 163 | 
             
            - client-app/app/app.js
         | 
| 164 164 | 
             
            - client-app/app/components/actions-menu.js
         | 
| 165 | 
            +
            - client-app/app/components/env-tab.js
         | 
| 165 166 | 
             
            - client-app/app/components/message-info.js
         | 
| 166 167 | 
             
            - client-app/app/components/message-row.js
         | 
| 167 168 | 
             
            - client-app/app/components/panel-resizer.js
         | 
| @@ -185,6 +186,7 @@ files: | |
| 185 186 | 
             
            - client-app/app/styles/app.css
         | 
| 186 187 | 
             
            - client-app/app/templates/application.hbs
         | 
| 187 188 | 
             
            - client-app/app/templates/components/actions-menu.hbs
         | 
| 189 | 
            +
            - client-app/app/templates/components/env-tab.hbs
         | 
| 188 190 | 
             
            - client-app/app/templates/components/message-info.hbs
         | 
| 189 191 | 
             
            - client-app/app/templates/components/message-row.hbs
         | 
| 190 192 | 
             
            - client-app/app/templates/components/panel-resizer.hbs
         | 
| @@ -201,6 +203,7 @@ files: | |
| 201 203 | 
             
            - client-app/testem.js
         | 
| 202 204 | 
             
            - client-app/tests/index.html
         | 
| 203 205 | 
             
            - client-app/tests/integration/components/actions-menu-test.js
         | 
| 206 | 
            +
            - client-app/tests/integration/components/env-tab-test.js
         | 
| 204 207 | 
             
            - client-app/tests/integration/components/message-info-test.js
         | 
| 205 208 | 
             
            - client-app/tests/integration/components/message-row-test.js
         | 
| 206 209 | 
             
            - client-app/tests/integration/components/panel-resizer-test.js
         | 
| @@ -258,9 +261,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 258 261 | 
             
                  version: '0'
         | 
| 259 262 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 260 263 | 
             
              requirements:
         | 
| 261 | 
            -
              - - " | 
| 264 | 
            +
              - - ">"
         | 
| 262 265 | 
             
                - !ruby/object:Gem::Version
         | 
| 263 | 
            -
                  version:  | 
| 266 | 
            +
                  version: 1.3.1
         | 
| 264 267 | 
             
            requirements: []
         | 
| 265 268 | 
             
            rubygems_version: 3.0.1
         | 
| 266 269 | 
             
            signing_key: 
         |