logster 2.12.1 → 2.13.0
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 +5 -0
- data/.streerc +2 -0
- data/CHANGELOG.md +10 -1
- data/Gemfile +1 -1
- data/assets/javascript/{chunk.143.2faa04830259ce9aa59a.js → chunk.143.91d07e8cdd5c4b9e4731.js} +4 -4
- data/assets/javascript/{chunk.178.ca5ade1d8cbdbfbe6d72.js → chunk.178.16d0c9057345120bdba1.js} +3 -3
- data/assets/javascript/client-app.js +4 -2
- data/client-app/app/components/back-trace.js +4 -0
- data/client-app/package.json +1 -1
- data/client-app/preload-json-manager.rb +10 -17
- data/client-app/tests/integration/components/back-trace-test.js +17 -0
- data/client-app/yarn.lock +22 -22
- data/lib/examples/sidekiq_logster_reporter.rb +5 -7
- data/lib/logster/base_store.rb +26 -22
- data/lib/logster/cache.rb +2 -1
- data/lib/logster/configuration.rb +3 -3
- data/lib/logster/defer_logger.rb +2 -4
- data/lib/logster/group.rb +17 -20
- data/lib/logster/ignore_pattern.rb +1 -2
- data/lib/logster/logger.rb +18 -16
- data/lib/logster/message.rb +53 -57
- data/lib/logster/middleware/debug_exceptions.rb +12 -10
- data/lib/logster/middleware/reporter.rb +17 -26
- data/lib/logster/middleware/viewer.rb +77 -97
- data/lib/logster/pattern.rb +4 -7
- data/lib/logster/rails/railtie.rb +10 -13
- data/lib/logster/redis_rate_limiter.rb +2 -7
- data/lib/logster/redis_store.rb +79 -99
- data/lib/logster/scheduler.rb +1 -5
- data/lib/logster/suppression_pattern.rb +7 -5
- data/lib/logster/version.rb +1 -1
- data/lib/logster/web.rb +1 -1
- data/lib/logster.rb +15 -17
- data/logster.gemspec +14 -14
- data/test/examples/test_sidekiq_reporter_example.rb +8 -9
- data/test/fake_data/generate.rb +14 -3
- data/test/logster/middleware/test_reporter.rb +9 -7
- data/test/logster/middleware/test_viewer.rb +117 -101
- data/test/logster/test_base_store.rb +79 -58
- data/test/logster/test_cache.rb +5 -11
- data/test/logster/test_defer_logger.rb +3 -3
- data/test/logster/test_group.rb +14 -18
- data/test/logster/test_ignore_pattern.rb +2 -3
- data/test/logster/test_logger.rb +14 -14
- data/test/logster/test_message.rb +29 -31
- data/test/logster/test_pattern.rb +7 -15
- data/test/logster/test_redis_rate_limiter.rb +35 -21
- data/test/logster/test_redis_store.rb +239 -151
- data/test/test_helper.rb +9 -9
- metadata +19 -4
data/test/logster/test_group.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require_relative "../test_helper"
|
4
|
+
require "logster/group"
|
5
|
+
require "logster/message"
|
6
6
|
|
7
7
|
class TestGroup < MiniTest::Test
|
8
8
|
def test_changed_is_true_for_new_instances
|
@@ -11,12 +11,13 @@ class TestGroup < MiniTest::Test
|
|
11
11
|
|
12
12
|
def test_from_json_works_correctly
|
13
13
|
time = (Time.now.to_f * 1000).to_i - 5000
|
14
|
-
json =
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
json =
|
15
|
+
JSON.generate(
|
16
|
+
key: "/somekey/",
|
17
|
+
messages_keys: [111, 222, 333].map(&:to_s),
|
18
|
+
timestamp: time,
|
19
|
+
count: 3,
|
20
|
+
)
|
20
21
|
group = Logster::Group.from_json(json)
|
21
22
|
refute group.changed?
|
22
23
|
assert_equal 3, group.count
|
@@ -34,7 +35,7 @@ class TestGroup < MiniTest::Test
|
|
34
35
|
assert_equal 1, group.count
|
35
36
|
|
36
37
|
msg2 = get_message
|
37
|
-
msg2.timestamp -=
|
38
|
+
msg2.timestamp -= 10_000
|
38
39
|
group.add_message(msg2)
|
39
40
|
assert_equal 2, group.count
|
40
41
|
assert_equal msg1.timestamp, group.timestamp
|
@@ -42,12 +43,7 @@ class TestGroup < MiniTest::Test
|
|
42
43
|
|
43
44
|
def test_adding_multiple_messages_works_correctly
|
44
45
|
group = get_group
|
45
|
-
messages = [
|
46
|
-
get_message(10),
|
47
|
-
get_message(5),
|
48
|
-
get_message(74),
|
49
|
-
get_message(26)
|
50
|
-
]
|
46
|
+
messages = [get_message(10), get_message(5), get_message(74), get_message(26)]
|
51
47
|
messages << messages[0]
|
52
48
|
group.messages = messages
|
53
49
|
group.count = 4
|
@@ -66,7 +62,7 @@ class TestGroup < MiniTest::Test
|
|
66
62
|
get_message(74),
|
67
63
|
get_message(26),
|
68
64
|
get_message(44),
|
69
|
-
get_message(390)
|
65
|
+
get_message(390),
|
70
66
|
]
|
71
67
|
messages.each { |m| group.add_message(m) }
|
72
68
|
# the count attr keeps track of the number of messages
|
@@ -91,6 +87,6 @@ class TestGroup < MiniTest::Test
|
|
91
87
|
end
|
92
88
|
|
93
89
|
def get_message(timestamp = nil)
|
94
|
-
Logster::Message.new(0,
|
90
|
+
Logster::Message.new(0, "", "testmessage", timestamp)
|
95
91
|
end
|
96
92
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
3
|
+
require_relative "../test_helper"
|
4
|
+
require "logster/ignore_pattern"
|
5
5
|
|
6
6
|
class TestIgnorePattern < Minitest::Test
|
7
|
-
|
8
7
|
def test_string_message_pattern
|
9
8
|
msg = Logster::Message.new(Logger::WARN, "test", "my error (oh no!)")
|
10
9
|
msg_frog = Logster::Message.new(Logger::WARN, "test", "a frog")
|
data/test/logster/test_logger.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require_relative "../test_helper"
|
4
|
+
require "logster/logger"
|
5
|
+
require "logger"
|
6
6
|
|
7
7
|
class TestStore < Logster::BaseStore
|
8
8
|
attr_accessor :calls
|
@@ -13,7 +13,6 @@ class TestStore < Logster::BaseStore
|
|
13
13
|
end
|
14
14
|
|
15
15
|
class TestLogger < Minitest::Test
|
16
|
-
|
17
16
|
def setup
|
18
17
|
@store = TestStore.new
|
19
18
|
@logger = Logster::Logger.new(@store)
|
@@ -35,9 +34,7 @@ class TestLogger < Minitest::Test
|
|
35
34
|
@logger.override_level = 2
|
36
35
|
|
37
36
|
@logger.add(0, "test", "prog", backtrace: "backtrace", env: { a: "x" })
|
38
|
-
Thread.new
|
39
|
-
@logger.add(0, "test", "prog", backtrace: "backtrace", env: { a: "x" })
|
40
|
-
end.join
|
37
|
+
Thread.new { @logger.add(0, "test", "prog", backtrace: "backtrace", env: { a: "x" }) }.join
|
41
38
|
|
42
39
|
@logger.override_level = nil
|
43
40
|
@logger.add(0, "test", "prog", backtrace: "backtrace", env: { a: "x" })
|
@@ -64,9 +61,7 @@ class TestLogger < Minitest::Test
|
|
64
61
|
|
65
62
|
@logger.add(0, "test", "prog", backtrace: "backtrace", env: { a: "x" })
|
66
63
|
|
67
|
-
[@store, @other_store].each
|
68
|
-
assert_equal "backtrace", store.calls[0][3][:backtrace]
|
69
|
-
end
|
64
|
+
[@store, @other_store].each { |store| assert_equal "backtrace", store.calls[0][3][:backtrace] }
|
70
65
|
end
|
71
66
|
|
72
67
|
def test_add_with_one_argument
|
@@ -76,7 +71,8 @@ class TestLogger < Minitest::Test
|
|
76
71
|
assert_equal "test", @store.calls.first[2]
|
77
72
|
end
|
78
73
|
|
79
|
-
class NewLogger < Logster::Logger
|
74
|
+
class NewLogger < Logster::Logger
|
75
|
+
end
|
80
76
|
|
81
77
|
def test_inherited_logger_backtrace_with_chain
|
82
78
|
@other_store = TestStore.new
|
@@ -85,9 +81,7 @@ class TestLogger < Minitest::Test
|
|
85
81
|
|
86
82
|
@logger.add(0, "test", "prog", backtrace: "backtrace", env: { a: "x" })
|
87
83
|
|
88
|
-
[@store, @other_store].each
|
89
|
-
assert_equal "backtrace", store.calls[0][3][:backtrace]
|
90
|
-
end
|
84
|
+
[@store, @other_store].each { |store| assert_equal "backtrace", store.calls[0][3][:backtrace] }
|
91
85
|
end
|
92
86
|
|
93
87
|
def test_progname_parameter
|
@@ -127,6 +121,12 @@ class TestLogger < Minitest::Test
|
|
127
121
|
assert_equal custom_err.backtrace.join("\n"), @store.calls[2][3][:backtrace]
|
128
122
|
end
|
129
123
|
|
124
|
+
def test_formatter
|
125
|
+
@logger.formatter = ->(severity, datetime, progname, msg) { "[test] #{msg}" }
|
126
|
+
@logger.add(0, "hello")
|
127
|
+
assert_equal "[test] hello", @store.calls[0][2]
|
128
|
+
end
|
129
|
+
|
130
130
|
private
|
131
131
|
|
132
132
|
def error_instance(error_class)
|
@@ -1,15 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
3
|
+
require_relative "../test_helper"
|
4
|
+
require "logster/message"
|
5
5
|
|
6
6
|
class TestMessage < MiniTest::Test
|
7
|
-
|
8
7
|
def test_merge_similar
|
9
|
-
msg1 = Logster::Message.new(0,
|
8
|
+
msg1 = Logster::Message.new(0, "", "test", 10)
|
10
9
|
msg1.populate_from_env(a: "1", b: "2")
|
11
10
|
|
12
|
-
msg2 = Logster::Message.new(0,
|
11
|
+
msg2 = Logster::Message.new(0, "", "test", 20)
|
13
12
|
msg2.populate_from_env(a: "2", c: "3")
|
14
13
|
assert_equal(msg2.grouping_key, msg1.grouping_key)
|
15
14
|
msg1.merge_similar_message(msg2)
|
@@ -21,35 +20,35 @@ class TestMessage < MiniTest::Test
|
|
21
20
|
|
22
21
|
def test_populate_from_env_will_add_time_to_env_unless_it_already_exists
|
23
22
|
t = (Time.now.to_f * 1000).to_i
|
24
|
-
msg = Logster::Message.new(0,
|
23
|
+
msg = Logster::Message.new(0, "", "test", t)
|
25
24
|
msg.populate_from_env({})
|
26
25
|
assert_equal(t, msg.env["time"])
|
27
26
|
|
28
|
-
msg = Logster::Message.new(0,
|
27
|
+
msg = Logster::Message.new(0, "", "test", t)
|
29
28
|
msg.populate_from_env(time: 5)
|
30
29
|
assert_nil(msg.env["time"])
|
31
30
|
assert_equal(5, msg.env[:time])
|
32
31
|
|
33
|
-
msg = Logster::Message.new(0,
|
32
|
+
msg = Logster::Message.new(0, "", "test", t)
|
34
33
|
msg.populate_from_env("time" => 6)
|
35
34
|
assert_equal(6, msg.env["time"])
|
36
35
|
assert_nil(msg.env[:time])
|
37
36
|
|
38
|
-
msg = Logster::Message.new(0,
|
37
|
+
msg = Logster::Message.new(0, "", "test", t)
|
39
38
|
msg.populate_from_env([{ "time" => 6 }, { "time" => 8 }])
|
40
39
|
assert_equal([6, 8], msg.env.map { |e| e["time"] })
|
41
40
|
assert_equal([nil, nil], msg.env.map { |e| e[:time] })
|
42
41
|
|
43
|
-
msg = Logster::Message.new(0,
|
42
|
+
msg = Logster::Message.new(0, "", "test", t)
|
44
43
|
msg.populate_from_env([{ dsd: 6 }, { dsd: 8 }])
|
45
44
|
assert_equal([t, t], msg.env.map { |e| e["time"] })
|
46
45
|
end
|
47
46
|
|
48
47
|
def test_merge_messages_both_with_array_envs
|
49
|
-
msg1 = Logster::Message.new(0,
|
48
|
+
msg1 = Logster::Message.new(0, "", "test", 10)
|
50
49
|
msg1.env = [{ a: "aa", b: "bb" }, { c: "cc", d: "dd" }]
|
51
50
|
|
52
|
-
msg2 = Logster::Message.new(0,
|
51
|
+
msg2 = Logster::Message.new(0, "", "test", 20)
|
53
52
|
msg2.env = [{ e: "ee", f: "ff" }, { g: "gg", h: "hh" }]
|
54
53
|
|
55
54
|
msg1.merge_similar_message(msg2)
|
@@ -57,10 +56,10 @@ class TestMessage < MiniTest::Test
|
|
57
56
|
end
|
58
57
|
|
59
58
|
def test_merge_messages_one_with_array_envs
|
60
|
-
msg1 = Logster::Message.new(0,
|
59
|
+
msg1 = Logster::Message.new(0, "", "test", 10)
|
61
60
|
msg1.env = { e: "ee", f: "ff" }
|
62
61
|
|
63
|
-
msg2 = Logster::Message.new(0,
|
62
|
+
msg2 = Logster::Message.new(0, "", "test", 20)
|
64
63
|
msg2.env = [{ a: "aa", b: "bb" }, { c: "cc", d: "dd" }]
|
65
64
|
|
66
65
|
msg1.merge_similar_message(msg2)
|
@@ -69,11 +68,10 @@ class TestMessage < MiniTest::Test
|
|
69
68
|
|
70
69
|
def test_adds_application_version
|
71
70
|
Logster.config.application_version = "abc"
|
72
|
-
msg = Logster::Message.new(0,
|
71
|
+
msg = Logster::Message.new(0, "", "test", 10)
|
73
72
|
msg.populate_from_env({})
|
74
73
|
|
75
74
|
assert_equal("abc", msg.env["application_version"])
|
76
|
-
|
77
75
|
ensure
|
78
76
|
Logster.config.application_version = nil
|
79
77
|
end
|
@@ -81,7 +79,7 @@ class TestMessage < MiniTest::Test
|
|
81
79
|
def test_use_full_hostname
|
82
80
|
Logster::Message.instance_variable_set(:@hostname, nil)
|
83
81
|
Logster.config.use_full_hostname = true
|
84
|
-
msg = Logster::Message.new(0,
|
82
|
+
msg = Logster::Message.new(0, "", "test", 10)
|
85
83
|
msg.populate_from_env({})
|
86
84
|
|
87
85
|
assert_equal(`hostname -f`.strip!, msg.env["hostname"])
|
@@ -91,8 +89,8 @@ class TestMessage < MiniTest::Test
|
|
91
89
|
end
|
92
90
|
|
93
91
|
def test_merging_sums_count_for_both_messages
|
94
|
-
msg1 = Logster::Message.new(0,
|
95
|
-
msg2 = Logster::Message.new(0,
|
92
|
+
msg1 = Logster::Message.new(0, "", "test", 10, count: 15)
|
93
|
+
msg2 = Logster::Message.new(0, "", "test", 20, count: 13)
|
96
94
|
msg2.env = {}
|
97
95
|
|
98
96
|
assert_equal(msg1.grouping_key, msg2.grouping_key)
|
@@ -108,8 +106,8 @@ class TestMessage < MiniTest::Test
|
|
108
106
|
message: "invalid encoding",
|
109
107
|
env: {
|
110
108
|
a: "bad_value",
|
111
|
-
b: ["bad_value"]
|
112
|
-
}
|
109
|
+
b: ["bad_value"],
|
110
|
+
},
|
113
111
|
}
|
114
112
|
json = hash.to_json.gsub("bad_value", "45\xC0\xBE")
|
115
113
|
message = Logster::Message.from_json(json)
|
@@ -120,7 +118,7 @@ class TestMessage < MiniTest::Test
|
|
120
118
|
end
|
121
119
|
|
122
120
|
def test_populate_from_env_works_on_array
|
123
|
-
msg = Logster::Message.new(0,
|
121
|
+
msg = Logster::Message.new(0, "", "test", 10)
|
124
122
|
hash = { "custom_key" => "key" }
|
125
123
|
msg.populate_from_env([hash])
|
126
124
|
|
@@ -130,9 +128,9 @@ class TestMessage < MiniTest::Test
|
|
130
128
|
end
|
131
129
|
|
132
130
|
def test_merging_envs_add_new_envs_to_buffer
|
133
|
-
msg1 = Logster::Message.new(0,
|
131
|
+
msg1 = Logster::Message.new(0, "", "test", 10, count: 50)
|
134
132
|
msg1.env = 50.times.map { |n| { a: n } }
|
135
|
-
msg2 = Logster::Message.new(0,
|
133
|
+
msg2 = Logster::Message.new(0, "", "test", 20, count: 13)
|
136
134
|
msg2.env = 13.times.map { |n| { b: n } }
|
137
135
|
|
138
136
|
assert_equal(msg1.grouping_key, msg2.grouping_key)
|
@@ -159,7 +157,7 @@ class TestMessage < MiniTest::Test
|
|
159
157
|
end
|
160
158
|
|
161
159
|
def test_drop_redundant_envs
|
162
|
-
message = Logster::Message.new(Logger::WARN,
|
160
|
+
message = Logster::Message.new(Logger::WARN, "", "message")
|
163
161
|
message.env = [{ a: 4 }] * 10
|
164
162
|
assert_equal(10, message.env.size)
|
165
163
|
message.drop_redundant_envs(5)
|
@@ -172,7 +170,7 @@ class TestMessage < MiniTest::Test
|
|
172
170
|
end
|
173
171
|
|
174
172
|
def test_apply_env_size_limit_keeps_as_many_keys_as_possible
|
175
|
-
message = Logster::Message.new(Logger::WARN,
|
173
|
+
message = Logster::Message.new(Logger::WARN, "", "message", 1)
|
176
174
|
env = { a: 1, bb: 22, ccc: 333 }
|
177
175
|
message.env = env.dup
|
178
176
|
message.apply_env_size_limit(24)
|
@@ -207,7 +205,7 @@ class TestMessage < MiniTest::Test
|
|
207
205
|
/var/www/discourse/lib/scheduler/defer.rb:79:in `block (2 levels) in start_thread'
|
208
206
|
TEXT
|
209
207
|
gems_dir = "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/"
|
210
|
-
message = Logster::Message.new(Logger::WARN,
|
208
|
+
message = Logster::Message.new(Logger::WARN, "", "message", 1)
|
211
209
|
|
212
210
|
message.backtrace = backtrace.dup
|
213
211
|
assert_operator(message.to_json(exclude_env: true).bytesize, :>=, 500)
|
@@ -229,7 +227,7 @@ class TestMessage < MiniTest::Test
|
|
229
227
|
rails_multisite-2.0.7/lib/rails_multisite/connection_management.rb:60:in `with_connection'
|
230
228
|
/var/www/discourse
|
231
229
|
TEXT
|
232
|
-
message = Logster::Message.new(Logger::WARN,
|
230
|
+
message = Logster::Message.new(Logger::WARN, "", "message", 1)
|
233
231
|
message.backtrace = backtrace.dup
|
234
232
|
assert_operator(message.to_json(exclude_env: true).bytesize, :>=, 350)
|
235
233
|
message.apply_message_size_limit(350)
|
@@ -239,7 +237,7 @@ class TestMessage < MiniTest::Test
|
|
239
237
|
|
240
238
|
def test_truncate_backtrace_shouldnt_corrupt_backtrace_when_it_contains_multibytes_characters
|
241
239
|
backtrace = "aहa"
|
242
|
-
message = Logster::Message.new(Logger::WARN,
|
240
|
+
message = Logster::Message.new(Logger::WARN, "", "message", 1)
|
243
241
|
message.backtrace = backtrace.dup
|
244
242
|
message.truncate_backtrace(3)
|
245
243
|
assert_equal("a", message.backtrace)
|
@@ -254,7 +252,7 @@ class TestMessage < MiniTest::Test
|
|
254
252
|
end
|
255
253
|
|
256
254
|
def test_apply_message_size_limit_doesnt_remove_backtrace_entirely
|
257
|
-
message = Logster::Message.new(Logger::WARN,
|
255
|
+
message = Logster::Message.new(Logger::WARN, "", "message", 1)
|
258
256
|
message.backtrace = "a" * 1000
|
259
257
|
assert_operator(message.to_json(exclude_env: true).bytesize, :>=, 500)
|
260
258
|
message.apply_message_size_limit(500)
|
@@ -263,7 +261,7 @@ class TestMessage < MiniTest::Test
|
|
263
261
|
end
|
264
262
|
|
265
263
|
def test_apply_message_size_limit_doesnt_hang_forever_and_doesnt_remove_backtrace_entirely
|
266
|
-
message = Logster::Message.new(Logger::WARN,
|
264
|
+
message = Logster::Message.new(Logger::WARN, "", "message", 1)
|
267
265
|
message.backtrace = "aa" * 100
|
268
266
|
message.apply_message_size_limit(10)
|
269
267
|
assert_equal(("aa" * 100).size, message.backtrace.size)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require_relative "../test_helper"
|
4
|
+
require "logster/redis_store"
|
5
|
+
require "logster/pattern"
|
6
6
|
|
7
7
|
class TestPattern < Minitest::Test
|
8
8
|
class FakePattern < Logster::Pattern
|
@@ -90,22 +90,16 @@ class TestPattern < Minitest::Test
|
|
90
90
|
def test_save_works_correctly
|
91
91
|
bad_patterns = ["/bruken", nil, "[a-z", "/(osa|sss{1/"]
|
92
92
|
bad_patterns.each do |p|
|
93
|
-
assert_raises(Logster::Pattern::PatternError)
|
94
|
-
FakePattern.new(p).save
|
95
|
-
end
|
93
|
+
assert_raises(Logster::Pattern::PatternError) { FakePattern.new(p).save }
|
96
94
|
end
|
97
95
|
assert_equal(0, FakePattern.find_all.size)
|
98
96
|
|
99
97
|
good_patterns = ["/logster/i", /logster/, "sssd", "(ccx|tqe){1,5}", "logster"]
|
100
|
-
good_patterns.each
|
101
|
-
FakePattern.new(p).save
|
102
|
-
end
|
98
|
+
good_patterns.each { |p| FakePattern.new(p).save }
|
103
99
|
results = FakePattern.find_all
|
104
100
|
assert_equal(4, results.size) # 4 because /logster/ and logster are the same
|
105
101
|
good_patterns_regex = [/logster/i, /logster/, /sssd/, /(ccx|tqe){1,5}/]
|
106
|
-
results.each
|
107
|
-
assert_includes(good_patterns_regex, p)
|
108
|
-
end
|
102
|
+
results.each { |p| assert_includes(good_patterns_regex, p) }
|
109
103
|
end
|
110
104
|
|
111
105
|
def test_modify_works_correctly
|
@@ -123,9 +117,7 @@ class TestPattern < Minitest::Test
|
|
123
117
|
record = FakePattern.new(/LoGsTEr/)
|
124
118
|
record.save
|
125
119
|
|
126
|
-
assert_raises(Logster::Pattern::PatternError)
|
127
|
-
record.modify("/badReg")
|
128
|
-
end
|
120
|
+
assert_raises(Logster::Pattern::PatternError) { record.modify("/badReg") }
|
129
121
|
all_patterns = FakePattern.find_all
|
130
122
|
assert_equal(1, all_patterns.size)
|
131
123
|
assert_equal(/LoGsTEr/, all_patterns.first)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require_relative "../test_helper"
|
4
|
+
require "logster/redis_store"
|
5
|
+
require "rack"
|
6
6
|
|
7
7
|
class TestRedisRateLimiter < Minitest::Test
|
8
8
|
def setup
|
@@ -19,13 +19,17 @@ class TestRedisRateLimiter < Minitest::Test
|
|
19
19
|
|
20
20
|
@redis.set("dont_nuke", "1")
|
21
21
|
|
22
|
-
@rate_limiter =
|
23
|
-
|
24
|
-
|
22
|
+
@rate_limiter =
|
23
|
+
Logster::RedisRateLimiter.new(
|
24
|
+
@redis,
|
25
|
+
[Logger::WARN],
|
26
|
+
8,
|
27
|
+
60,
|
28
|
+
Proc.new { "prefix" },
|
29
|
+
Proc.new { called += 1 },
|
30
|
+
)
|
25
31
|
|
26
|
-
9.times
|
27
|
-
@rate_limiter.check(Logger::WARN)
|
28
|
-
end
|
32
|
+
9.times { @rate_limiter.check(Logger::WARN) }
|
29
33
|
|
30
34
|
assert_equal 10, @rate_limiter.check(Logger::WARN)
|
31
35
|
|
@@ -40,7 +44,6 @@ class TestRedisRateLimiter < Minitest::Test
|
|
40
44
|
|
41
45
|
assert_equal "1", @redis.get("dont_nuke")
|
42
46
|
@redis.del("dont_nuke")
|
43
|
-
|
44
47
|
end
|
45
48
|
|
46
49
|
def test_check
|
@@ -48,9 +51,8 @@ class TestRedisRateLimiter < Minitest::Test
|
|
48
51
|
Timecop.freeze(time)
|
49
52
|
called = 0
|
50
53
|
|
51
|
-
@rate_limiter =
|
52
|
-
@redis, [Logger::WARN], 8, 60, nil, Proc.new { called += 1 }
|
53
|
-
)
|
54
|
+
@rate_limiter =
|
55
|
+
Logster::RedisRateLimiter.new(@redis, [Logger::WARN], 8, 60, nil, Proc.new { called += 1 })
|
54
56
|
|
55
57
|
assert_equal(1, @rate_limiter.check(Logger::WARN))
|
56
58
|
assert_redis_key(60, 0)
|
@@ -113,9 +115,15 @@ class TestRedisRateLimiter < Minitest::Test
|
|
113
115
|
Timecop.freeze(time)
|
114
116
|
called = 0
|
115
117
|
|
116
|
-
@rate_limiter =
|
117
|
-
|
118
|
-
|
118
|
+
@rate_limiter =
|
119
|
+
Logster::RedisRateLimiter.new(
|
120
|
+
@redis,
|
121
|
+
[Logger::WARN, Logger::ERROR],
|
122
|
+
4,
|
123
|
+
60,
|
124
|
+
nil,
|
125
|
+
Proc.new { called += 1 },
|
126
|
+
)
|
119
127
|
|
120
128
|
assert_equal(1, @rate_limiter.check(Logger::WARN))
|
121
129
|
assert_equal(2, @rate_limiter.check(Logger::ERROR))
|
@@ -170,16 +178,22 @@ class TestRedisRateLimiter < Minitest::Test
|
|
170
178
|
def test_raw_connection
|
171
179
|
time = Time.new(2015, 1, 1, 1, 1)
|
172
180
|
Timecop.freeze(time)
|
173
|
-
@rate_limiter =
|
181
|
+
@rate_limiter =
|
182
|
+
Logster::RedisRateLimiter.new(@redis, [Logger::WARN], 1, 60, Proc.new { "lobster" })
|
174
183
|
|
175
184
|
assert_equal(1, @rate_limiter.check(Logger::WARN))
|
176
185
|
assert_redis_key(60, 0)
|
177
186
|
|
178
187
|
toggle = true
|
179
188
|
|
180
|
-
@rate_limiter =
|
181
|
-
|
182
|
-
|
189
|
+
@rate_limiter =
|
190
|
+
Logster::RedisRateLimiter.new(
|
191
|
+
@redis,
|
192
|
+
[Logger::WARN],
|
193
|
+
1,
|
194
|
+
60,
|
195
|
+
Proc.new { toggle ? "lobster1" : "lobster2" },
|
196
|
+
)
|
183
197
|
|
184
198
|
assert_includes(key, "lobster1")
|
185
199
|
|
@@ -188,7 +202,7 @@ class TestRedisRateLimiter < Minitest::Test
|
|
188
202
|
end
|
189
203
|
|
190
204
|
def test_retrieve_rate
|
191
|
-
time = Time.new(2015, 1, 1, 1
|
205
|
+
time = Time.new(2015, 1, 1, 1, 1)
|
192
206
|
Timecop.freeze(time)
|
193
207
|
|
194
208
|
@rate_limiter = Logster::RedisRateLimiter.new(@redis, [Logger::WARN], 1, 60)
|