itsi 0.1.0 → 0.1.2

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.
Files changed (164) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +524 -44
  3. data/Rakefile +22 -33
  4. data/crates/itsi_error/Cargo.toml +2 -0
  5. data/crates/itsi_error/src/from.rs +70 -0
  6. data/crates/itsi_error/src/lib.rs +10 -37
  7. data/crates/itsi_instrument_entry/Cargo.toml +15 -0
  8. data/crates/itsi_instrument_entry/src/lib.rs +31 -0
  9. data/crates/itsi_rb_helpers/Cargo.toml +2 -0
  10. data/crates/itsi_rb_helpers/src/heap_value.rs +121 -0
  11. data/crates/itsi_rb_helpers/src/lib.rs +90 -10
  12. data/crates/itsi_scheduler/Cargo.toml +9 -1
  13. data/crates/itsi_scheduler/extconf.rb +1 -1
  14. data/crates/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  15. data/crates/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  16. data/crates/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  17. data/crates/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  18. data/crates/itsi_scheduler/src/lib.rs +31 -10
  19. data/crates/itsi_server/Cargo.toml +14 -2
  20. data/crates/itsi_server/extconf.rb +1 -1
  21. data/crates/itsi_server/src/body_proxy/big_bytes.rs +104 -0
  22. data/crates/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
  23. data/crates/itsi_server/src/body_proxy/mod.rs +2 -0
  24. data/crates/itsi_server/src/lib.rs +58 -7
  25. data/crates/itsi_server/src/request/itsi_request.rs +238 -104
  26. data/crates/itsi_server/src/response/itsi_response.rs +347 -0
  27. data/crates/itsi_server/src/response/mod.rs +1 -0
  28. data/crates/itsi_server/src/server/bind.rs +50 -20
  29. data/crates/itsi_server/src/server/bind_protocol.rs +37 -0
  30. data/crates/itsi_server/src/server/io_stream.rs +104 -0
  31. data/crates/itsi_server/src/server/itsi_ca/itsi_ca.crt +11 -30
  32. data/crates/itsi_server/src/server/itsi_ca/itsi_ca.key +3 -50
  33. data/crates/itsi_server/src/server/itsi_server.rs +181 -133
  34. data/crates/itsi_server/src/server/lifecycle_event.rs +8 -0
  35. data/crates/itsi_server/src/server/listener.rs +169 -128
  36. data/crates/itsi_server/src/server/mod.rs +7 -1
  37. data/crates/itsi_server/src/server/process_worker.rs +196 -0
  38. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +253 -0
  39. data/crates/itsi_server/src/server/serve_strategy/mod.rs +27 -0
  40. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +238 -0
  41. data/crates/itsi_server/src/server/signal.rs +57 -0
  42. data/crates/itsi_server/src/server/thread_worker.rs +368 -0
  43. data/crates/itsi_server/src/server/tls.rs +42 -28
  44. data/crates/itsi_tracing/Cargo.toml +4 -0
  45. data/crates/itsi_tracing/src/lib.rs +36 -6
  46. data/gems/scheduler/Cargo.lock +219 -23
  47. data/gems/scheduler/Rakefile +7 -1
  48. data/gems/scheduler/ext/itsi_error/Cargo.toml +2 -0
  49. data/gems/scheduler/ext/itsi_error/src/from.rs +70 -0
  50. data/gems/scheduler/ext/itsi_error/src/lib.rs +10 -37
  51. data/gems/scheduler/ext/itsi_instrument_entry/Cargo.toml +15 -0
  52. data/gems/scheduler/ext/itsi_instrument_entry/src/lib.rs +31 -0
  53. data/gems/scheduler/ext/itsi_rb_helpers/Cargo.toml +2 -0
  54. data/gems/scheduler/ext/itsi_rb_helpers/src/heap_value.rs +121 -0
  55. data/gems/scheduler/ext/itsi_rb_helpers/src/lib.rs +90 -10
  56. data/gems/scheduler/ext/itsi_scheduler/Cargo.toml +9 -1
  57. data/gems/scheduler/ext/itsi_scheduler/extconf.rb +1 -1
  58. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  59. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  60. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  61. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  62. data/gems/scheduler/ext/itsi_scheduler/src/lib.rs +31 -10
  63. data/gems/scheduler/ext/itsi_server/Cargo.toml +41 -0
  64. data/gems/scheduler/ext/itsi_server/extconf.rb +6 -0
  65. data/gems/scheduler/ext/itsi_server/src/body_proxy/big_bytes.rs +104 -0
  66. data/gems/scheduler/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
  67. data/gems/scheduler/ext/itsi_server/src/body_proxy/mod.rs +2 -0
  68. data/gems/scheduler/ext/itsi_server/src/lib.rs +103 -0
  69. data/gems/scheduler/ext/itsi_server/src/request/itsi_request.rs +277 -0
  70. data/gems/scheduler/ext/itsi_server/src/request/mod.rs +1 -0
  71. data/gems/scheduler/ext/itsi_server/src/response/itsi_response.rs +347 -0
  72. data/gems/scheduler/ext/itsi_server/src/response/mod.rs +1 -0
  73. data/gems/scheduler/ext/itsi_server/src/server/bind.rs +168 -0
  74. data/gems/scheduler/ext/itsi_server/src/server/bind_protocol.rs +37 -0
  75. data/gems/scheduler/ext/itsi_server/src/server/io_stream.rs +104 -0
  76. data/gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +13 -0
  77. data/gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +5 -0
  78. data/gems/scheduler/ext/itsi_server/src/server/itsi_server.rs +230 -0
  79. data/gems/scheduler/ext/itsi_server/src/server/lifecycle_event.rs +8 -0
  80. data/gems/scheduler/ext/itsi_server/src/server/listener.rs +259 -0
  81. data/gems/scheduler/ext/itsi_server/src/server/mod.rs +11 -0
  82. data/gems/scheduler/ext/itsi_server/src/server/process_worker.rs +196 -0
  83. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +253 -0
  84. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/mod.rs +27 -0
  85. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/single_mode.rs +238 -0
  86. data/gems/scheduler/ext/itsi_server/src/server/signal.rs +57 -0
  87. data/gems/scheduler/ext/itsi_server/src/server/thread_worker.rs +368 -0
  88. data/gems/scheduler/ext/itsi_server/src/server/tls.rs +152 -0
  89. data/gems/scheduler/ext/itsi_tracing/Cargo.toml +4 -0
  90. data/gems/scheduler/ext/itsi_tracing/src/lib.rs +36 -6
  91. data/gems/scheduler/itsi-scheduler.gemspec +2 -2
  92. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  93. data/gems/scheduler/lib/itsi/scheduler.rb +137 -1
  94. data/gems/scheduler/test/helpers/test_helper.rb +24 -0
  95. data/gems/scheduler/test/test_active_record.rb +158 -0
  96. data/gems/scheduler/test/test_address_resolve.rb +23 -0
  97. data/gems/scheduler/test/test_block_unblock.rb +229 -0
  98. data/gems/scheduler/test/test_file_io.rb +193 -0
  99. data/gems/scheduler/test/test_itsi_scheduler.rb +24 -1
  100. data/gems/scheduler/test/test_kernel_sleep.rb +91 -0
  101. data/gems/scheduler/test/test_nested_fibers.rb +286 -0
  102. data/gems/scheduler/test/test_network_io.rb +274 -0
  103. data/gems/scheduler/test/test_process_wait.rb +26 -0
  104. data/gems/server/exe/itsi +88 -28
  105. data/gems/server/ext/itsi_error/Cargo.toml +2 -0
  106. data/gems/server/ext/itsi_error/src/from.rs +70 -0
  107. data/gems/server/ext/itsi_error/src/lib.rs +10 -37
  108. data/gems/server/ext/itsi_instrument_entry/Cargo.toml +15 -0
  109. data/gems/server/ext/itsi_instrument_entry/src/lib.rs +31 -0
  110. data/gems/server/ext/itsi_rb_helpers/Cargo.toml +2 -0
  111. data/gems/server/ext/itsi_rb_helpers/src/heap_value.rs +121 -0
  112. data/gems/server/ext/itsi_rb_helpers/src/lib.rs +90 -10
  113. data/gems/server/ext/itsi_scheduler/Cargo.toml +24 -0
  114. data/gems/server/ext/itsi_scheduler/extconf.rb +6 -0
  115. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  116. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  117. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  118. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  119. data/gems/server/ext/itsi_scheduler/src/lib.rs +38 -0
  120. data/gems/server/ext/itsi_server/Cargo.toml +14 -2
  121. data/gems/server/ext/itsi_server/extconf.rb +1 -1
  122. data/gems/server/ext/itsi_server/src/body_proxy/big_bytes.rs +104 -0
  123. data/gems/server/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
  124. data/gems/server/ext/itsi_server/src/body_proxy/mod.rs +2 -0
  125. data/gems/server/ext/itsi_server/src/lib.rs +58 -7
  126. data/gems/server/ext/itsi_server/src/request/itsi_request.rs +238 -104
  127. data/gems/server/ext/itsi_server/src/response/itsi_response.rs +347 -0
  128. data/gems/server/ext/itsi_server/src/response/mod.rs +1 -0
  129. data/gems/server/ext/itsi_server/src/server/bind.rs +50 -20
  130. data/gems/server/ext/itsi_server/src/server/bind_protocol.rs +37 -0
  131. data/gems/server/ext/itsi_server/src/server/io_stream.rs +104 -0
  132. data/gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +11 -30
  133. data/gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +3 -50
  134. data/gems/server/ext/itsi_server/src/server/itsi_server.rs +181 -133
  135. data/gems/server/ext/itsi_server/src/server/lifecycle_event.rs +8 -0
  136. data/gems/server/ext/itsi_server/src/server/listener.rs +169 -128
  137. data/gems/server/ext/itsi_server/src/server/mod.rs +7 -1
  138. data/gems/server/ext/itsi_server/src/server/process_worker.rs +196 -0
  139. data/gems/server/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +253 -0
  140. data/gems/server/ext/itsi_server/src/server/serve_strategy/mod.rs +27 -0
  141. data/gems/server/ext/itsi_server/src/server/serve_strategy/single_mode.rs +238 -0
  142. data/gems/server/ext/itsi_server/src/server/signal.rs +57 -0
  143. data/gems/server/ext/itsi_server/src/server/thread_worker.rs +368 -0
  144. data/gems/server/ext/itsi_server/src/server/tls.rs +42 -28
  145. data/gems/server/ext/itsi_tracing/Cargo.toml +4 -0
  146. data/gems/server/ext/itsi_tracing/src/lib.rs +36 -6
  147. data/gems/server/itsi-server.gemspec +4 -4
  148. data/gems/server/lib/itsi/request.rb +30 -14
  149. data/gems/server/lib/itsi/server/rack/handler/itsi.rb +25 -0
  150. data/gems/server/lib/itsi/server/scheduler_mode.rb +6 -0
  151. data/gems/server/lib/itsi/server/version.rb +1 -1
  152. data/gems/server/lib/itsi/server.rb +68 -2
  153. data/gems/server/lib/itsi/signals.rb +18 -0
  154. data/gems/server/lib/itsi/stream_io.rb +38 -0
  155. data/gems/server/test/test_helper.rb +2 -0
  156. data/gems/server/test/test_itsi_server.rb +1 -1
  157. data/lib/itsi/version.rb +1 -1
  158. data/tasks.txt +17 -0
  159. metadata +102 -12
  160. data/crates/itsi_server/src/server/transfer_protocol.rs +0 -23
  161. data/crates/itsi_server/src/stream_writer/mod.rs +0 -21
  162. data/gems/scheduler/test/test_helper.rb +0 -6
  163. data/gems/server/ext/itsi_server/src/server/transfer_protocol.rs +0 -23
  164. data/gems/server/ext/itsi_server/src/stream_writer/mod.rs +0 -21
