logster 1.2.11 → 1.3.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +18 -17
- data/.travis.yml +15 -16
- data/CHANGELOG.md +130 -130
- data/Gemfile +4 -4
- data/Guardfile +8 -8
- data/LICENSE.txt +22 -22
- data/README.md +99 -96
- data/Rakefile +24 -23
- data/assets/fonts/FontAwesome.otf +0 -0
- data/assets/fonts/fontawesome-webfont.eot +0 -0
- data/assets/fonts/fontawesome-webfont.svg +639 -639
- data/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/assets/fonts/fontawesome-webfont.woff +0 -0
- data/assets/fonts/fontawesome-webfont.woff2 +0 -0
- data/assets/images/Icon-144_rounded.png +0 -0
- data/assets/images/Icon-144_square.png +0 -0
- data/assets/images/icon_144x144.png +0 -0
- data/assets/images/icon_64x64.png +0 -0
- data/assets/javascript/client-app.js +81 -0
- data/assets/javascript/vendor.js +5302 -0
- data/assets/stylesheets/client-app.css +1 -0
- data/assets/stylesheets/vendor.css +4 -0
- data/build_client_app.sh +12 -0
- data/client-app/.editorconfig +20 -0
- data/client-app/.ember-cli +9 -0
- data/client-app/.eslintignore +19 -0
- data/client-app/.eslintrc.js +46 -0
- data/client-app/.gitignore +23 -0
- data/client-app/.travis.yml +27 -0
- data/client-app/.watchmanconfig +3 -0
- data/client-app/README.md +57 -0
- data/client-app/app/app.js +14 -0
- data/client-app/app/components/message-info.js +18 -0
- data/client-app/app/components/message-row.js +45 -0
- data/client-app/app/components/panel-resizer.js +75 -0
- data/client-app/app/components/tab-contents.js +27 -0
- data/client-app/app/components/tab-link.js +5 -0
- data/client-app/app/components/tabbed-section.js +32 -0
- data/client-app/app/components/time-formatter.js +25 -0
- data/client-app/app/components/update-time.js +21 -0
- data/client-app/app/controllers/index.js +83 -0
- data/client-app/app/controllers/show.js +13 -0
- data/client-app/app/index.html +29 -0
- data/client-app/app/initializers/app-init.js +55 -0
- data/client-app/app/lib/preload.js +14 -0
- data/client-app/app/lib/utilities.js +140 -0
- data/client-app/app/models/message-collection.js +158 -0
- data/client-app/app/models/message.js +99 -0
- data/client-app/app/resolver.js +3 -0
- data/client-app/app/router.js +14 -0
- data/client-app/app/routes/index.js +53 -0
- data/client-app/app/routes/show.js +14 -0
- data/{assets/stylesheets → client-app/app/styles}/app.css +387 -390
- data/{assets/javascript → client-app/app}/templates/application.hbs +2 -2
- data/client-app/app/templates/components/message-info.hbs +44 -0
- data/{assets/javascript → client-app/app/templates}/components/message-row.hbs +17 -17
- data/client-app/app/templates/components/tabbed-section.hbs +10 -0
- data/client-app/app/templates/components/time-formatter.hbs +1 -0
- data/{assets/javascript → client-app/app}/templates/index.hbs +57 -57
- data/{assets/javascript → client-app/app}/templates/show.hbs +4 -4
- data/client-app/config/environment.js +51 -0
- data/client-app/config/optional-features.json +3 -0
- data/client-app/config/targets.js +18 -0
- data/client-app/ember-cli-build.js +29 -0
- data/client-app/package-lock.json +11365 -0
- data/client-app/package.json +56 -0
- data/client-app/testem.js +25 -0
- data/client-app/tests/index.html +34 -0
- data/client-app/tests/integration/components/message-info-test.js +26 -0
- data/client-app/tests/integration/components/message-row-test.js +26 -0
- data/client-app/tests/integration/components/panel-resizer-test.js +26 -0
- data/client-app/tests/integration/components/tab-contents-test.js +26 -0
- data/client-app/tests/integration/components/tab-link-test.js +26 -0
- data/client-app/tests/integration/components/tabbed-section-test.js +26 -0
- data/client-app/tests/integration/components/time-formatter-test.js +26 -0
- data/client-app/tests/integration/components/update-time-test.js +26 -0
- data/client-app/tests/test-helper.js +8 -0
- data/client-app/tests/unit/controllers/index-test.js +12 -0
- data/client-app/tests/unit/controllers/show-test.js +12 -0
- data/client-app/tests/unit/initializers/app-init-test.js +31 -0
- data/client-app/tests/unit/routes/index-test.js +11 -0
- data/client-app/tests/unit/routes/show-test.js +11 -0
- data/lib/examples/sidekiq_logster_reporter.rb +21 -21
- data/lib/logster.rb +54 -54
- data/lib/logster/base_store.rb +130 -130
- data/lib/logster/configuration.rb +25 -25
- data/lib/logster/ignore_pattern.rb +65 -65
- data/lib/logster/logger.rb +102 -101
- data/lib/logster/message.rb +227 -226
- data/lib/logster/middleware/debug_exceptions.rb +26 -26
- data/lib/logster/middleware/reporter.rb +56 -54
- data/lib/logster/middleware/viewer.rb +220 -251
- data/lib/logster/rails/railtie.rb +58 -58
- data/lib/logster/redis_store.rb +481 -477
- data/lib/logster/version.rb +3 -3
- data/lib/logster/web.rb +14 -14
- data/logster.gemspec +34 -33
- data/test/examples/test_sidekiq_reporter_example.rb +46 -46
- data/test/fake_data/Gemfile +4 -4
- data/test/fake_data/generate.rb +10 -10
- data/test/logster/middleware/test_reporter.rb +21 -21
- data/test/logster/middleware/test_viewer.rb +96 -70
- data/test/logster/test_base_store.rb +147 -147
- data/test/logster/test_ignore_pattern.rb +41 -41
- data/test/logster/test_logger.rb +74 -74
- data/test/logster/test_message.rb +34 -34
- data/test/logster/test_redis_rate_limiter.rb +230 -230
- data/test/logster/test_redis_store.rb +427 -414
- data/test/test_helper.rb +38 -37
- data/vendor/assets/javascripts/logster.js.erb +39 -39
- metadata +83 -24
- data/assets/javascript/app.js +0 -817
- data/assets/javascript/components/message-info.hbs +0 -47
- data/assets/javascript/components/panel-resizer.hbs +0 -0
- data/assets/javascript/components/tab-contents.hbs +0 -1
- data/assets/javascript/components/tab-link.hbs +0 -1
- data/assets/javascript/components/tabbed-section.hbs +0 -6
- data/assets/javascript/external/ember-template-compiler.js +0 -22346
- data/assets/javascript/external/ember.js +0 -58500
- data/assets/javascript/external/ember.min.js +0 -17
- data/assets/javascript/external/jquery.min.js +0 -5
- data/assets/javascript/external/lodash.min.js +0 -87
- data/assets/javascript/external/moment.min.js +0 -6
- data/assets/stylesheets/font-awesome.min.css +0 -4
- data/bower.json +0 -25
data/lib/logster/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Logster
|
2
|
-
VERSION = "1.
|
3
|
-
end
|
1
|
+
module Logster
|
2
|
+
VERSION = "1.3.pre"
|
3
|
+
end
|
data/lib/logster/web.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
require 'logster/middleware/viewer'
|
2
|
-
|
3
|
-
class Logster::Web
|
4
|
-
class FourOhFour
|
5
|
-
def call(env)
|
6
|
-
[404, {}, ["not found"]]
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.call(env)
|
11
|
-
@middleware ||= Logster::Middleware::Viewer.new(FourOhFour.new)
|
12
|
-
@middleware.call(env)
|
13
|
-
end
|
14
|
-
end
|
1
|
+
require 'logster/middleware/viewer'
|
2
|
+
|
3
|
+
class Logster::Web
|
4
|
+
class FourOhFour
|
5
|
+
def call(env)
|
6
|
+
[404, {}, ["not found"]]
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.call(env)
|
11
|
+
@middleware ||= Logster::Middleware::Viewer.new(FourOhFour.new)
|
12
|
+
@middleware.call(env)
|
13
|
+
end
|
14
|
+
end
|
data/logster.gemspec
CHANGED
@@ -1,33 +1,34 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'logster/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "logster"
|
8
|
-
spec.version = Logster::VERSION
|
9
|
-
spec.authors = ["UI for viewing logs in Rack"]
|
10
|
-
spec.email = ["sam.saffron@gmail.com"]
|
11
|
-
spec.summary = %q{UI for viewing logs in Rack}
|
12
|
-
spec.description = %q{UI for viewing logs in Rack}
|
13
|
-
spec.homepage = "https://github.com/discourse/logster"
|
14
|
-
spec.license = "MIT"
|
15
|
-
|
16
|
-
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
-
f.start_with?("bower_components") || f.start_with?("website") || f.start_with?("bin")
|
18
|
-
end
|
19
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
|
-
spec.require_paths = ["lib"]
|
22
|
-
|
23
|
-
# NOTE dependency on rack is not explicit, this enables us to use
|
24
|
-
# logster outside of rack (for reporting)
|
25
|
-
|
26
|
-
spec.add_development_dependency "bundler", "~> 1.6"
|
27
|
-
spec.add_development_dependency "rake"
|
28
|
-
spec.add_development_dependency "rack"
|
29
|
-
spec.add_development_dependency "redis"
|
30
|
-
spec.add_development_dependency "guard"
|
31
|
-
spec.add_development_dependency "guard-minitest"
|
32
|
-
spec.add_development_dependency "timecop"
|
33
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'logster/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "logster"
|
8
|
+
spec.version = Logster::VERSION
|
9
|
+
spec.authors = ["UI for viewing logs in Rack"]
|
10
|
+
spec.email = ["sam.saffron@gmail.com"]
|
11
|
+
spec.summary = %q{UI for viewing logs in Rack}
|
12
|
+
spec.description = %q{UI for viewing logs in Rack}
|
13
|
+
spec.homepage = "https://github.com/discourse/logster"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.start_with?("bower_components") || f.start_with?("website") || f.start_with?("bin")
|
18
|
+
end
|
19
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
# NOTE dependency on rack is not explicit, this enables us to use
|
24
|
+
# logster outside of rack (for reporting)
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
spec.add_development_dependency "rack"
|
29
|
+
spec.add_development_dependency "redis"
|
30
|
+
spec.add_development_dependency "guard"
|
31
|
+
spec.add_development_dependency "guard-minitest"
|
32
|
+
spec.add_development_dependency "timecop"
|
33
|
+
spec.add_development_dependency "byebug"
|
34
|
+
end
|
@@ -1,46 +1,46 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
require 'logster/logger'
|
3
|
-
require 'logster/redis_store'
|
4
|
-
require 'logger'
|
5
|
-
require 'examples/sidekiq_logster_reporter'
|
6
|
-
|
7
|
-
class TestSidekiqReporter < MiniTest::Test
|
8
|
-
|
9
|
-
def setup
|
10
|
-
Logster.store = @store = Logster::RedisStore.new(Redis.new)
|
11
|
-
Logster.logger = @logger = Logster::Logger.new(Logster.store)
|
12
|
-
@store.clear_all
|
13
|
-
end
|
14
|
-
|
15
|
-
def teardown
|
16
|
-
@store.clear_all
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_sidekiq_handler_example
|
20
|
-
handler = SidekiqLogsterReporter.new
|
21
|
-
error = nil
|
22
|
-
begin
|
23
|
-
raise TypeError.new
|
24
|
-
rescue => e
|
25
|
-
error = e
|
26
|
-
end
|
27
|
-
trace = error.backtrace
|
28
|
-
|
29
|
-
handler.call(error, code: "Test", something_important: "Foo", params: { article_id: 20 })
|
30
|
-
|
31
|
-
report = @store.latest[0]
|
32
|
-
|
33
|
-
# Message is right format
|
34
|
-
assert_equal("Job exception: TypeError\n", report.message)
|
35
|
-
|
36
|
-
# A backtrace is joined()
|
37
|
-
assert_equal(trace.join("\n"), report.backtrace)
|
38
|
-
# The backtrace is deleted from the env
|
39
|
-
assert_nil(report.env['backtrace'])
|
40
|
-
assert_nil(report.env[:backtrace])
|
41
|
-
|
42
|
-
# The env is in the report
|
43
|
-
assert_equal("Test", report.env['code'])
|
44
|
-
assert_equal(20, report.env['params']['article_id'])
|
45
|
-
end
|
46
|
-
end
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'logster/logger'
|
3
|
+
require 'logster/redis_store'
|
4
|
+
require 'logger'
|
5
|
+
require 'examples/sidekiq_logster_reporter'
|
6
|
+
|
7
|
+
class TestSidekiqReporter < MiniTest::Test
|
8
|
+
|
9
|
+
def setup
|
10
|
+
Logster.store = @store = Logster::RedisStore.new(Redis.new)
|
11
|
+
Logster.logger = @logger = Logster::Logger.new(Logster.store)
|
12
|
+
@store.clear_all
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
@store.clear_all
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_sidekiq_handler_example
|
20
|
+
handler = SidekiqLogsterReporter.new
|
21
|
+
error = nil
|
22
|
+
begin
|
23
|
+
raise TypeError.new
|
24
|
+
rescue => e
|
25
|
+
error = e
|
26
|
+
end
|
27
|
+
trace = error.backtrace
|
28
|
+
|
29
|
+
handler.call(error, code: "Test", something_important: "Foo", params: { article_id: 20 })
|
30
|
+
|
31
|
+
report = @store.latest[0]
|
32
|
+
|
33
|
+
# Message is right format
|
34
|
+
assert_equal("Job exception: TypeError\n", report.message)
|
35
|
+
|
36
|
+
# A backtrace is joined()
|
37
|
+
assert_equal(trace.join("\n"), report.backtrace)
|
38
|
+
# The backtrace is deleted from the env
|
39
|
+
assert_nil(report.env['backtrace'])
|
40
|
+
assert_nil(report.env[:backtrace])
|
41
|
+
|
42
|
+
# The env is in the report
|
43
|
+
assert_equal("Test", report.env['code'])
|
44
|
+
assert_equal(20, report.env['params']['article_id'])
|
45
|
+
end
|
46
|
+
end
|
data/test/fake_data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'redis'
|
4
|
-
gem 'logster', path: '../../'
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'redis'
|
4
|
+
gem 'logster', path: '../../'
|
data/test/fake_data/generate.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'redis'
|
2
|
-
require 'logster'
|
3
|
-
|
4
|
-
Logster.config.allow_grouping = true
|
5
|
-
Logster.config.application_version = "ABC123"
|
6
|
-
Logster.store = Logster::RedisStore.new
|
7
|
-
|
8
|
-
10.times do
|
9
|
-
Logster.store.report(Logger::WARN, "application", "test warning", backtrace: "method1\nmethod2", env: {something: ["hello world", "hello places"], another: {thing: "something else"}})
|
10
|
-
end
|
1
|
+
require 'redis'
|
2
|
+
require 'logster'
|
3
|
+
|
4
|
+
Logster.config.allow_grouping = true
|
5
|
+
Logster.config.application_version = "ABC123"
|
6
|
+
Logster.store = Logster::RedisStore.new
|
7
|
+
|
8
|
+
10.times do
|
9
|
+
Logster.store.report(Logger::WARN, "application", "test warning", backtrace: "method1\nmethod2", env: {something: ["hello world", "hello places"], another: {thing: "something else"}})
|
10
|
+
end
|
@@ -1,21 +1,21 @@
|
|
1
|
-
require_relative '../../test_helper'
|
2
|
-
require 'rack'
|
3
|
-
require 'logster/redis_store'
|
4
|
-
require 'logster/middleware/reporter'
|
5
|
-
|
6
|
-
|
7
|
-
class TestReporter < Minitest::Test
|
8
|
-
|
9
|
-
def test_logs_errors
|
10
|
-
Logster.store = Logster::TestStore.new
|
11
|
-
|
12
|
-
reporter = Logster::Middleware::Reporter.new(nil)
|
13
|
-
env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello")
|
14
|
-
status, = reporter.call(env)
|
15
|
-
|
16
|
-
assert_equal(200, status)
|
17
|
-
assert_equal(1, Logster.store.count)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require 'rack'
|
3
|
+
require 'logster/redis_store'
|
4
|
+
require 'logster/middleware/reporter'
|
5
|
+
|
6
|
+
|
7
|
+
class TestReporter < Minitest::Test
|
8
|
+
|
9
|
+
def test_logs_errors
|
10
|
+
Logster.store = Logster::TestStore.new
|
11
|
+
|
12
|
+
reporter = Logster::Middleware::Reporter.new(nil)
|
13
|
+
env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello")
|
14
|
+
status, = reporter.call(env)
|
15
|
+
|
16
|
+
assert_equal(200, status)
|
17
|
+
assert_equal(1, Logster.store.count)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
@@ -1,70 +1,96 @@
|
|
1
|
-
require_relative '../../test_helper'
|
2
|
-
require 'rack'
|
3
|
-
require 'logster/redis_store'
|
4
|
-
require 'logster/middleware/viewer'
|
5
|
-
|
6
|
-
class TestViewer < Minitest::Test
|
7
|
-
|
8
|
-
class BrokenApp
|
9
|
-
def call(env)
|
10
|
-
[500, {}, ["broken"]]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def setup
|
15
|
-
Logster.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
Logster.
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
assert_nil(viewer.send(:resolve_path, "/
|
34
|
-
|
35
|
-
|
36
|
-
assert_equal("/
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require 'rack'
|
3
|
+
require 'logster/redis_store'
|
4
|
+
require 'logster/middleware/viewer'
|
5
|
+
|
6
|
+
class TestViewer < Minitest::Test
|
7
|
+
|
8
|
+
class BrokenApp
|
9
|
+
def call(env)
|
10
|
+
[500, {}, ["broken"]]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup
|
15
|
+
Logster.config.subdirectory = "/logsie"
|
16
|
+
Logster.store = Logster::RedisStore.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def teardown
|
20
|
+
Logster.config.subdirectory = nil
|
21
|
+
Logster.store = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def viewer
|
25
|
+
@viewer ||= Logster::Middleware::Viewer.new(nil)
|
26
|
+
end
|
27
|
+
|
28
|
+
def request
|
29
|
+
@request ||= Rack::MockRequest.new(Rack::Lint.new(viewer))
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_path_resolution
|
33
|
+
assert_nil(viewer.send(:resolve_path, "/logs"))
|
34
|
+
assert_nil(viewer.send(:resolve_path, "/admin/logsie"))
|
35
|
+
assert_nil(viewer.send(:resolve_path, "/admin/logsie/bla"))
|
36
|
+
assert_equal("/",viewer.send(:resolve_path, "/logsie"))
|
37
|
+
assert_equal("/",viewer.send(:resolve_path, "/logsie/"))
|
38
|
+
assert_equal("/hello/world",viewer.send(:resolve_path, "/logsie/hello/world"))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_search_raceguard_s
|
42
|
+
response = request.get('/logsie/messages.json?search=searchkey')
|
43
|
+
result = JSON.parse(response.body)
|
44
|
+
assert_equal('searchkey', result['search'])
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_search_raceguard_sr
|
48
|
+
response = request.get('/logsie/messages.json?search=/regex/®ex_search=true')
|
49
|
+
result = JSON.parse(response.body)
|
50
|
+
assert_equal('/regex/', result['search'])
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_search_raceguard_f
|
54
|
+
response = request.get("/logsie/messages.json?filter=0_1_2_3_4")
|
55
|
+
result = JSON.parse(response.body)
|
56
|
+
assert_equal([0,1,2,3,4], result['filter'])
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_regex_parse
|
60
|
+
assert_equal(/hello/i, viewer.send(:parse_regex, '/hello/i'))
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_linking_to_a_valid_js_files
|
64
|
+
%w(
|
65
|
+
/logsie/javascript/client-app.js
|
66
|
+
/logsie/javascript/vendor.js
|
67
|
+
).each do |path|
|
68
|
+
response = request.get(path)
|
69
|
+
assert_equal(200, response.status)
|
70
|
+
assert_equal('application/javascript', response.headers['Content-Type'])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_linking_to_a_valid_css_files
|
75
|
+
%w(
|
76
|
+
/logsie/stylesheets/client-app.css
|
77
|
+
/logsie/stylesheets/vendor.css
|
78
|
+
).each do |path|
|
79
|
+
response = request.get(path)
|
80
|
+
assert_equal(200, response.status)
|
81
|
+
assert_equal('text/css', response.headers['Content-Type'])
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_linking_to_an_invalid_ember_component_or_template
|
86
|
+
%w(
|
87
|
+
/logsie/javascript/templates/application.hbs
|
88
|
+
/logsie/javascript/templates/does_not_exist.js
|
89
|
+
/logsie/javascript/components/does_not_exist.js
|
90
|
+
/logsie/javascript/templates/../../app.js
|
91
|
+
).each do |path|
|
92
|
+
response = request.get(path)
|
93
|
+
assert_equal(404, response.status, "#{path} should have 404'ed")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -1,147 +1,147 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
require 'logster/base_store'
|
3
|
-
require 'logster/ignore_pattern'
|
4
|
-
|
5
|
-
class TestBaseStore < Minitest::Test
|
6
|
-
|
7
|
-
def setup
|
8
|
-
@store = Logster::TestStore.new
|
9
|
-
@store.clear_all
|
10
|
-
end
|
11
|
-
|
12
|
-
def teardown
|
13
|
-
@store.clear_all
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_report_skip_empty
|
17
|
-
@store.skip_empty = true
|
18
|
-
@store.report(Logger::WARN, "test", nil)
|
19
|
-
@store.report(Logger::WARN, "test", '')
|
20
|
-
@store.report(Logger::WARN, "test", "foo") #
|
21
|
-
@store.skip_empty = false
|
22
|
-
@store.report(Logger::WARN, "test", nil) #
|
23
|
-
|
24
|
-
assert_equal(2, @store.count)
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_report_skip_level
|
28
|
-
@store.level = nil
|
29
|
-
@store.report(Logger::DEBUG, "test", "A") #
|
30
|
-
@store.level = Logger::WARN
|
31
|
-
@store.report(Logger::DEBUG, "test", "A")
|
32
|
-
@store.report(Logger::INFO, "test", "B")
|
33
|
-
@store.report(Logger::WARN, "test", "C") #
|
34
|
-
@store.report(Logger::ERROR, "test", "D") #
|
35
|
-
assert_equal(3, @store.count)
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_report_skip_ignore
|
39
|
-
@store.report(Logger::WARN, "test", "Can't verify CSRF token authenticity")
|
40
|
-
@store.report(Logger::FATAL, "test", "ActiveRecord::RecordNotFound (Couldn't find Upload with 'id'=9947)")
|
41
|
-
@store.report(Logger::WARN, "test", "B")
|
42
|
-
@store.ignore = [
|
43
|
-
/^ActiveRecord::RecordNotFound \(Couldn't find Upload/,
|
44
|
-
/^Can't verify CSRF token authenticity/
|
45
|
-
]
|
46
|
-
@store.report(Logger::WARN, "test", "Can't verify CSRF token authenticity")
|
47
|
-
@store.report(Logger::FATAL, "test", "ActiveRecord::RecordNotFound (Couldn't find Upload with 'id'=9947)")
|
48
|
-
@store.report(Logger::FATAL, "test", "ActiveRecord::RecordNotFound (Couldn't find Upload with 'id'=9489+78946947)")
|
49
|
-
@store.report(Logger::WARN, "test", "B")
|
50
|
-
|
51
|
-
assert_equal(4, @store.count)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_ignore_pattern_basic
|
55
|
-
@store.ignore = [
|
56
|
-
Logster::IgnorePattern.new(nil, {username: 'CausingErrors'})
|
57
|
-
]
|
58
|
-
@store.report(Logger::WARN, "test", "Foobar") #
|
59
|
-
@store.report(Logger::WARN, "test", "Foobar", { env: { username: 'CausingErrors' }})
|
60
|
-
@store.report(Logger::WARN, "test", "Foobar", env: nil)
|
61
|
-
@store.report(Logger::WARN, "test", "Something Else", { env: { username: 'CausingErrors' }})
|
62
|
-
@store.report(Logger::WARN, "test", "Something Else", { env: { 'username' => 'CausingErrors' }})
|
63
|
-
@store.report(Logger::WARN, "test", "Something Else", { env: { username: 'GoodPerson' }}) #
|
64
|
-
@store.report(Logger::WARN, "test", "Can't verify CSRF token authenticity") #
|
65
|
-
|
66
|
-
assert_equal(4, @store.count)
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_ignore_pattern_real
|
70
|
-
@store.ignore = [
|
71
|
-
/^ActionController::RoutingError \(No route matches/,
|
72
|
-
Logster::IgnorePattern.new("Can't verify CSRF token authenticity", { REQUEST_URI: /\/trackback\/$/ })
|
73
|
-
]
|
74
|
-
# blocked
|
75
|
-
@store.report(Logger::WARN, "whatever", "Can't verify CSRF token authenticity", {
|
76
|
-
env: {
|
77
|
-
HTTP_HOST: 'meta.discourse.org',
|
78
|
-
REQUEST_URI: '/t/use-more-standard-smiley-codes-instead-of-smile/1822/trackback/',
|
79
|
-
REQUEST_METHOD: 'POST',
|
80
|
-
HTTP_USER_AGENT: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',
|
81
|
-
params: {
|
82
|
-
title: 'Something Spammy',
|
83
|
-
url: 'http://spam.example.net/whatever/spam.html',
|
84
|
-
excerpt: 'http://spam.example.com/pdf/blahblah.html free viagra',
|
85
|
-
blog_name: 'get free spam for cheap'
|
86
|
-
}
|
87
|
-
}
|
88
|
-
})
|
89
|
-
# logged
|
90
|
-
@store.report(Logger::WARN, "whatever", "Can't verify CSRF token authenticity", {
|
91
|
-
env: {
|
92
|
-
HTTP_HOST: 'meta.discourse.org',
|
93
|
-
REQUEST_URI: '/session',
|
94
|
-
REQUEST_METHOD: 'POST',
|
95
|
-
HTTP_USER_AGENT: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
|
96
|
-
params: {
|
97
|
-
username: 'user',
|
98
|
-
password: 'password',
|
99
|
-
form_authenticity_token: 'incorrect'
|
100
|
-
}
|
101
|
-
}
|
102
|
-
})
|
103
|
-
assert_equal(1, @store.count)
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_timestamp
|
107
|
-
time = Time.now - 24*60*60
|
108
|
-
message = @store.report(Logger::WARN, "test", "B", timestamp: time)
|
109
|
-
|
110
|
-
assert_equal(time, message.timestamp)
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_backtrace
|
114
|
-
# Create an error with a backtrace
|
115
|
-
error = TypeError.new
|
116
|
-
begin
|
117
|
-
raise error
|
118
|
-
rescue => e
|
119
|
-
error = e
|
120
|
-
end
|
121
|
-
|
122
|
-
# Backtrace can be passed via backtrace param or env
|
123
|
-
message = @store.report(Logger::WARN, "test", "A", backtrace: error.backtrace)
|
124
|
-
assert_equal(error.backtrace.join("\n"), message.backtrace)
|
125
|
-
message = @store.report(Logger::WARN, "test", "B", env: {backtrace: error.backtrace})
|
126
|
-
assert_equal(error.backtrace.join("\n"), message.backtrace)
|
127
|
-
|
128
|
-
# Via env takes priority
|
129
|
-
message = @store.report(Logger::WARN, "test", "C", backtrace: "Garbage", env: {backtrace: error.backtrace})
|
130
|
-
assert_equal(error.backtrace.join("\n"), message.backtrace)
|
131
|
-
|
132
|
-
# Backtrace is always a string
|
133
|
-
# Cannot do an equal assert here, because it uses `caller` when not provided
|
134
|
-
message = @store.report(Logger::WARN, "test", "D", backtrace: nil)
|
135
|
-
assert_kind_of(String, message.backtrace)
|
136
|
-
message = @store.report(Logger::WARN, "test", "E", env: {backtrace: nil})
|
137
|
-
assert_kind_of(String, message.backtrace)
|
138
|
-
message = @store.report(Logger::WARN, "test", "F", backtrace: nil, env: {backtrace: nil})
|
139
|
-
assert_kind_of(String, message.backtrace)
|
140
|
-
message = @store.report(Logger::WARN, "test", "G")
|
141
|
-
assert_kind_of(String, message.backtrace)
|
142
|
-
|
143
|
-
# Arrays are turned into strings via join \n
|
144
|
-
message = @store.report(Logger::WARN, "test", "H", backtrace: ["Foo", "Bar"])
|
145
|
-
assert_equal("Foo\nBar", message.backtrace)
|
146
|
-
end
|
147
|
-
end
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'logster/base_store'
|
3
|
+
require 'logster/ignore_pattern'
|
4
|
+
|
5
|
+
class TestBaseStore < Minitest::Test
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@store = Logster::TestStore.new
|
9
|
+
@store.clear_all
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
@store.clear_all
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_report_skip_empty
|
17
|
+
@store.skip_empty = true
|
18
|
+
@store.report(Logger::WARN, "test", nil)
|
19
|
+
@store.report(Logger::WARN, "test", '')
|
20
|
+
@store.report(Logger::WARN, "test", "foo") #
|
21
|
+
@store.skip_empty = false
|
22
|
+
@store.report(Logger::WARN, "test", nil) #
|
23
|
+
|
24
|
+
assert_equal(2, @store.count)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_report_skip_level
|
28
|
+
@store.level = nil
|
29
|
+
@store.report(Logger::DEBUG, "test", "A") #
|
30
|
+
@store.level = Logger::WARN
|
31
|
+
@store.report(Logger::DEBUG, "test", "A")
|
32
|
+
@store.report(Logger::INFO, "test", "B")
|
33
|
+
@store.report(Logger::WARN, "test", "C") #
|
34
|
+
@store.report(Logger::ERROR, "test", "D") #
|
35
|
+
assert_equal(3, @store.count)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_report_skip_ignore
|
39
|
+
@store.report(Logger::WARN, "test", "Can't verify CSRF token authenticity")
|
40
|
+
@store.report(Logger::FATAL, "test", "ActiveRecord::RecordNotFound (Couldn't find Upload with 'id'=9947)")
|
41
|
+
@store.report(Logger::WARN, "test", "B")
|
42
|
+
@store.ignore = [
|
43
|
+
/^ActiveRecord::RecordNotFound \(Couldn't find Upload/,
|
44
|
+
/^Can't verify CSRF token authenticity/
|
45
|
+
]
|
46
|
+
@store.report(Logger::WARN, "test", "Can't verify CSRF token authenticity")
|
47
|
+
@store.report(Logger::FATAL, "test", "ActiveRecord::RecordNotFound (Couldn't find Upload with 'id'=9947)")
|
48
|
+
@store.report(Logger::FATAL, "test", "ActiveRecord::RecordNotFound (Couldn't find Upload with 'id'=9489+78946947)")
|
49
|
+
@store.report(Logger::WARN, "test", "B")
|
50
|
+
|
51
|
+
assert_equal(4, @store.count)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_ignore_pattern_basic
|
55
|
+
@store.ignore = [
|
56
|
+
Logster::IgnorePattern.new(nil, {username: 'CausingErrors'})
|
57
|
+
]
|
58
|
+
@store.report(Logger::WARN, "test", "Foobar") #
|
59
|
+
@store.report(Logger::WARN, "test", "Foobar", { env: { username: 'CausingErrors' }})
|
60
|
+
@store.report(Logger::WARN, "test", "Foobar", env: nil)
|
61
|
+
@store.report(Logger::WARN, "test", "Something Else", { env: { username: 'CausingErrors' }})
|
62
|
+
@store.report(Logger::WARN, "test", "Something Else", { env: { 'username' => 'CausingErrors' }})
|
63
|
+
@store.report(Logger::WARN, "test", "Something Else", { env: { username: 'GoodPerson' }}) #
|
64
|
+
@store.report(Logger::WARN, "test", "Can't verify CSRF token authenticity") #
|
65
|
+
|
66
|
+
assert_equal(4, @store.count)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_ignore_pattern_real
|
70
|
+
@store.ignore = [
|
71
|
+
/^ActionController::RoutingError \(No route matches/,
|
72
|
+
Logster::IgnorePattern.new("Can't verify CSRF token authenticity", { REQUEST_URI: /\/trackback\/$/ })
|
73
|
+
]
|
74
|
+
# blocked
|
75
|
+
@store.report(Logger::WARN, "whatever", "Can't verify CSRF token authenticity", {
|
76
|
+
env: {
|
77
|
+
HTTP_HOST: 'meta.discourse.org',
|
78
|
+
REQUEST_URI: '/t/use-more-standard-smiley-codes-instead-of-smile/1822/trackback/',
|
79
|
+
REQUEST_METHOD: 'POST',
|
80
|
+
HTTP_USER_AGENT: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',
|
81
|
+
params: {
|
82
|
+
title: 'Something Spammy',
|
83
|
+
url: 'http://spam.example.net/whatever/spam.html',
|
84
|
+
excerpt: 'http://spam.example.com/pdf/blahblah.html free viagra',
|
85
|
+
blog_name: 'get free spam for cheap'
|
86
|
+
}
|
87
|
+
}
|
88
|
+
})
|
89
|
+
# logged
|
90
|
+
@store.report(Logger::WARN, "whatever", "Can't verify CSRF token authenticity", {
|
91
|
+
env: {
|
92
|
+
HTTP_HOST: 'meta.discourse.org',
|
93
|
+
REQUEST_URI: '/session',
|
94
|
+
REQUEST_METHOD: 'POST',
|
95
|
+
HTTP_USER_AGENT: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
|
96
|
+
params: {
|
97
|
+
username: 'user',
|
98
|
+
password: 'password',
|
99
|
+
form_authenticity_token: 'incorrect'
|
100
|
+
}
|
101
|
+
}
|
102
|
+
})
|
103
|
+
assert_equal(1, @store.count)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_timestamp
|
107
|
+
time = Time.now - 24*60*60
|
108
|
+
message = @store.report(Logger::WARN, "test", "B", timestamp: time)
|
109
|
+
|
110
|
+
assert_equal(time, message.timestamp)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_backtrace
|
114
|
+
# Create an error with a backtrace
|
115
|
+
error = TypeError.new
|
116
|
+
begin
|
117
|
+
raise error
|
118
|
+
rescue => e
|
119
|
+
error = e
|
120
|
+
end
|
121
|
+
|
122
|
+
# Backtrace can be passed via backtrace param or env
|
123
|
+
message = @store.report(Logger::WARN, "test", "A", backtrace: error.backtrace)
|
124
|
+
assert_equal(error.backtrace.join("\n"), message.backtrace)
|
125
|
+
message = @store.report(Logger::WARN, "test", "B", env: {backtrace: error.backtrace})
|
126
|
+
assert_equal(error.backtrace.join("\n"), message.backtrace)
|
127
|
+
|
128
|
+
# Via env takes priority
|
129
|
+
message = @store.report(Logger::WARN, "test", "C", backtrace: "Garbage", env: {backtrace: error.backtrace})
|
130
|
+
assert_equal(error.backtrace.join("\n"), message.backtrace)
|
131
|
+
|
132
|
+
# Backtrace is always a string
|
133
|
+
# Cannot do an equal assert here, because it uses `caller` when not provided
|
134
|
+
message = @store.report(Logger::WARN, "test", "D", backtrace: nil)
|
135
|
+
assert_kind_of(String, message.backtrace)
|
136
|
+
message = @store.report(Logger::WARN, "test", "E", env: {backtrace: nil})
|
137
|
+
assert_kind_of(String, message.backtrace)
|
138
|
+
message = @store.report(Logger::WARN, "test", "F", backtrace: nil, env: {backtrace: nil})
|
139
|
+
assert_kind_of(String, message.backtrace)
|
140
|
+
message = @store.report(Logger::WARN, "test", "G")
|
141
|
+
assert_kind_of(String, message.backtrace)
|
142
|
+
|
143
|
+
# Arrays are turned into strings via join \n
|
144
|
+
message = @store.report(Logger::WARN, "test", "H", backtrace: ["Foo", "Bar"])
|
145
|
+
assert_equal("Foo\nBar", message.backtrace)
|
146
|
+
end
|
147
|
+
end
|