procon_bypass_man 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +6 -6
- data/.rubocop.yml +4 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +15 -6
- data/Steepfile +0 -1
- data/docs/getting_started.md +48 -20
- data/docs/setup_raspi_by_mitamae.md +44 -2
- data/lib/procon_bypass_man/background/job_performer.rb +1 -2
- data/lib/procon_bypass_man/background/job_queue.rb +50 -0
- data/lib/procon_bypass_man/background/jobs/concerns/has_external_api_setting.rb +2 -2
- data/lib/procon_bypass_man/background/jobs/concerns/job_performable.rb +2 -2
- data/lib/procon_bypass_man/background/jobs/post_completed_remote_macro_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_boot_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_completed_upgrade_pbm_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_error_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_load_config_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_procon_performance_measurements_job.rb +43 -0
- data/lib/procon_bypass_man/background/jobs/report_reload_config_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/sync_device_stats_job.rb +1 -1
- data/lib/procon_bypass_man/background.rb +2 -3
- data/lib/procon_bypass_man/bypass/bypass_command.rb +6 -15
- data/lib/procon_bypass_man/bypass/bypass_value.rb +6 -0
- data/lib/procon_bypass_man/bypass/procon_to_switch.rb +107 -0
- data/lib/procon_bypass_man/bypass/switch_to_procon.rb +64 -0
- data/lib/procon_bypass_man/bypass.rb +5 -110
- data/lib/procon_bypass_man/configuration.rb +15 -39
- data/lib/procon_bypass_man/device_connection/procon_setting_overrider.rb +12 -3
- data/lib/procon_bypass_man/procon/macro.rb +1 -1
- data/lib/procon_bypass_man/procon/performance_measurement/last_bypass_at.rb +17 -0
- data/lib/procon_bypass_man/procon/performance_measurement/measurement_collection.rb +9 -0
- data/lib/procon_bypass_man/procon/performance_measurement/measurements_summarizer.rb +84 -0
- data/lib/procon_bypass_man/procon/performance_measurement/procon_performance_span_transfer_job.rb +8 -0
- data/lib/procon_bypass_man/procon/performance_measurement/queue_over_process.rb +38 -0
- data/lib/procon_bypass_man/procon/performance_measurement/span_queue.rb +42 -0
- data/lib/procon_bypass_man/procon/performance_measurement/span_transfer_buffer.rb +39 -0
- data/lib/procon_bypass_man/procon/performance_measurement.rb +103 -0
- data/lib/procon_bypass_man/procon.rb +2 -1
- data/lib/procon_bypass_man/procon_display/bypass_hook.rb +4 -3
- data/lib/procon_bypass_man/remote_macro/queue_over_process.rb +26 -44
- data/lib/procon_bypass_man/remote_macro/remote_macro_object.rb +22 -24
- data/lib/procon_bypass_man/remote_macro/remote_macro_receiver.rb +1 -1
- data/lib/procon_bypass_man/remote_macro/remote_macro_sender.rb +1 -1
- data/lib/procon_bypass_man/remote_macro/task.rb +1 -5
- data/lib/procon_bypass_man/remote_macro/task_queue.rb +6 -10
- data/lib/procon_bypass_man/remote_pbm_action/commands/update_remote_pbm_action_status_command.rb +1 -1
- data/lib/procon_bypass_man/runner.rb +4 -10
- data/lib/procon_bypass_man/scheduler.rb +15 -6
- data/lib/procon_bypass_man/support/callbacks.rb +8 -4
- data/lib/procon_bypass_man/support/can_over_process.rb +60 -0
- data/lib/procon_bypass_man/support/gc.rb +8 -0
- data/lib/procon_bypass_man/support/http_client.rb +9 -6
- data/lib/procon_bypass_man/support/load_agv.rb +20 -0
- data/lib/procon_bypass_man/support/procon_performance_http_client.rb +7 -0
- data/lib/procon_bypass_man/support/retryable.rb +16 -0
- data/lib/procon_bypass_man/support/signal_handler.rb +1 -1
- data/lib/procon_bypass_man/version.rb +1 -1
- data/lib/procon_bypass_man/websocket/client.rb +2 -2
- data/lib/procon_bypass_man/worker.rb +32 -0
- data/lib/procon_bypass_man.rb +40 -10
- data/project_template/app.rb +4 -6
- data/project_template/app.rb.erb +4 -6
- data/sig/main.rbs +10 -52
- metadata +21 -8
- data/lib/procon_bypass_man/background/job_runner.rb +0 -45
- data/lib/procon_bypass_man/background/jobs/concerns/has_internal_api_setting.rb +0 -5
- data/lib/procon_bypass_man/background/jobs/report_pressed_buttons_job.rb +0 -15
- data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +0 -43
- data/lib/procon_bypass_man/io_monitor.rb +0 -108
- data/lib/procon_bypass_man/support/server_pool.rb +0 -46
@@ -0,0 +1,16 @@
|
|
1
|
+
module ProconBypassMan
|
2
|
+
class Retryable
|
3
|
+
def self.retryable(tries: , retried: 0, on_no_retry: [])
|
4
|
+
return yield(retried)
|
5
|
+
rescue *on_no_retry
|
6
|
+
raise
|
7
|
+
rescue
|
8
|
+
if tries <= retried
|
9
|
+
raise
|
10
|
+
else
|
11
|
+
retried = retried + 1
|
12
|
+
retry
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -99,11 +99,11 @@ module ProconBypassMan
|
|
99
99
|
def self.validate_and_run_remote_macro(data: )
|
100
100
|
pbm_job_hash = data.dig("message")
|
101
101
|
begin
|
102
|
-
remote_macro_object = ProconBypassMan::RemoteMacroObject.new(name: pbm_job_hash["name"],
|
102
|
+
remote_macro_object = ProconBypassMan::RemoteMacro::RemoteMacroObject.new(name: pbm_job_hash["name"],
|
103
103
|
uuid: pbm_job_hash["uuid"],
|
104
104
|
steps: pbm_job_hash["steps"])
|
105
105
|
remote_macro_object.validate!
|
106
|
-
rescue ProconBypassMan::RemoteMacroObject::ValidationError => e
|
106
|
+
rescue ProconBypassMan::RemoteMacro::RemoteMacroObject::ValidationError => e
|
107
107
|
ProconBypassMan::SendErrorCommand.execute(error: e)
|
108
108
|
return
|
109
109
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ProconBypassMan
|
2
|
+
class Worker
|
3
|
+
attr_accessor :pid
|
4
|
+
|
5
|
+
def self.run
|
6
|
+
new.run
|
7
|
+
end
|
8
|
+
|
9
|
+
# @param [Boolean]
|
10
|
+
def run
|
11
|
+
return self if @thread
|
12
|
+
@thread = Thread.new do
|
13
|
+
while(item = ProconBypassMan::Background::JobQueue.pop)
|
14
|
+
begin
|
15
|
+
# プロセスを越えるので、文字列でenqueueしてくれる前提. evalしてクラスにする
|
16
|
+
ProconBypassMan::Background::JobPerformer.new(klass: eval(item[:job_class]), args: item[:args]).perform
|
17
|
+
rescue => e
|
18
|
+
ProconBypassMan.logger.error(e)
|
19
|
+
sleep(0.2) # busy loopしないように
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
return self
|
25
|
+
end
|
26
|
+
|
27
|
+
# 重要な非同期ジョブは存在しないのでqueueが捌けるのを待たずにkill
|
28
|
+
def shutdown
|
29
|
+
@thread&.kill
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/procon_bypass_man.rb
CHANGED
@@ -12,8 +12,6 @@ require "resolv-replace"
|
|
12
12
|
require "pbmenv"
|
13
13
|
|
14
14
|
require_relative "procon_bypass_man/version"
|
15
|
-
require_relative "procon_bypass_man/remote_pbm_action"
|
16
|
-
require_relative "procon_bypass_man/remote_macro"
|
17
15
|
|
18
16
|
require_relative "procon_bypass_man/device_connection"
|
19
17
|
require_relative "procon_bypass_man/support/usb_device_controller"
|
@@ -26,16 +24,20 @@ require_relative "procon_bypass_man/support/yaml_writer"
|
|
26
24
|
require_relative "procon_bypass_man/support/safe_timeout"
|
27
25
|
require_relative "procon_bypass_man/support/compress_array"
|
28
26
|
require_relative "procon_bypass_man/support/uptime"
|
27
|
+
require_relative "procon_bypass_man/support/load_agv"
|
29
28
|
require_relative "procon_bypass_man/support/on_memory_cache"
|
30
29
|
require_relative "procon_bypass_man/support/http_client"
|
31
30
|
require_relative "procon_bypass_man/support/report_http_client"
|
32
31
|
require_relative "procon_bypass_man/support/remote_macro_http_client"
|
33
32
|
require_relative "procon_bypass_man/support/update_remote_pbm_action_status_http_client"
|
34
33
|
require_relative "procon_bypass_man/support/send_device_stats_http_client"
|
35
|
-
require_relative "procon_bypass_man/support/
|
34
|
+
require_relative "procon_bypass_man/support/procon_performance_http_client"
|
36
35
|
require_relative "procon_bypass_man/support/analog_stick_hypotenuse_tilting_power_scaler"
|
37
36
|
require_relative "procon_bypass_man/support/never_exit_accidentally"
|
38
37
|
require_relative "procon_bypass_man/support/cycle_sleep"
|
38
|
+
require_relative "procon_bypass_man/support/can_over_process"
|
39
|
+
require_relative "procon_bypass_man/support/gc"
|
40
|
+
require_relative "procon_bypass_man/support/retryable"
|
39
41
|
require_relative "procon_bypass_man/procon_display"
|
40
42
|
require_relative "procon_bypass_man/background"
|
41
43
|
require_relative "procon_bypass_man/commands"
|
@@ -53,10 +55,14 @@ require_relative "procon_bypass_man/procon/analog_stick_manipulator"
|
|
53
55
|
require_relative "procon_bypass_man/remote_pbm_action/value_objects/remote_pbm_action_object"
|
54
56
|
require_relative "procon_bypass_man/scheduler"
|
55
57
|
require_relative "procon_bypass_man/plugins"
|
58
|
+
require_relative "procon_bypass_man/worker"
|
56
59
|
require_relative "procon_bypass_man/websocket/client"
|
57
60
|
require_relative "procon_bypass_man/websocket/watchdog"
|
58
61
|
require_relative "procon_bypass_man/websocket/forever"
|
59
62
|
|
63
|
+
require_relative "procon_bypass_man/remote_pbm_action"
|
64
|
+
require_relative "procon_bypass_man/remote_macro"
|
65
|
+
|
60
66
|
STDOUT.sync = true
|
61
67
|
Thread.abort_on_exception = true
|
62
68
|
|
@@ -67,11 +73,18 @@ module ProconBypassMan
|
|
67
73
|
class CouldNotLoadConfigError < StandardError; end
|
68
74
|
class NotFoundProconError < StandardError; end
|
69
75
|
|
76
|
+
class InterruptForRestart < StandardError; end
|
77
|
+
|
78
|
+
class << self
|
79
|
+
attr_accessor :worker
|
80
|
+
end
|
81
|
+
|
70
82
|
# @return [void]
|
71
83
|
def self.run(setting_path: nil)
|
72
84
|
ProconBypassMan::PrintMessageCommand.execute(text: "PBMを起動しています")
|
73
85
|
initialize_pbm
|
74
86
|
|
87
|
+
# 設定ファイルの読み込み
|
75
88
|
begin
|
76
89
|
ProconBypassMan::ButtonsSettingConfiguration::Loader.load(setting_path: setting_path)
|
77
90
|
rescue ProconBypassMan::CouldNotLoadConfigError
|
@@ -84,6 +97,7 @@ module ProconBypassMan
|
|
84
97
|
return
|
85
98
|
end
|
86
99
|
|
100
|
+
# デバイスの接続フェーズ
|
87
101
|
begin
|
88
102
|
gadget, procon = ProconBypassMan::DeviceConnection::Command.execute!
|
89
103
|
rescue ProconBypassMan::DeviceConnection::NotFoundProconError
|
@@ -95,7 +109,7 @@ module ProconBypassMan
|
|
95
109
|
end
|
96
110
|
return
|
97
111
|
rescue ProconBypassMan::DeviceConnection::TimeoutError
|
98
|
-
ProconBypassMan::SendErrorCommand.execute(error: "
|
112
|
+
ProconBypassMan::SendErrorCommand.execute(error: "接続に失敗しました。プロコンとRaspberry Piのケーブルを差し直して、再実行してください。\n改善しない場合は、app.logの中身を添えて不具合報告をお願いします。")
|
99
113
|
ProconBypassMan::DeviceStatus.change_to_connected_but_sleeping!
|
100
114
|
%w(TERM INT).each do |sig|
|
101
115
|
Kernel.trap(sig) { exit 0 }
|
@@ -131,33 +145,49 @@ module ProconBypassMan
|
|
131
145
|
ProconBypassMan::Procon::ModeRegistry.reset!
|
132
146
|
ProconBypassMan::Procon.reset!
|
133
147
|
ProconBypassMan::ButtonsSettingConfiguration.instance.reset!
|
134
|
-
ProconBypassMan::IOMonitor.reset!
|
135
148
|
end
|
136
149
|
|
137
150
|
# @return [void]
|
138
151
|
def self.initialize_pbm
|
139
|
-
|
140
|
-
ProconBypassMan::Background::
|
152
|
+
`renice -n 20 -p #{$$}`
|
153
|
+
ProconBypassMan::Background::JobQueue.start!
|
141
154
|
ProconBypassMan::Websocket::Client.start!
|
142
|
-
ProconBypassMan::
|
155
|
+
# TODO ProconBypassMan::DrbObjects.start_all! みたいな感じで書きたい
|
156
|
+
ProconBypassMan::RemoteMacro::QueueOverProcess.start!
|
157
|
+
ProconBypassMan::Procon::PerformanceMeasurement::QueueOverProcess.start!
|
158
|
+
ProconBypassMan::Scheduler.start!
|
143
159
|
|
144
160
|
ProconBypassMan::WriteDeviceIdCommand.execute
|
145
161
|
ProconBypassMan::WriteSessionIdCommand.execute
|
146
|
-
`renice -n -20 -p #{$$}`
|
147
162
|
File.write(pid_path, $$)
|
148
163
|
ProconBypassMan::DeviceStatus.change_to_running!
|
149
164
|
end
|
150
165
|
|
166
|
+
# @return [void]
|
151
167
|
def self.ready_pbm
|
152
168
|
ProconBypassMan::PrintBootMessageCommand.execute
|
153
169
|
ProconBypassMan::ReportLoadConfigJob.perform_async(ProconBypassMan.config.raw_setting)
|
170
|
+
|
171
|
+
self.worker = ProconBypassMan::Worker.run
|
172
|
+
end
|
173
|
+
|
174
|
+
# @return [void]
|
175
|
+
def self.after_fork_on_bypass_process
|
176
|
+
`renice -n -20 -p #{$$}`
|
177
|
+
::GC.start
|
178
|
+
DRb.start_service if defined?(DRb)
|
179
|
+
ProconBypassMan::RemoteMacroReceiver.start!
|
180
|
+
ProconBypassMan::ProconDisplay::Server.start!
|
154
181
|
end
|
155
182
|
|
156
183
|
# @return [void]
|
157
184
|
def self.terminate_pbm
|
158
185
|
FileUtils.rm_rf(ProconBypassMan.pid_path)
|
159
186
|
FileUtils.rm_rf(ProconBypassMan.digest_path)
|
160
|
-
ProconBypassMan::
|
187
|
+
ProconBypassMan::Background::JobQueue.shutdown
|
188
|
+
ProconBypassMan::RemoteMacro::QueueOverProcess.shutdown
|
189
|
+
ProconBypassMan::Procon::PerformanceMeasurement::QueueOverProcess.shutdown
|
190
|
+
self.worker&.shutdown
|
161
191
|
end
|
162
192
|
|
163
193
|
# @return [void]
|
data/project_template/app.rb
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
gemfile do
|
13
13
|
source 'https://rubygems.org'
|
14
14
|
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
15
|
-
gem 'procon_bypass_man', '0.2.
|
15
|
+
gem 'procon_bypass_man', '0.2.3'
|
16
16
|
end
|
17
17
|
rescue Bundler::Source::Git::GitCommandError => e
|
18
18
|
retry_count_on_git_command_error = retry_count_on_git_command_error + 1
|
@@ -37,8 +37,9 @@ ProconBypassMan.configure do |config|
|
|
37
37
|
# バイパスするログを全部app.logに流すか
|
38
38
|
config.verbose_bypass_log = false
|
39
39
|
|
40
|
-
# webからProconBypassManを操作できるweb
|
41
|
-
#
|
40
|
+
# webからProconBypassManを操作できるwebサービスと連携します
|
41
|
+
# 連携中はエラーログ、パフォーマンスに関するメトリクスを送信します
|
42
|
+
# config.api_servers = 'https://pbm-cloud.herokuapp.com'
|
42
43
|
|
43
44
|
# エラーが起きたらerror.logに書き込みます
|
44
45
|
config.enable_critical_error_logging = true
|
@@ -46,9 +47,6 @@ ProconBypassMan.configure do |config|
|
|
46
47
|
# pbm-cloudで使う場合はnever_exitにtrueをセットしてください. trueがセットされている場合、不慮の事故が発生してもプロセスが終了しなくなります
|
47
48
|
config.never_exit_accidentally = true
|
48
49
|
|
49
|
-
# 毎秒行ったIOをログに出力するか
|
50
|
-
config.io_monitor_logging = false
|
51
|
-
|
52
50
|
# 接続に成功したらコントローラーのHOME LEDを光らせるか
|
53
51
|
config.enable_home_led_on_connect = true
|
54
52
|
|
data/project_template/app.rb.erb
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
gemfile do
|
13
13
|
source 'https://rubygems.org'
|
14
14
|
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
15
|
-
gem 'procon_bypass_man', '0.2.
|
15
|
+
gem 'procon_bypass_man', '0.2.3'
|
16
16
|
end
|
17
17
|
rescue Bundler::Source::Git::GitCommandError => e
|
18
18
|
retry_count_on_git_command_error = retry_count_on_git_command_error + 1
|
@@ -37,8 +37,9 @@ ProconBypassMan.configure do |config|
|
|
37
37
|
# バイパスするログを全部app.logに流すか
|
38
38
|
config.verbose_bypass_log = false
|
39
39
|
|
40
|
-
# webからProconBypassManを操作できるweb
|
41
|
-
|
40
|
+
# webからProconBypassManを操作できるwebサービスと連携します
|
41
|
+
# 連携中はエラーログ、パフォーマンスに関するメトリクスを送信します
|
42
|
+
<%- api_server_config = "config.api_servers = 'https://pbm-cloud.herokuapp.com'" -%>
|
42
43
|
<%- if enable_integration_with_pbm_cloud -%>
|
43
44
|
<%= api_server_config %>
|
44
45
|
<%- else -%>
|
@@ -51,9 +52,6 @@ ProconBypassMan.configure do |config|
|
|
51
52
|
# pbm-cloudで使う場合はnever_exitにtrueをセットしてください. trueがセットされている場合、不慮の事故が発生してもプロセスが終了しなくなります
|
52
53
|
config.never_exit_accidentally = true
|
53
54
|
|
54
|
-
# 毎秒行ったIOをログに出力するか
|
55
|
-
config.io_monitor_logging = false
|
56
|
-
|
57
55
|
# 接続に成功したらコントローラーのHOME LEDを光らせるか
|
58
56
|
config.enable_home_led_on_connect = true
|
59
57
|
|
data/sig/main.rbs
CHANGED
@@ -174,6 +174,8 @@ class ProconBypassMan::Configuration
|
|
174
174
|
|
175
175
|
def pid_path: () -> String
|
176
176
|
|
177
|
+
def worker_pid_path: () -> String
|
178
|
+
|
177
179
|
def digest_path: () -> String
|
178
180
|
|
179
181
|
def cache: () -> ProconBypassMan::OnMemoryCache
|
@@ -186,7 +188,6 @@ class ProconBypassMan::Configuration
|
|
186
188
|
attr_reader api_server: untyped
|
187
189
|
attr_reader api_servers: untyped
|
188
190
|
attr_writer never_exit_accidentally: bool
|
189
|
-
attr_writer io_monitor_logging: bool
|
190
191
|
|
191
192
|
attr_accessor enable_critical_error_logging: bool
|
192
193
|
|
@@ -213,9 +214,13 @@ class ProconBypassMan::Configuration
|
|
213
214
|
|
214
215
|
def enable_ws?: () -> bool
|
215
216
|
|
216
|
-
def
|
217
|
+
def has_api_server?: () -> bool
|
218
|
+
|
219
|
+
def enable_procon_performance_measurement?: () -> bool
|
217
220
|
|
218
|
-
def
|
221
|
+
def server: () -> untyped
|
222
|
+
|
223
|
+
def internal_server: () -> untyped
|
219
224
|
|
220
225
|
def internal_servers: () -> ::Array[string | nil]
|
221
226
|
|
@@ -226,8 +231,6 @@ class ProconBypassMan::Configuration
|
|
226
231
|
def verbose_bypass_log: () -> bool
|
227
232
|
|
228
233
|
def never_exit_accidentally: () -> bool
|
229
|
-
|
230
|
-
def io_monitor_logging: () -> bool
|
231
234
|
end
|
232
235
|
|
233
236
|
|
@@ -274,35 +277,6 @@ class ProconBypassMan::DeviceConnector
|
|
274
277
|
def init_devices: () -> untyped
|
275
278
|
end
|
276
279
|
|
277
|
-
module ProconBypassMan
|
278
|
-
class Counter
|
279
|
-
attr_accessor label: untyped
|
280
|
-
|
281
|
-
attr_accessor table: untyped
|
282
|
-
|
283
|
-
attr_accessor previous_table: untyped
|
284
|
-
|
285
|
-
def initialize: (label: untyped label) -> untyped
|
286
|
-
|
287
|
-
# アクティブなバケットは1つだけ
|
288
|
-
def record: (untyped event_name) -> untyped
|
289
|
-
|
290
|
-
def formated_previous_table: () -> ::String
|
291
|
-
end
|
292
|
-
|
293
|
-
module IOMonitor
|
294
|
-
def self.new: (label: untyped label) -> untyped
|
295
|
-
|
296
|
-
# @return [Array<Counter>]
|
297
|
-
def self.targets: () -> untyped
|
298
|
-
|
299
|
-
# ここで集計する
|
300
|
-
def self.start!: () -> untyped
|
301
|
-
|
302
|
-
def self.reset!: () -> untyped
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
280
|
class ProconBypassMan::Processor
|
307
281
|
# @return [String] binary
|
308
282
|
def initialize: (untyped binary) -> untyped
|
@@ -598,11 +572,11 @@ end
|
|
598
572
|
|
599
573
|
module ProconBypassMan
|
600
574
|
class HttpClient
|
601
|
-
@
|
575
|
+
@server: untyped
|
602
576
|
@uri: ::URI
|
603
577
|
@retry_on_connection_error: false
|
604
578
|
|
605
|
-
def initialize: (path: String,
|
579
|
+
def initialize: (path: String, server: untyped, ?retry_on_connection_error: false) -> void
|
606
580
|
def get: -> nil
|
607
581
|
def post: (request_body: untyped) -> nil
|
608
582
|
def put: (request_body: untyped) -> nil
|
@@ -645,22 +619,6 @@ module ProconBypassMan
|
|
645
619
|
end
|
646
620
|
end
|
647
621
|
|
648
|
-
module ProconBypassMan
|
649
|
-
class ServerPool
|
650
|
-
@servers: Array[String]
|
651
|
-
@index: Integer?
|
652
|
-
|
653
|
-
def initialize: (servers: Array[String]) -> void
|
654
|
-
def pick: -> String?
|
655
|
-
def server: -> String?
|
656
|
-
def next!: -> nil
|
657
|
-
|
658
|
-
private
|
659
|
-
def reset: -> Integer
|
660
|
-
def inc_index: -> Integer
|
661
|
-
end
|
662
|
-
end
|
663
|
-
|
664
622
|
module ProconBypassMan
|
665
623
|
class CompressArray
|
666
624
|
@array: [String]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: procon_bypass_man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jiikko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pbmenv
|
@@ -94,10 +94,9 @@ files:
|
|
94
94
|
- lib/procon_bypass_man.rb
|
95
95
|
- lib/procon_bypass_man/background.rb
|
96
96
|
- lib/procon_bypass_man/background/job_performer.rb
|
97
|
-
- lib/procon_bypass_man/background/
|
97
|
+
- lib/procon_bypass_man/background/job_queue.rb
|
98
98
|
- lib/procon_bypass_man/background/jobs/base_job.rb
|
99
99
|
- lib/procon_bypass_man/background/jobs/concerns/has_external_api_setting.rb
|
100
|
-
- lib/procon_bypass_man/background/jobs/concerns/has_internal_api_setting.rb
|
101
100
|
- lib/procon_bypass_man/background/jobs/concerns/job_performable.rb
|
102
101
|
- lib/procon_bypass_man/background/jobs/post_completed_remote_macro_job.rb
|
103
102
|
- lib/procon_bypass_man/background/jobs/report_boot_job.rb
|
@@ -106,7 +105,7 @@ files:
|
|
106
105
|
- lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb
|
107
106
|
- lib/procon_bypass_man/background/jobs/report_event_base_job.rb
|
108
107
|
- lib/procon_bypass_man/background/jobs/report_load_config_job.rb
|
109
|
-
- lib/procon_bypass_man/background/jobs/
|
108
|
+
- lib/procon_bypass_man/background/jobs/report_procon_performance_measurements_job.rb
|
110
109
|
- lib/procon_bypass_man/background/jobs/report_reload_config_job.rb
|
111
110
|
- lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb
|
112
111
|
- lib/procon_bypass_man/background/jobs/sync_device_stats_job.rb
|
@@ -125,7 +124,9 @@ files:
|
|
125
124
|
- lib/procon_bypass_man/buttons_setting_configuration/validator.rb
|
126
125
|
- lib/procon_bypass_man/bypass.rb
|
127
126
|
- lib/procon_bypass_man/bypass/bypass_command.rb
|
128
|
-
- lib/procon_bypass_man/bypass/
|
127
|
+
- lib/procon_bypass_man/bypass/bypass_value.rb
|
128
|
+
- lib/procon_bypass_man/bypass/procon_to_switch.rb
|
129
|
+
- lib/procon_bypass_man/bypass/switch_to_procon.rb
|
129
130
|
- lib/procon_bypass_man/commands.rb
|
130
131
|
- lib/procon_bypass_man/commands/print_boot_message_command.rb
|
131
132
|
- lib/procon_bypass_man/commands/print_message_command.rb
|
@@ -146,7 +147,6 @@ files:
|
|
146
147
|
- lib/procon_bypass_man/device_connection/spoofing_output_report_watcher.rb
|
147
148
|
- lib/procon_bypass_man/device_model.rb
|
148
149
|
- lib/procon_bypass_man/device_status.rb
|
149
|
-
- lib/procon_bypass_man/io_monitor.rb
|
150
150
|
- lib/procon_bypass_man/plugin/splatoon2/macro/charge_tansan_bomb.rb
|
151
151
|
- lib/procon_bypass_man/plugin/splatoon2/macro/dasei_cancel.rb
|
152
152
|
- lib/procon_bypass_man/plugin/splatoon2/macro/fast_return.rb
|
@@ -171,6 +171,14 @@ files:
|
|
171
171
|
- lib/procon_bypass_man/procon/macro_plugin_map.rb
|
172
172
|
- lib/procon_bypass_man/procon/macro_registry.rb
|
173
173
|
- lib/procon_bypass_man/procon/mode_registry.rb
|
174
|
+
- lib/procon_bypass_man/procon/performance_measurement.rb
|
175
|
+
- lib/procon_bypass_man/procon/performance_measurement/last_bypass_at.rb
|
176
|
+
- lib/procon_bypass_man/procon/performance_measurement/measurement_collection.rb
|
177
|
+
- lib/procon_bypass_man/procon/performance_measurement/measurements_summarizer.rb
|
178
|
+
- lib/procon_bypass_man/procon/performance_measurement/procon_performance_span_transfer_job.rb
|
179
|
+
- lib/procon_bypass_man/procon/performance_measurement/queue_over_process.rb
|
180
|
+
- lib/procon_bypass_man/procon/performance_measurement/span_queue.rb
|
181
|
+
- lib/procon_bypass_man/procon/performance_measurement/span_transfer_buffer.rb
|
174
182
|
- lib/procon_bypass_man/procon/press_button_aware.rb
|
175
183
|
- lib/procon_bypass_man/procon/suppress_rumble.rb
|
176
184
|
- lib/procon_bypass_man/procon/user_operation.rb
|
@@ -212,18 +220,22 @@ files:
|
|
212
220
|
- lib/procon_bypass_man/scheduler.rb
|
213
221
|
- lib/procon_bypass_man/support/analog_stick_hypotenuse_tilting_power_scaler.rb
|
214
222
|
- lib/procon_bypass_man/support/callbacks.rb
|
223
|
+
- lib/procon_bypass_man/support/can_over_process.rb
|
215
224
|
- lib/procon_bypass_man/support/compress_array.rb
|
216
225
|
- lib/procon_bypass_man/support/cycle_sleep.rb
|
217
226
|
- lib/procon_bypass_man/support/device_mouse_finder.rb
|
218
227
|
- lib/procon_bypass_man/support/device_procon_finder.rb
|
228
|
+
- lib/procon_bypass_man/support/gc.rb
|
219
229
|
- lib/procon_bypass_man/support/http_client.rb
|
230
|
+
- lib/procon_bypass_man/support/load_agv.rb
|
220
231
|
- lib/procon_bypass_man/support/never_exit_accidentally.rb
|
221
232
|
- lib/procon_bypass_man/support/on_memory_cache.rb
|
233
|
+
- lib/procon_bypass_man/support/procon_performance_http_client.rb
|
222
234
|
- lib/procon_bypass_man/support/remote_macro_http_client.rb
|
223
235
|
- lib/procon_bypass_man/support/report_http_client.rb
|
236
|
+
- lib/procon_bypass_man/support/retryable.rb
|
224
237
|
- lib/procon_bypass_man/support/safe_timeout.rb
|
225
238
|
- lib/procon_bypass_man/support/send_device_stats_http_client.rb
|
226
|
-
- lib/procon_bypass_man/support/server_pool.rb
|
227
239
|
- lib/procon_bypass_man/support/signal_handler.rb
|
228
240
|
- lib/procon_bypass_man/support/update_remote_pbm_action_status_http_client.rb
|
229
241
|
- lib/procon_bypass_man/support/uptime.rb
|
@@ -234,6 +246,7 @@ files:
|
|
234
246
|
- lib/procon_bypass_man/websocket/client.rb
|
235
247
|
- lib/procon_bypass_man/websocket/forever.rb
|
236
248
|
- lib/procon_bypass_man/websocket/watchdog.rb
|
249
|
+
- lib/procon_bypass_man/worker.rb
|
237
250
|
- procon_bypass_man.gemspec
|
238
251
|
- project_template/README.md
|
239
252
|
- project_template/app.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module ProconBypassMan
|
2
|
-
module Background
|
3
|
-
class JobRunner
|
4
|
-
MAX_QUEUE_SIZE = 100
|
5
|
-
|
6
|
-
def self.start!
|
7
|
-
new.start!
|
8
|
-
end
|
9
|
-
|
10
|
-
# for test
|
11
|
-
def stop!
|
12
|
-
return unless defined?(@thread)
|
13
|
-
@thread.kill
|
14
|
-
end
|
15
|
-
|
16
|
-
def start!
|
17
|
-
return if defined?(@thread)
|
18
|
-
@thread = Thread.new do
|
19
|
-
while(item = self.class.queue.pop)
|
20
|
-
begin
|
21
|
-
JobPerformer.new(klass: item[:reporter_class], args: item[:args]).perform
|
22
|
-
sleep(1)
|
23
|
-
rescue => e
|
24
|
-
ProconBypassMan.logger.error(e)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
self
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.queue
|
32
|
-
@@queue ||= Queue.new
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.push(hash)
|
36
|
-
if queue.size > MAX_QUEUE_SIZE
|
37
|
-
ProconBypassMan.logger.error('Over queue size cap!!')
|
38
|
-
return
|
39
|
-
end
|
40
|
-
|
41
|
-
queue.push(hash)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
class ProconBypassMan::ReportPressedButtonsJob < ProconBypassMan::BaseJob
|
2
|
-
extend ProconBypassMan::HasInternalApiSetting
|
3
|
-
|
4
|
-
# @param [String] body
|
5
|
-
def self.perform(body)
|
6
|
-
ProconBypassMan::ReportHttpClient.new(
|
7
|
-
path: path,
|
8
|
-
server_pool: server_pool,
|
9
|
-
).post(body: body, event_type: :internal)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.path
|
13
|
-
"/api/pressed_buttons"
|
14
|
-
end
|
15
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
class ProconBypassMan::Bypass
|
2
|
-
module UsbHidLogger
|
3
|
-
include ProconBypassMan::Callbacks
|
4
|
-
|
5
|
-
define_callbacks :send_gadget_to_procon
|
6
|
-
define_callbacks :send_procon_to_gadget
|
7
|
-
|
8
|
-
set_callback :send_gadget_to_procon, :after, :log_send_gadget_to_procon
|
9
|
-
set_callback :send_procon_to_gadget, :after, :log_procon_to_gadget
|
10
|
-
|
11
|
-
def log_send_gadget_to_procon
|
12
|
-
return unless bypass_value.to_text
|
13
|
-
|
14
|
-
if ProconBypassMan.config.verbose_bypass_log
|
15
|
-
ProconBypassMan.logger.debug { ">>> #{bypass_value.to_text}" }
|
16
|
-
else
|
17
|
-
ProconBypassMan.cache.fetch key: 'bypass_log', expires_in: 1 do
|
18
|
-
ProconBypassMan.logger.debug { ">>> #{bypass_value.to_text}" }
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def log_procon_to_gadget
|
24
|
-
return unless bypass_value.to_text
|
25
|
-
|
26
|
-
if ProconBypassMan.config.verbose_bypass_log
|
27
|
-
ProconBypassMan.logger.debug { "<<< #{bypass_value.to_text}" }
|
28
|
-
else
|
29
|
-
ProconBypassMan.cache.fetch key: 'bypass_log', expires_in: 1 do
|
30
|
-
ProconBypassMan.logger.debug { "<<< #{bypass_value.to_text}" }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
if ProconBypassMan.config.enable_reporting_pressed_buttons
|
35
|
-
ProconBypassMan.cache.fetch key: 'pressed_buttons_reporter', expires_in: 5 do
|
36
|
-
ProconBypassMan::ReportPressedButtonsJob.perform_async(
|
37
|
-
bypass_value.binary.to_procon_reader.to_hash
|
38
|
-
)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|