itsi 0.1.0 → 0.1.3
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/Cargo.lock +524 -44
- data/Rakefile +22 -33
- data/crates/itsi_error/Cargo.toml +2 -0
- data/crates/itsi_error/src/from.rs +70 -0
- data/crates/itsi_error/src/lib.rs +10 -37
- data/crates/itsi_instrument_entry/Cargo.toml +15 -0
- data/crates/itsi_instrument_entry/src/lib.rs +31 -0
- data/crates/itsi_rb_helpers/Cargo.toml +2 -0
- data/crates/itsi_rb_helpers/src/heap_value.rs +121 -0
- data/crates/itsi_rb_helpers/src/lib.rs +90 -10
- data/crates/itsi_scheduler/Cargo.toml +9 -1
- data/crates/itsi_scheduler/extconf.rb +1 -1
- data/crates/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
- data/crates/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
- data/crates/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
- data/crates/itsi_scheduler/src/itsi_scheduler.rs +308 -0
- data/crates/itsi_scheduler/src/lib.rs +31 -10
- data/crates/itsi_server/Cargo.toml +14 -2
- data/crates/itsi_server/extconf.rb +1 -1
- data/crates/itsi_server/src/body_proxy/big_bytes.rs +104 -0
- data/crates/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
- data/crates/itsi_server/src/body_proxy/mod.rs +2 -0
- data/crates/itsi_server/src/lib.rs +58 -7
- data/crates/itsi_server/src/request/itsi_request.rs +238 -104
- data/crates/itsi_server/src/response/itsi_response.rs +347 -0
- data/crates/itsi_server/src/response/mod.rs +1 -0
- data/crates/itsi_server/src/server/bind.rs +50 -20
- data/crates/itsi_server/src/server/bind_protocol.rs +37 -0
- data/crates/itsi_server/src/server/io_stream.rs +104 -0
- data/crates/itsi_server/src/server/itsi_ca/itsi_ca.crt +11 -30
- data/crates/itsi_server/src/server/itsi_ca/itsi_ca.key +3 -50
- data/crates/itsi_server/src/server/itsi_server.rs +196 -134
- data/crates/itsi_server/src/server/lifecycle_event.rs +9 -0
- data/crates/itsi_server/src/server/listener.rs +184 -127
- data/crates/itsi_server/src/server/mod.rs +7 -1
- data/crates/itsi_server/src/server/process_worker.rs +196 -0
- data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +254 -0
- data/crates/itsi_server/src/server/serve_strategy/mod.rs +27 -0
- data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +241 -0
- data/crates/itsi_server/src/server/signal.rs +70 -0
- data/crates/itsi_server/src/server/thread_worker.rs +368 -0
- data/crates/itsi_server/src/server/tls.rs +42 -28
- data/crates/itsi_tracing/Cargo.toml +4 -0
- data/crates/itsi_tracing/src/lib.rs +36 -6
- data/gems/scheduler/Cargo.lock +219 -23
- data/gems/scheduler/Rakefile +7 -1
- data/gems/scheduler/ext/itsi_error/Cargo.toml +2 -0
- data/gems/scheduler/ext/itsi_error/src/from.rs +70 -0
- data/gems/scheduler/ext/itsi_error/src/lib.rs +10 -37
- data/gems/scheduler/ext/itsi_instrument_entry/Cargo.toml +15 -0
- data/gems/scheduler/ext/itsi_instrument_entry/src/lib.rs +31 -0
- data/gems/scheduler/ext/itsi_rb_helpers/Cargo.toml +2 -0
- data/gems/scheduler/ext/itsi_rb_helpers/src/heap_value.rs +121 -0
- data/gems/scheduler/ext/itsi_rb_helpers/src/lib.rs +90 -10
- data/gems/scheduler/ext/itsi_scheduler/Cargo.toml +9 -1
- data/gems/scheduler/ext/itsi_scheduler/extconf.rb +1 -1
- data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
- data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
- data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
- data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
- data/gems/scheduler/ext/itsi_scheduler/src/lib.rs +31 -10
- data/gems/scheduler/ext/itsi_server/Cargo.toml +41 -0
- data/gems/scheduler/ext/itsi_server/extconf.rb +6 -0
- data/gems/scheduler/ext/itsi_server/src/body_proxy/big_bytes.rs +104 -0
- data/gems/scheduler/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
- data/gems/scheduler/ext/itsi_server/src/body_proxy/mod.rs +2 -0
- data/gems/scheduler/ext/itsi_server/src/lib.rs +103 -0
- data/gems/scheduler/ext/itsi_server/src/request/itsi_request.rs +277 -0
- data/gems/scheduler/ext/itsi_server/src/request/mod.rs +1 -0
- data/gems/scheduler/ext/itsi_server/src/response/itsi_response.rs +347 -0
- data/gems/scheduler/ext/itsi_server/src/response/mod.rs +1 -0
- data/gems/scheduler/ext/itsi_server/src/server/bind.rs +168 -0
- data/gems/scheduler/ext/itsi_server/src/server/bind_protocol.rs +37 -0
- data/gems/scheduler/ext/itsi_server/src/server/io_stream.rs +104 -0
- data/gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +13 -0
- data/gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +5 -0
- data/gems/scheduler/ext/itsi_server/src/server/itsi_server.rs +244 -0
- data/gems/scheduler/ext/itsi_server/src/server/lifecycle_event.rs +9 -0
- data/gems/scheduler/ext/itsi_server/src/server/listener.rs +275 -0
- data/gems/scheduler/ext/itsi_server/src/server/mod.rs +11 -0
- data/gems/scheduler/ext/itsi_server/src/server/process_worker.rs +196 -0
- data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +254 -0
- data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/mod.rs +27 -0
- data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/single_mode.rs +241 -0
- data/gems/scheduler/ext/itsi_server/src/server/signal.rs +70 -0
- data/gems/scheduler/ext/itsi_server/src/server/thread_worker.rs +368 -0
- data/gems/scheduler/ext/itsi_server/src/server/tls.rs +152 -0
- data/gems/scheduler/ext/itsi_tracing/Cargo.toml +4 -0
- data/gems/scheduler/ext/itsi_tracing/src/lib.rs +36 -6
- data/gems/scheduler/itsi-scheduler.gemspec +2 -3
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/scheduler/lib/itsi/scheduler.rb +137 -1
- data/gems/scheduler/test/helpers/test_helper.rb +24 -0
- data/gems/scheduler/test/test_active_record.rb +158 -0
- data/gems/scheduler/test/test_address_resolve.rb +23 -0
- data/gems/scheduler/test/test_block_unblock.rb +229 -0
- data/gems/scheduler/test/test_file_io.rb +193 -0
- data/gems/scheduler/test/test_itsi_scheduler.rb +24 -1
- data/gems/scheduler/test/test_kernel_sleep.rb +91 -0
- data/gems/scheduler/test/test_nested_fibers.rb +286 -0
- data/gems/scheduler/test/test_network_io.rb +274 -0
- data/gems/scheduler/test/test_process_wait.rb +26 -0
- data/gems/server/exe/itsi +88 -28
- data/gems/server/ext/itsi_error/Cargo.toml +2 -0
- data/gems/server/ext/itsi_error/src/from.rs +70 -0
- data/gems/server/ext/itsi_error/src/lib.rs +10 -37
- data/gems/server/ext/itsi_instrument_entry/Cargo.toml +15 -0
- data/gems/server/ext/itsi_instrument_entry/src/lib.rs +31 -0
- data/gems/server/ext/itsi_rb_helpers/Cargo.toml +2 -0
- data/gems/server/ext/itsi_rb_helpers/src/heap_value.rs +121 -0
- data/gems/server/ext/itsi_rb_helpers/src/lib.rs +90 -10
- data/gems/server/ext/itsi_scheduler/Cargo.toml +24 -0
- data/gems/server/ext/itsi_scheduler/extconf.rb +6 -0
- data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
- data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
- data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
- data/gems/server/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
- data/gems/server/ext/itsi_scheduler/src/lib.rs +38 -0
- data/gems/server/ext/itsi_server/Cargo.toml +14 -2
- data/gems/server/ext/itsi_server/extconf.rb +1 -1
- data/gems/server/ext/itsi_server/src/body_proxy/big_bytes.rs +104 -0
- data/gems/server/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
- data/gems/server/ext/itsi_server/src/body_proxy/mod.rs +2 -0
- data/gems/server/ext/itsi_server/src/lib.rs +58 -7
- data/gems/server/ext/itsi_server/src/request/itsi_request.rs +238 -104
- data/gems/server/ext/itsi_server/src/response/itsi_response.rs +347 -0
- data/gems/server/ext/itsi_server/src/response/mod.rs +1 -0
- data/gems/server/ext/itsi_server/src/server/bind.rs +50 -20
- data/gems/server/ext/itsi_server/src/server/bind_protocol.rs +37 -0
- data/gems/server/ext/itsi_server/src/server/io_stream.rs +104 -0
- data/gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +11 -30
- data/gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +3 -50
- data/gems/server/ext/itsi_server/src/server/itsi_server.rs +196 -134
- data/gems/server/ext/itsi_server/src/server/lifecycle_event.rs +9 -0
- data/gems/server/ext/itsi_server/src/server/listener.rs +184 -127
- data/gems/server/ext/itsi_server/src/server/mod.rs +7 -1
- data/gems/server/ext/itsi_server/src/server/process_worker.rs +196 -0
- data/gems/server/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +254 -0
- data/gems/server/ext/itsi_server/src/server/serve_strategy/mod.rs +27 -0
- data/gems/server/ext/itsi_server/src/server/serve_strategy/single_mode.rs +241 -0
- data/gems/server/ext/itsi_server/src/server/signal.rs +70 -0
- data/gems/server/ext/itsi_server/src/server/thread_worker.rs +368 -0
- data/gems/server/ext/itsi_server/src/server/tls.rs +42 -28
- data/gems/server/ext/itsi_tracing/Cargo.toml +4 -0
- data/gems/server/ext/itsi_tracing/src/lib.rs +36 -6
- data/gems/server/itsi-server.gemspec +4 -5
- data/gems/server/lib/itsi/request.rb +30 -14
- data/gems/server/lib/itsi/server/rack/handler/itsi.rb +25 -0
- data/gems/server/lib/itsi/server/scheduler_mode.rb +6 -0
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/lib/itsi/server.rb +82 -2
- data/gems/server/lib/itsi/signals.rb +23 -0
- data/gems/server/lib/itsi/stream_io.rb +38 -0
- data/gems/server/test/test_helper.rb +2 -0
- data/gems/server/test/test_itsi_server.rb +1 -1
- data/lib/itsi/version.rb +1 -1
- data/tasks.txt +18 -0
- metadata +102 -12
- data/crates/itsi_server/src/server/transfer_protocol.rs +0 -23
- data/crates/itsi_server/src/stream_writer/mod.rs +0 -21
- data/gems/scheduler/test/test_helper.rb +0 -6
- data/gems/server/ext/itsi_server/src/server/transfer_protocol.rs +0 -23
- data/gems/server/ext/itsi_server/src/stream_writer/mod.rs +0 -21
@@ -2,12 +2,92 @@
|
|
2
2
|
|
3
3
|
require_relative "server/version"
|
4
4
|
require_relative "server/itsi_server"
|
5
|
+
require_relative "signals"
|
6
|
+
require_relative "request"
|
7
|
+
require_relative "stream_io"
|
8
|
+
require_relative "server/rack/handler/itsi"
|
5
9
|
|
6
10
|
module Itsi
|
7
11
|
class Server
|
8
|
-
|
12
|
+
|
13
|
+
def self.running?
|
14
|
+
@running ||= false
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.start(app:, **opts)
|
18
|
+
server = new(app: ->{app}, **opts)
|
19
|
+
@running = true
|
20
|
+
Signal.trap('INT', 'DEFAULT')
|
21
|
+
server.start
|
22
|
+
ensure
|
23
|
+
@running = false
|
24
|
+
end
|
25
|
+
|
9
26
|
def self.call(app, request)
|
10
|
-
app.call(request.to_env)
|
27
|
+
respond request, app.call(request.to_env)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.streaming_body?(body)
|
31
|
+
body.respond_to?(:call) && !body.respond_to?(:each)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.respond(request, (status, headers, body))
|
35
|
+
response = request.response
|
36
|
+
|
37
|
+
# Don't try and respond if we've been hijacked.
|
38
|
+
# The hijacker is now responsible for this.
|
39
|
+
return if request.hijacked
|
40
|
+
|
41
|
+
# 1. Set Status
|
42
|
+
response.status = status
|
43
|
+
|
44
|
+
# 2. Set Headers
|
45
|
+
headers.each do |key, value|
|
46
|
+
next response.add_header(key, value) unless value.is_a?(Array)
|
47
|
+
|
48
|
+
value.each do |v|
|
49
|
+
response.add_header(key, v)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# 3. Set Body
|
54
|
+
# As soon as we start setting the response
|
55
|
+
# the server will begin to stream it to the client.
|
56
|
+
|
57
|
+
# If we're partially hijacked or returned a streaming body,
|
58
|
+
# stream this response.
|
59
|
+
|
60
|
+
if (body_streamer = streaming_body?(body) ? body : headers.delete("rack.hijack"))
|
61
|
+
body_streamer.call(StreamIO.new(response))
|
62
|
+
|
63
|
+
# If we're enumerable with more than one chunk
|
64
|
+
# also stream, otherwise write in a single chunk
|
65
|
+
elsif body.respond_to?(:each) || body.respond_to?(:to_ary)
|
66
|
+
unless body.respond_to?(:each)
|
67
|
+
body = body.to_ary
|
68
|
+
raise "Body #to_ary didn't return an array" unless body.is_a?(Array)
|
69
|
+
end
|
70
|
+
# We offset this iteration intentionally,
|
71
|
+
# to optimize for the case where there's only one chunk.
|
72
|
+
buffer = nil
|
73
|
+
body.each do |part|
|
74
|
+
response.send_frame(buffer.to_s) if buffer
|
75
|
+
buffer = part
|
76
|
+
end
|
77
|
+
|
78
|
+
response.send_and_close(buffer.to_s)
|
79
|
+
else
|
80
|
+
response.send_and_close(body.to_s)
|
81
|
+
end
|
82
|
+
ensure
|
83
|
+
response.close_write
|
84
|
+
body.close if body.respond_to?(:close)
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.start_scheduler_loop(scheduler_class, scheduler_task)
|
88
|
+
scheduler = scheduler_class.new
|
89
|
+
Fiber.set_scheduler(scheduler)
|
90
|
+
[scheduler, Fiber.schedule(&scheduler_task)]
|
11
91
|
end
|
12
92
|
|
13
93
|
# If scheduler is enabled
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Itsi
|
2
|
+
module Signals
|
3
|
+
DEFAULT_SIGNALS = ["DEFAULT", ""].freeze
|
4
|
+
module SignalTrap
|
5
|
+
def self.trap(signal, *args, &block)
|
6
|
+
if DEFAULT_SIGNALS.include?(command.to_s) && block.nil?
|
7
|
+
Itsi::Server.reset_signal_handlers
|
8
|
+
nil
|
9
|
+
else
|
10
|
+
super(signal, *args, &block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
[Kernel, Signal].each do |receiver|
|
18
|
+
receiver.singleton_class.prepend(Itsi::Signals::SignalTrap)
|
19
|
+
end
|
20
|
+
|
21
|
+
[Object].each do |receiver|
|
22
|
+
receiver.include(Itsi::Signals::SignalTrap)
|
23
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Itsi
|
2
|
+
class StreamIO
|
3
|
+
attr :response
|
4
|
+
def initialize(response)
|
5
|
+
@response = response
|
6
|
+
end
|
7
|
+
|
8
|
+
def read
|
9
|
+
response.recv_frame
|
10
|
+
end
|
11
|
+
|
12
|
+
def write(string)
|
13
|
+
response.send_frame(string)
|
14
|
+
end
|
15
|
+
|
16
|
+
def <<(string)
|
17
|
+
response.send_frame(string)
|
18
|
+
end
|
19
|
+
|
20
|
+
def flush
|
21
|
+
# No-op
|
22
|
+
end
|
23
|
+
|
24
|
+
def close
|
25
|
+
close_read
|
26
|
+
close_write
|
27
|
+
end
|
28
|
+
|
29
|
+
def close_read
|
30
|
+
response.close_read
|
31
|
+
end
|
32
|
+
|
33
|
+
def close_write
|
34
|
+
response.close_write
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/lib/itsi/version.rb
CHANGED
data/tasks.txt
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
- Release v0.1.3
|
2
|
+
- Autocert (Hard. And dev certs use local CA)
|
3
|
+
- Test on MOD
|
4
|
+
- Filters (Medium)
|
5
|
+
- Static File Serve (Medium).error pages
|
6
|
+
- Preload Groups
|
7
|
+
- Signal to log info
|
8
|
+
- Dashboard
|
9
|
+
|
10
|
+
- Polish and Release (At Lake)
|
11
|
+
-- Log params (Think long and hard about what we should and shouldn't log)
|
12
|
+
-- Parameterize EVERYTHING (OOB GC, and others)
|
13
|
+
-- No unwrap or except
|
14
|
+
-- Switch to direct scheduler integration
|
15
|
+
-- Fix Scheduler Hanging test (Or remove it)
|
16
|
+
|
17
|
+
Later:
|
18
|
+
- Broken shutdown (sometimes) in Fiber mode
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itsi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-03-
|
10
|
+
date: 2025-03-14 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: itsi-server
|
@@ -15,28 +15,28 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version:
|
18
|
+
version: 0.1.2
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version:
|
25
|
+
version: 0.1.2
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: itsi-scheduler
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 0.1.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: 0.1.2
|
40
40
|
description: Wrapper Gem for both the Itsi server and it's Fiber scheduler
|
41
41
|
email:
|
42
42
|
- wc@pico.net.nz
|
@@ -50,27 +50,47 @@ files:
|
|
50
50
|
- Rakefile
|
51
51
|
- crates/itsi_error/Cargo.lock
|
52
52
|
- crates/itsi_error/Cargo.toml
|
53
|
+
- crates/itsi_error/src/from.rs
|
53
54
|
- crates/itsi_error/src/lib.rs
|
55
|
+
- crates/itsi_instrument_entry/Cargo.toml
|
56
|
+
- crates/itsi_instrument_entry/src/lib.rs
|
54
57
|
- crates/itsi_rb_helpers/Cargo.lock
|
55
58
|
- crates/itsi_rb_helpers/Cargo.toml
|
59
|
+
- crates/itsi_rb_helpers/src/heap_value.rs
|
56
60
|
- crates/itsi_rb_helpers/src/lib.rs
|
57
61
|
- crates/itsi_scheduler/Cargo.toml
|
58
62
|
- crates/itsi_scheduler/extconf.rb
|
63
|
+
- crates/itsi_scheduler/src/itsi_scheduler.rs
|
64
|
+
- crates/itsi_scheduler/src/itsi_scheduler/io_helpers.rs
|
65
|
+
- crates/itsi_scheduler/src/itsi_scheduler/io_waiter.rs
|
66
|
+
- crates/itsi_scheduler/src/itsi_scheduler/timer.rs
|
59
67
|
- crates/itsi_scheduler/src/lib.rs
|
60
68
|
- crates/itsi_server/Cargo.toml
|
61
69
|
- crates/itsi_server/extconf.rb
|
70
|
+
- crates/itsi_server/src/body_proxy/big_bytes.rs
|
71
|
+
- crates/itsi_server/src/body_proxy/itsi_body_proxy.rs
|
72
|
+
- crates/itsi_server/src/body_proxy/mod.rs
|
62
73
|
- crates/itsi_server/src/lib.rs
|
63
74
|
- crates/itsi_server/src/request/itsi_request.rs
|
64
75
|
- crates/itsi_server/src/request/mod.rs
|
76
|
+
- crates/itsi_server/src/response/itsi_response.rs
|
77
|
+
- crates/itsi_server/src/response/mod.rs
|
65
78
|
- crates/itsi_server/src/server/bind.rs
|
79
|
+
- crates/itsi_server/src/server/bind_protocol.rs
|
80
|
+
- crates/itsi_server/src/server/io_stream.rs
|
66
81
|
- crates/itsi_server/src/server/itsi_ca/itsi_ca.crt
|
67
82
|
- crates/itsi_server/src/server/itsi_ca/itsi_ca.key
|
68
83
|
- crates/itsi_server/src/server/itsi_server.rs
|
84
|
+
- crates/itsi_server/src/server/lifecycle_event.rs
|
69
85
|
- crates/itsi_server/src/server/listener.rs
|
70
86
|
- crates/itsi_server/src/server/mod.rs
|
87
|
+
- crates/itsi_server/src/server/process_worker.rs
|
88
|
+
- crates/itsi_server/src/server/serve_strategy/cluster_mode.rs
|
89
|
+
- crates/itsi_server/src/server/serve_strategy/mod.rs
|
90
|
+
- crates/itsi_server/src/server/serve_strategy/single_mode.rs
|
91
|
+
- crates/itsi_server/src/server/signal.rs
|
92
|
+
- crates/itsi_server/src/server/thread_worker.rs
|
71
93
|
- crates/itsi_server/src/server/tls.rs
|
72
|
-
- crates/itsi_server/src/server/transfer_protocol.rs
|
73
|
-
- crates/itsi_server/src/stream_writer/mod.rs
|
74
94
|
- crates/itsi_tracing/Cargo.lock
|
75
95
|
- crates/itsi_tracing/Cargo.toml
|
76
96
|
- crates/itsi_tracing/src/lib.rs
|
@@ -87,13 +107,47 @@ files:
|
|
87
107
|
- gems/scheduler/bin/setup
|
88
108
|
- gems/scheduler/ext/itsi_error/Cargo.lock
|
89
109
|
- gems/scheduler/ext/itsi_error/Cargo.toml
|
110
|
+
- gems/scheduler/ext/itsi_error/src/from.rs
|
90
111
|
- gems/scheduler/ext/itsi_error/src/lib.rs
|
112
|
+
- gems/scheduler/ext/itsi_instrument_entry/Cargo.toml
|
113
|
+
- gems/scheduler/ext/itsi_instrument_entry/src/lib.rs
|
91
114
|
- gems/scheduler/ext/itsi_rb_helpers/Cargo.lock
|
92
115
|
- gems/scheduler/ext/itsi_rb_helpers/Cargo.toml
|
116
|
+
- gems/scheduler/ext/itsi_rb_helpers/src/heap_value.rs
|
93
117
|
- gems/scheduler/ext/itsi_rb_helpers/src/lib.rs
|
94
118
|
- gems/scheduler/ext/itsi_scheduler/Cargo.toml
|
95
119
|
- gems/scheduler/ext/itsi_scheduler/extconf.rb
|
120
|
+
- gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler.rs
|
121
|
+
- gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs
|
122
|
+
- gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs
|
123
|
+
- gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/timer.rs
|
96
124
|
- gems/scheduler/ext/itsi_scheduler/src/lib.rs
|
125
|
+
- gems/scheduler/ext/itsi_server/Cargo.toml
|
126
|
+
- gems/scheduler/ext/itsi_server/extconf.rb
|
127
|
+
- gems/scheduler/ext/itsi_server/src/body_proxy/big_bytes.rs
|
128
|
+
- gems/scheduler/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs
|
129
|
+
- gems/scheduler/ext/itsi_server/src/body_proxy/mod.rs
|
130
|
+
- gems/scheduler/ext/itsi_server/src/lib.rs
|
131
|
+
- gems/scheduler/ext/itsi_server/src/request/itsi_request.rs
|
132
|
+
- gems/scheduler/ext/itsi_server/src/request/mod.rs
|
133
|
+
- gems/scheduler/ext/itsi_server/src/response/itsi_response.rs
|
134
|
+
- gems/scheduler/ext/itsi_server/src/response/mod.rs
|
135
|
+
- gems/scheduler/ext/itsi_server/src/server/bind.rs
|
136
|
+
- gems/scheduler/ext/itsi_server/src/server/bind_protocol.rs
|
137
|
+
- gems/scheduler/ext/itsi_server/src/server/io_stream.rs
|
138
|
+
- gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt
|
139
|
+
- gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.key
|
140
|
+
- gems/scheduler/ext/itsi_server/src/server/itsi_server.rs
|
141
|
+
- gems/scheduler/ext/itsi_server/src/server/lifecycle_event.rs
|
142
|
+
- gems/scheduler/ext/itsi_server/src/server/listener.rs
|
143
|
+
- gems/scheduler/ext/itsi_server/src/server/mod.rs
|
144
|
+
- gems/scheduler/ext/itsi_server/src/server/process_worker.rs
|
145
|
+
- gems/scheduler/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs
|
146
|
+
- gems/scheduler/ext/itsi_server/src/server/serve_strategy/mod.rs
|
147
|
+
- gems/scheduler/ext/itsi_server/src/server/serve_strategy/single_mode.rs
|
148
|
+
- gems/scheduler/ext/itsi_server/src/server/signal.rs
|
149
|
+
- gems/scheduler/ext/itsi_server/src/server/thread_worker.rs
|
150
|
+
- gems/scheduler/ext/itsi_server/src/server/tls.rs
|
97
151
|
- gems/scheduler/ext/itsi_tracing/Cargo.lock
|
98
152
|
- gems/scheduler/ext/itsi_tracing/Cargo.toml
|
99
153
|
- gems/scheduler/ext/itsi_tracing/src/lib.rs
|
@@ -101,8 +155,16 @@ files:
|
|
101
155
|
- gems/scheduler/lib/itsi/scheduler.rb
|
102
156
|
- gems/scheduler/lib/itsi/scheduler/version.rb
|
103
157
|
- gems/scheduler/sig/itsi_scheduler.rbs
|
104
|
-
- gems/scheduler/test/test_helper.rb
|
158
|
+
- gems/scheduler/test/helpers/test_helper.rb
|
159
|
+
- gems/scheduler/test/test_active_record.rb
|
160
|
+
- gems/scheduler/test/test_address_resolve.rb
|
161
|
+
- gems/scheduler/test/test_block_unblock.rb
|
162
|
+
- gems/scheduler/test/test_file_io.rb
|
105
163
|
- gems/scheduler/test/test_itsi_scheduler.rb
|
164
|
+
- gems/scheduler/test/test_kernel_sleep.rb
|
165
|
+
- gems/scheduler/test/test_nested_fibers.rb
|
166
|
+
- gems/scheduler/test/test_network_io.rb
|
167
|
+
- gems/scheduler/test/test_process_wait.rb
|
106
168
|
- gems/server/.gitignore
|
107
169
|
- gems/server/.rubocop.yml
|
108
170
|
- gems/server/CHANGELOG.md
|
@@ -115,36 +177,64 @@ files:
|
|
115
177
|
- gems/server/exe/itsi
|
116
178
|
- gems/server/ext/itsi_error/Cargo.lock
|
117
179
|
- gems/server/ext/itsi_error/Cargo.toml
|
180
|
+
- gems/server/ext/itsi_error/src/from.rs
|
118
181
|
- gems/server/ext/itsi_error/src/lib.rs
|
182
|
+
- gems/server/ext/itsi_instrument_entry/Cargo.toml
|
183
|
+
- gems/server/ext/itsi_instrument_entry/src/lib.rs
|
119
184
|
- gems/server/ext/itsi_rb_helpers/Cargo.lock
|
120
185
|
- gems/server/ext/itsi_rb_helpers/Cargo.toml
|
186
|
+
- gems/server/ext/itsi_rb_helpers/src/heap_value.rs
|
121
187
|
- gems/server/ext/itsi_rb_helpers/src/lib.rs
|
188
|
+
- gems/server/ext/itsi_scheduler/Cargo.toml
|
189
|
+
- gems/server/ext/itsi_scheduler/extconf.rb
|
190
|
+
- gems/server/ext/itsi_scheduler/src/itsi_scheduler.rs
|
191
|
+
- gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs
|
192
|
+
- gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs
|
193
|
+
- gems/server/ext/itsi_scheduler/src/itsi_scheduler/timer.rs
|
194
|
+
- gems/server/ext/itsi_scheduler/src/lib.rs
|
122
195
|
- gems/server/ext/itsi_server/Cargo.toml
|
123
196
|
- gems/server/ext/itsi_server/extconf.rb
|
197
|
+
- gems/server/ext/itsi_server/src/body_proxy/big_bytes.rs
|
198
|
+
- gems/server/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs
|
199
|
+
- gems/server/ext/itsi_server/src/body_proxy/mod.rs
|
124
200
|
- gems/server/ext/itsi_server/src/lib.rs
|
125
201
|
- gems/server/ext/itsi_server/src/request/itsi_request.rs
|
126
202
|
- gems/server/ext/itsi_server/src/request/mod.rs
|
203
|
+
- gems/server/ext/itsi_server/src/response/itsi_response.rs
|
204
|
+
- gems/server/ext/itsi_server/src/response/mod.rs
|
127
205
|
- gems/server/ext/itsi_server/src/server/bind.rs
|
206
|
+
- gems/server/ext/itsi_server/src/server/bind_protocol.rs
|
207
|
+
- gems/server/ext/itsi_server/src/server/io_stream.rs
|
128
208
|
- gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt
|
129
209
|
- gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.key
|
130
210
|
- gems/server/ext/itsi_server/src/server/itsi_server.rs
|
211
|
+
- gems/server/ext/itsi_server/src/server/lifecycle_event.rs
|
131
212
|
- gems/server/ext/itsi_server/src/server/listener.rs
|
132
213
|
- gems/server/ext/itsi_server/src/server/mod.rs
|
214
|
+
- gems/server/ext/itsi_server/src/server/process_worker.rs
|
215
|
+
- gems/server/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs
|
216
|
+
- gems/server/ext/itsi_server/src/server/serve_strategy/mod.rs
|
217
|
+
- gems/server/ext/itsi_server/src/server/serve_strategy/single_mode.rs
|
218
|
+
- gems/server/ext/itsi_server/src/server/signal.rs
|
219
|
+
- gems/server/ext/itsi_server/src/server/thread_worker.rs
|
133
220
|
- gems/server/ext/itsi_server/src/server/tls.rs
|
134
|
-
- gems/server/ext/itsi_server/src/server/transfer_protocol.rs
|
135
|
-
- gems/server/ext/itsi_server/src/stream_writer/mod.rs
|
136
221
|
- gems/server/ext/itsi_tracing/Cargo.lock
|
137
222
|
- gems/server/ext/itsi_tracing/Cargo.toml
|
138
223
|
- gems/server/ext/itsi_tracing/src/lib.rs
|
139
224
|
- gems/server/itsi-server.gemspec
|
140
225
|
- gems/server/lib/itsi/request.rb
|
141
226
|
- gems/server/lib/itsi/server.rb
|
227
|
+
- gems/server/lib/itsi/server/rack/handler/itsi.rb
|
228
|
+
- gems/server/lib/itsi/server/scheduler_mode.rb
|
142
229
|
- gems/server/lib/itsi/server/version.rb
|
230
|
+
- gems/server/lib/itsi/signals.rb
|
231
|
+
- gems/server/lib/itsi/stream_io.rb
|
143
232
|
- gems/server/sig/itsi_server.rbs
|
144
233
|
- gems/server/test/test_helper.rb
|
145
234
|
- gems/server/test/test_itsi_server.rb
|
146
235
|
- lib/itsi.rb
|
147
236
|
- lib/itsi/version.rb
|
237
|
+
- tasks.txt
|
148
238
|
homepage: https://itsi.fyi
|
149
239
|
licenses:
|
150
240
|
- MIT
|
@@ -164,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
254
|
requirements:
|
165
255
|
- - ">="
|
166
256
|
- !ruby/object:Gem::Version
|
167
|
-
version: 3.
|
257
|
+
version: '3.2'
|
168
258
|
requirements: []
|
169
259
|
rubygems_version: 3.6.2
|
170
260
|
specification_version: 4
|
@@ -1,23 +0,0 @@
|
|
1
|
-
use itsi_error::ItsiError;
|
2
|
-
use std::str::FromStr;
|
3
|
-
|
4
|
-
#[derive(Debug, Default, Clone)]
|
5
|
-
pub enum TransferProtocol {
|
6
|
-
#[default]
|
7
|
-
Https,
|
8
|
-
Http,
|
9
|
-
Unix,
|
10
|
-
}
|
11
|
-
|
12
|
-
impl FromStr for TransferProtocol {
|
13
|
-
type Err = ItsiError;
|
14
|
-
|
15
|
-
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
16
|
-
match s {
|
17
|
-
"http" => Ok(TransferProtocol::Http),
|
18
|
-
"https" => Ok(TransferProtocol::Https),
|
19
|
-
"unix" => Ok(TransferProtocol::Unix),
|
20
|
-
_ => Err(ItsiError::UnsupportedProtocol(s.to_string())),
|
21
|
-
}
|
22
|
-
}
|
23
|
-
}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
use bytes::Bytes;
|
2
|
-
use magnus::{error::Result as MagnusResult, exception::io_error, Error};
|
3
|
-
use tokio::sync::mpsc::Sender;
|
4
|
-
|
5
|
-
#[magnus::wrap(class = "Itsi::StreamWriter", free_immediately, size)]
|
6
|
-
pub struct StreamWriter {
|
7
|
-
sender: Sender<Bytes>,
|
8
|
-
}
|
9
|
-
|
10
|
-
impl StreamWriter {
|
11
|
-
pub fn new(sender: Sender<Bytes>) -> Self {
|
12
|
-
StreamWriter { sender }
|
13
|
-
}
|
14
|
-
|
15
|
-
pub fn write(&self, bytes: Bytes) -> MagnusResult<()> {
|
16
|
-
self.sender
|
17
|
-
.blocking_send(bytes)
|
18
|
-
.map_err(|e| Error::new(io_error(), format!("{:?}", e)))?;
|
19
|
-
Ok(())
|
20
|
-
}
|
21
|
-
}
|
@@ -1,23 +0,0 @@
|
|
1
|
-
use itsi_error::ItsiError;
|
2
|
-
use std::str::FromStr;
|
3
|
-
|
4
|
-
#[derive(Debug, Default, Clone)]
|
5
|
-
pub enum TransferProtocol {
|
6
|
-
#[default]
|
7
|
-
Https,
|
8
|
-
Http,
|
9
|
-
Unix,
|
10
|
-
}
|
11
|
-
|
12
|
-
impl FromStr for TransferProtocol {
|
13
|
-
type Err = ItsiError;
|
14
|
-
|
15
|
-
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
16
|
-
match s {
|
17
|
-
"http" => Ok(TransferProtocol::Http),
|
18
|
-
"https" => Ok(TransferProtocol::Https),
|
19
|
-
"unix" => Ok(TransferProtocol::Unix),
|
20
|
-
_ => Err(ItsiError::UnsupportedProtocol(s.to_string())),
|
21
|
-
}
|
22
|
-
}
|
23
|
-
}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
use bytes::Bytes;
|
2
|
-
use magnus::{error::Result as MagnusResult, exception::io_error, Error};
|
3
|
-
use tokio::sync::mpsc::Sender;
|
4
|
-
|
5
|
-
#[magnus::wrap(class = "Itsi::StreamWriter", free_immediately, size)]
|
6
|
-
pub struct StreamWriter {
|
7
|
-
sender: Sender<Bytes>,
|
8
|
-
}
|
9
|
-
|
10
|
-
impl StreamWriter {
|
11
|
-
pub fn new(sender: Sender<Bytes>) -> Self {
|
12
|
-
StreamWriter { sender }
|
13
|
-
}
|
14
|
-
|
15
|
-
pub fn write(&self, bytes: Bytes) -> MagnusResult<()> {
|
16
|
-
self.sender
|
17
|
-
.blocking_send(bytes)
|
18
|
-
.map_err(|e| Error::new(io_error(), format!("{:?}", e)))?;
|
19
|
-
Ok(())
|
20
|
-
}
|
21
|
-
}
|