tangled
alpha
login
or
join now
lesbian.skin
/
glimit
4
fork
atom
this repo has no description
4
fork
atom
overview
issues
pulls
pipelines
๐งน Add job to cleanup full buckets
Joris Hartog
2 years ago
2deda251
9fccff8a
+47
-39
2 changed files
expand all
collapse all
unified
split
src
glimit
registry.gleam
test
glimit_registry_test.gleam
+11
-4
src/glimit/registry.gleam
···
4
4
import gleam/dict.{type Dict}
5
5
import gleam/erlang/process.{type Subject}
6
6
import gleam/list
7
7
+
import gleam/option.{type Option, None, Some}
7
8
import gleam/otp/actor
8
9
import gleam/otp/task
9
10
import gleam/result
···
116
117
|> result.nil_error,
117
118
)
118
119
119
119
-
task.async(fn() { sweep_loop(registry, 10) })
120
120
+
task.async(fn() { sweep(registry, Some(10)) })
120
121
121
122
Ok(registry)
122
123
}
···
159
160
///
160
161
/// This function is repeated periodically.
161
162
///
162
162
-
fn sweep_loop(registry: RateLimiterRegistryActor(id), interval_secs: Int) {
163
163
-
process.sleep(interval_secs * 1000)
163
163
+
pub fn sweep(registry: RateLimiterRegistryActor(id), interval_secs: Option(Int)) {
164
164
+
case interval_secs {
165
165
+
Some(i) -> process.sleep(i * 1000)
166
166
+
None -> Nil
167
167
+
}
164
168
165
169
get_all(registry)
166
170
|> list.filter(fn(pair) {
···
175
179
identifier
176
180
})
177
181
178
178
-
sweep_loop(registry, interval_secs)
182
182
+
case interval_secs {
183
183
+
Some(_) -> sweep(registry, interval_secs)
184
184
+
None -> Nil
185
185
+
}
179
186
}
+36
-35
test/glimit_registry_test.gleam
···
1
1
+
import gleam/option.{None}
1
2
import gleeunit/should
2
3
import glimit/rate_limiter
3
4
import glimit/registry
···
31
32
rate_limiter
32
33
|> should.not_equal(same_rate_limiter)
33
34
}
34
34
-
// TODO: refactor
35
35
-
//pub fn sweep_full_bucket_test() {
36
36
-
// let registry = case registry.new(2, 2) {
37
37
-
// Ok(registry) -> registry
38
38
-
// Error(_) -> {
39
39
-
// panic as "Should be able to create a new registry"
40
40
-
// }
41
41
-
// }
42
42
-
//
43
43
-
// let assert Ok(rate_limiter) = registry |> registry.get_or_create("๐")
44
44
-
// registry |> registry.sweep
45
45
-
// let assert Ok(new_rate_limiter) = registry |> registry.get_or_create("๐")
46
46
-
//
47
47
-
// rate_limiter
48
48
-
// |> should.not_equal(new_rate_limiter)
49
49
-
//}
50
50
-
//
51
51
-
//pub fn sweep_not_full_bucket_test() {
52
52
-
// let registry = case registry.new(2, 2) {
53
53
-
// Ok(registry) -> registry
54
54
-
// Error(_) -> {
55
55
-
// panic as "Should be able to create a new registry"
56
56
-
// }
57
57
-
// }
58
58
-
//
59
59
-
// let assert Ok(rate_limiter) = registry |> registry.get_or_create("๐")
60
60
-
//
61
61
-
// let _ = rate_limiter |> rate_limiter.hit
62
62
-
// registry |> registry.sweep
63
63
-
//
64
64
-
// let assert Ok(new_rate_limiter) = registry |> registry.get_or_create("๐")
65
65
-
//
66
66
-
// rate_limiter
67
67
-
// |> should.equal(new_rate_limiter)
68
68
-
//}
35
35
+
36
36
+
pub fn sweep_full_bucket_test() {
37
37
+
let registry = case registry.new(2, 2) {
38
38
+
Ok(registry) -> registry
39
39
+
Error(_) -> {
40
40
+
panic as "Should be able to create a new registry"
41
41
+
}
42
42
+
}
43
43
+
44
44
+
let assert Ok(rate_limiter) = registry |> registry.get_or_create("๐")
45
45
+
registry |> registry.sweep(None)
46
46
+
let assert Ok(new_rate_limiter) = registry |> registry.get_or_create("๐")
47
47
+
48
48
+
rate_limiter
49
49
+
|> should.not_equal(new_rate_limiter)
50
50
+
}
51
51
+
52
52
+
pub fn sweep_not_full_bucket_test() {
53
53
+
let registry = case registry.new(2, 2) {
54
54
+
Ok(registry) -> registry
55
55
+
Error(_) -> {
56
56
+
panic as "Should be able to create a new registry"
57
57
+
}
58
58
+
}
59
59
+
60
60
+
let assert Ok(rate_limiter) = registry |> registry.get_or_create("๐")
61
61
+
62
62
+
let _ = rate_limiter |> rate_limiter.hit
63
63
+
registry |> registry.sweep(None)
64
64
+
65
65
+
let assert Ok(new_rate_limiter) = registry |> registry.get_or_create("๐")
66
66
+
67
67
+
rate_limiter
68
68
+
|> should.equal(new_rate_limiter)
69
69
+
}