@@ -2,12 +2,78 @@
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
- # Call our Rack app with our request ENV.
9
12
  def self.call(app, request)
10
- app.call(request.to_env)
13
+ respond request, app.call(request.to_env)
14
+ end
15
+
16
+ def self.streaming_body?(body)
17
+ body.respond_to?(:call) && !body.respond_to?(:each)
18
+ end
19
+
20
+ def self.respond(request, (status, headers, body))
21
+ response = request.response
22
+
23
+ # Don't try and respond if we've been hijacked.
24
+ # The hijacker is now responsible for this.
25
+ return if request.hijacked
26
+
27
+ # 1. Set Status
28
+ response.status = status
29
+
30
+ # 2. Set Headers
31
+ headers.each do |key, value|
32
+ next response.add_header(key, value) unless value.is_a?(Array)
33
+
34
+ value.each do |v|
35
+ response.add_header(key, v)
36
+ end
37
+ end
38
+
39
+ # 3. Set Body
40
+ # As soon as we start setting the response
41
+ # the server will begin to stream it to the client.
42
+
43
+ # If we're partially hijacked or returned a streaming body,
44
+ # stream this response.
45
+
46
+ if (body_streamer = streaming_body?(body) ? body : headers.delete("rack.hijack"))
47
+ body_streamer.call(StreamIO.new(response))
48
+
49
+ # If we're enumerable with more than one chunk
50
+ # also stream, otherwise write in a single chunk
51
+ elsif body.respond_to?(:each) || body.respond_to?(:to_ary)
52
+ unless body.respond_to?(:each)
53
+ body = body.to_ary
54
+ raise "Body #to_ary didn't return an array" unless body.is_a?(Array)
55
+ end
56
+ # We offset this iteration intentionally,
57
+ # to optimize for the case where there's only one chunk.
58
+ buffer = nil
59
+ body.each do |part|
60
+ response.send_frame(buffer.to_s) if buffer
61
+ buffer = part
62
+ end
63
+
64
+ response.send_and_close(buffer.to_s)
65
+ else
66
+ response.send_and_close(body.to_s)
67
+ end
68
+ ensure
69
+ response.close_write
70
+ body.close if body.respond_to?(:close)
71
+ end
72
+
73
+ def self.start_scheduler_loop(scheduler_class, scheduler_task)
74
+ scheduler = scheduler_class.new
75
+ Fiber.set_scheduler(scheduler)
76
+ [scheduler, Fiber.schedule(&scheduler_task)]
11
77
  end
12
78
 
13
79
  # If scheduler is enabled
@@ -0,0 +1,18 @@
1
+ module Itsi
2
+ module Signals
3
+ DEFAULT_SIGNALS = ["DEFAULT", ""].freeze
4
+ module TrapInterceptor
5
+ def trap(signal, command = nil, &block)
6
+ return super unless DEFAULT_SIGNALS.include?(command.to_s) && block.nil?
7
+ Itsi::Server.reset_signal_handlers
8
+ end
9
+ end
10
+ [Kernel, Signal].each do |receiver|
11
+ receiver.singleton_class.prepend(TrapInterceptor)
12
+ end
13
+
14
+ [Object].each do |receiver|
15
+ receiver.include(TrapInterceptor)
16
+ end
17
+ end
18
+ 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
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
4
+ $LOAD_PATH.unshift __dir__
4
5
  require "itsi/server"
6
+
5
7
  require "minitest/autorun"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "test_helper"
3
+ require_relative "test_helper"
4
4
 
5
5
  class TestItsiServer < Minitest::Test
6
6
  def test_that_it_has_a_version_number
data/lib/itsi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Itsi
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
data/tasks.txt ADDED
@@ -0,0 +1,17 @@
1
+ - Autocert (Hard. And dev certs use local CA)
2
+ - Test on MOD
3
+ - Filters (Medium)
4
+ - Static File Serve (Medium).error pages
5
+ - Preload Groups
6
+ - Signal to log info
7
+ - Dashboard
8
+
9
+ - Polish and Release (At Lake)
10
+ -- Log params (Think long and hard about what we should and shouldn't log)
11
+ -- Parameterize EVERYTHING (OOB GC, and others)
12
+ -- No unwrap or except
13
+ -- Switch to direct scheduler integration
14
+ -- Fix Scheduler Hanging test (Or remove it)
15
+
16
+ Later:
17
+ - 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.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-01 00:00:00.000000000 Z
10
+ date: 2025-03-13 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: '0.1'
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: '0.1'
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: '0.1'
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: '0.1'
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.3.11
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,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
4
- require "itsi/scheduler"
5
-
6
- require "minitest/autorun"
@@ -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
- }