procon_bypass_man 0.2.2 → 0.2.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/.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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dddf32b941507a57c7b2c5656879e132132f51eefcd64f29788567c81566c235
|
4
|
+
data.tar.gz: e3649afcdb4877b41c6d05754ed77176d46a1fcc46a3d45751e15b1c91f6a23d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 231bb01ab26c17cdd6d044030a71479dfd1016d05e353de537e3ecd3978f5f4d23b2d8c4058e4f86cadbd555e3762e6124f7cb36920df2544c306e154d568bfe
|
7
|
+
data.tar.gz: 8ae5c0a6b510d9b6dc22eb54fbf748e21e9b2b90671f00dc197baad2f90d00473ba4ee64f6ff148e7a200498df8f22edd738281979ab5e1240233a6bbc9e349b
|
data/.circleci/config.yml
CHANGED
@@ -15,7 +15,7 @@ executors:
|
|
15
15
|
BUNDLE_JOBS: 4
|
16
16
|
working_directory: ~/app
|
17
17
|
|
18
|
-
commands:
|
18
|
+
commands:
|
19
19
|
bundle_install:
|
20
20
|
parameters:
|
21
21
|
ruby-version:
|
@@ -117,7 +117,7 @@ build_jobs: &build_jobs
|
|
117
117
|
- "2.5.5"
|
118
118
|
- "3.0.1"
|
119
119
|
- "3.0.2"
|
120
|
-
- "3.1.
|
120
|
+
- "3.1.2"
|
121
121
|
- bundle_install:
|
122
122
|
matrix:
|
123
123
|
parameters:
|
@@ -125,7 +125,7 @@ build_jobs: &build_jobs
|
|
125
125
|
- "2.5.5"
|
126
126
|
- "3.0.1"
|
127
127
|
- "3.0.2"
|
128
|
-
- "3.1.
|
128
|
+
- "3.1.2"
|
129
129
|
- lint:
|
130
130
|
matrix:
|
131
131
|
parameters:
|
@@ -133,7 +133,7 @@ build_jobs: &build_jobs
|
|
133
133
|
- "2.5.5"
|
134
134
|
- "3.0.1"
|
135
135
|
- "3.0.2"
|
136
|
-
- "3.1.
|
136
|
+
- "3.1.2"
|
137
137
|
requires:
|
138
138
|
- bundle_install
|
139
139
|
- type_check:
|
@@ -142,7 +142,7 @@ build_jobs: &build_jobs
|
|
142
142
|
ruby-version:
|
143
143
|
# - "3.0.1" # たまにSEGVするので
|
144
144
|
- "3.0.2"
|
145
|
-
- "3.1.
|
145
|
+
- "3.1.2"
|
146
146
|
requires:
|
147
147
|
- bundle_install
|
148
148
|
- rspec:
|
@@ -152,7 +152,7 @@ build_jobs: &build_jobs
|
|
152
152
|
- "2.5.5"
|
153
153
|
- "3.0.1"
|
154
154
|
- "3.0.2"
|
155
|
-
- "3.1.
|
155
|
+
- "3.1.2"
|
156
156
|
requires:
|
157
157
|
- bundle_install
|
158
158
|
workflows:
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.1.2
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -61,9 +61,6 @@ Switch <-- (PBM): ZR連打
|
|
61
61
|
* ケーブルでそれらを接続した状態で、Raspberry Pi4にsshして本プログラムを起動することで使用します
|
62
62
|
* ラズベリーパイ4のセットアップ方法は?
|
63
63
|
* https://github.com/splaplapla/procon_bypass_man/tree/master/docs/setup_raspi.md
|
64
|
-
* モード, マクロの違いは?
|
65
|
-
* modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続けます
|
66
|
-
* マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了します
|
67
64
|
* レイヤーとは?
|
68
65
|
* 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれます
|
69
66
|
* レイヤーは4つあって、up, down, left, rightです。十字キーに対応しています
|
@@ -80,6 +77,13 @@ Switch <-- (PBM): ZR連打
|
|
80
77
|
* sshなしで運用は可能ですか?
|
81
78
|
* https://pbm-cloud.herokuapp.com を使えば、sshを使わずに運用が可能です
|
82
79
|
|
80
|
+
## 仕様・制約
|
81
|
+
* 日を跨ぐ24時ちょうどになった瞬間はLinuxのcronが起動などがするようで、この時間は数秒間バイパスが激しく遅延します
|
82
|
+
* ログファイルのローテションが少なくとも走るはずなので、不要なデーモンを停止するなどで影響を小さくすることはできると思いますが、完全に抑制することは難しいと思います
|
83
|
+
* コントローラーから読み取ってSwitchに書き込む時間は、少なくとも0.02秒はかかります
|
84
|
+
* 動かしているRaspberry Piの負荷に依存するこの限りではありません
|
85
|
+
|
86
|
+
<!--
|
83
87
|
## TODO
|
84
88
|
* レコーディング機能(プロコンの入力をマクロとして登録ができる)
|
85
89
|
* ドキュメントを書く(doing)
|
@@ -103,11 +107,16 @@ sudo kill -USR2 `cat ./pbm_pid`
|
|
103
107
|
* CHANGELOG.md に日付を書く
|
104
108
|
* be rake release
|
105
109
|
* githubのreleaseを作成する
|
110
|
+
-->
|
106
111
|
|
107
|
-
##
|
108
|
-
|
109
|
-
|
112
|
+
## 開発を支援してくれる人を募集しています
|
113
|
+
* https://jiikko.fanbox.cc/
|
114
|
+
* procon_bypassの運営・開発・サーバー費用に充てさせていただきます。また、問い合わせに優先して対応します。
|
110
115
|
|
111
116
|
## Links
|
112
117
|
* https://discord.gg/bEcRNKf4ep
|
113
118
|
* 質問などご意見をdiscordでも受け付けています
|
119
|
+
|
120
|
+
## License
|
121
|
+
|
122
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Steepfile
CHANGED
@@ -38,7 +38,6 @@ target :lib do
|
|
38
38
|
check 'lib/procon_bypass_man/support/http_client'
|
39
39
|
check 'lib/procon_bypass_man/support/send_device_stats_http_client'
|
40
40
|
check 'lib/procon_bypass_man/support/on_memory_cache'
|
41
|
-
check 'lib/procon_bypass_man/support/server_pool'
|
42
41
|
check 'lib/procon_bypass_man/support/uptime.rb'
|
43
42
|
check 'lib/procon_bypass_man/support/safe_timeout'
|
44
43
|
check 'lib/procon_bypass_man/support/update_remote_pbm_action_status_http_client'
|
data/docs/getting_started.md
CHANGED
@@ -10,23 +10,26 @@
|
|
10
10
|
* [pbmenvを使わない方法](#pbmenvを使わない方法)
|
11
11
|
* [普段使いをするためのセットアップ](#普段使いをするためのセットアップ)
|
12
12
|
* [レイヤー](#レイヤー)
|
13
|
-
* モード
|
14
13
|
* [マクロ](#マクロ)
|
15
14
|
* [左スティックの感度調整](#左スティックの感度調整)
|
16
15
|
* [入力表示](#入力表示)
|
17
|
-
* 設定ファイルの書き方
|
16
|
+
* [設定ファイルの書き方](#設定ファイルの書き方)
|
18
17
|
* プラグインの書き方
|
19
18
|
* [設定ファイルの書き方がわからない、エラーが起きるとき](#設定ファイルの書き方がわからない、エラーが起きるとき)
|
20
19
|
* [procon_bypass_manのアップグレード方法](#procon_bypass_manのアップグレード方法)
|
21
20
|
* [procon_bypass_man_cloudについて](#procon_bypass_man_cloudについて)
|
21
|
+
* [最適化について](#最適化について)
|
22
22
|
|
23
23
|
## はじめに
|
24
24
|
### procon_bypass_manで解決したいこと
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
サードパーティー製のコントローラーは頑丈で使いやすいですか?
|
27
|
+
|
28
|
+
通常、ボタンの連射をするには、サードパーティー製のコントローラーを使う必要があるのですが、ボタンの押した感覚や各種設定方法は各社の独自仕様であるため、それらを手に馴染ませるのがとても大変です。
|
29
|
+
特に「説明書を熟読して、コントローラーの設定方法を理解し適用すること、時間が空いてから設定されている状態を思い出す」がつらいと思っています。
|
30
|
+
また、サードパーティー製のコントローラーは非常に壊れやすく、同じ製品が再び購入できるとは限りません。
|
31
|
+
|
32
|
+
本ツールを使うと、使い慣れた純正コントローラーを使って、サードパーティー製のコントローラー以上のことができます。設定内容はテキストで管理しているため一目瞭然です。設定内容のコピーも容易です。
|
30
33
|
|
31
34
|
### procon_bypass_manでできること
|
32
35
|
|
@@ -35,7 +38,6 @@
|
|
35
38
|
* 連射中は特定のキーの入力を無視したり、複数のキーをトリガーに連射することもできます
|
36
39
|
* マクロ
|
37
40
|
* [活用例](/docs/setting/splatoon2_macro_sokuwari_bubble.md)
|
38
|
-
* 特定の同じ操作の繰り返し(モード)
|
39
41
|
* 左スティックの感度調整
|
40
42
|
* [設定方法](/docs/setting/left-analogstick-cap.md)
|
41
43
|
* WEBから設定状態の閲覧・反映
|
@@ -60,6 +62,8 @@ pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるので
|
|
60
62
|
* systemにインストールされているrubyを使う場合(初心者におすすめ)
|
61
63
|
* rbenvでインストールしたrubyを使う場合
|
62
64
|
|
65
|
+
ちなみに、rbenvを使った方がラグは少ないような気がしますが、明確な体験の違いはそこまでないように思います。
|
66
|
+
|
63
67
|
#### 1) pbmenvを使う方法
|
64
68
|
|
65
69
|
https://github.com/splaplapla/pbmenv
|
@@ -128,12 +132,12 @@ pbmenvを使っていない場合は、 https://github.com/splaplapla/procon_byp
|
|
128
132
|
ゲームをやめたくなったらSwitchはそのままスリープに入って問題ないです。このときにRaspberry Piも一緒に電源が切れてしまいますが故障することはありません。
|
129
133
|
|
130
134
|
## レイヤー
|
131
|
-
|
135
|
+
レイヤーごとにボタンの設定をすることができ、用途に応じてレイヤーを切り替えることで、違う設定を即座に適用できるという機能です。
|
132
136
|
レイヤーは、up, down, left, rightの4つあります。 設定ファイルの書いている `prefix_keys_for_changing_layer` を押しながら、十字キーのup, down, left, rightのどれかを押すと、レイヤーを変更することができます。
|
133
137
|
|
134
|
-
|
138
|
+
設定ファイルでのレイヤー毎の定義方法は、 `layer` ブロックで囲って定義します。
|
135
139
|
以下の例は、upレイヤーとleftレイヤーだけに設定が書かれています。ゲーム進行状況によってレイヤーを切り替えてください。
|
136
|
-
|
140
|
+
procon_bypass_manを起動した直後に有効になっているレイヤーは、 up です。
|
137
141
|
|
138
142
|
```ruby
|
139
143
|
layer :up do
|
@@ -151,15 +155,12 @@ layer :down do
|
|
151
155
|
end
|
152
156
|
```
|
153
157
|
|
154
|
-
## モード
|
155
|
-
* 後で書きます
|
156
|
-
|
157
158
|
## マクロ
|
158
159
|
|
159
160
|
決まった入力を繰り返し実行できる機能を「マクロ」と呼んでいます。
|
160
|
-
|
161
|
+
マクロを使うことで、スプラトゥーンであれば、バブル即割の操作や、試合中の味方へのスーパージャンプもマクロ経由で入力できます。
|
161
162
|
|
162
|
-
|
163
|
+
設定ファイルに記述するマクロは文字列で定義します。
|
163
164
|
マクロを設定ファイルに定義するには、「プラグイン」か設定ファイルへ直接を記述する「open_macro」のどちらかで行えます。
|
164
165
|
|
165
166
|
「プラグイン」を使用する場合は、マクロの詳細を記述する必要がなく、PBMのバージョンアップとともに改善が入る可能性があります。
|
@@ -174,10 +175,13 @@ open_macroは、マクロの詳細を設定ファイルに直書きするため
|
|
174
175
|
y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, right, left, l, zl
|
175
176
|
```
|
176
177
|
|
178
|
+
<!--
|
177
179
|
マクロの形式には、1ボタンずつ入力する「バージョン1」と時間指定のできる「バージョン2」があります。
|
178
180
|
バージョン1は、 `[:x, :y, :up]` と記述すると、x, y, 十字キーの上ボタンを順番に入力します。バージョン1では実行時間を指定することはできません。
|
181
|
+
-->
|
179
182
|
|
180
|
-
|
183
|
+
マクロは、複数のボタンを同時に「連打」「押しっぱなし」または「待機」ができます。
|
184
|
+
|
181
185
|
連打はtoggleで、押しっぱなしはpressing, 無操作は、waitというキーワードを使います。
|
182
186
|
複数のボタンを同時押しの場合は、andで繋ぎます。Xボタンを押しっぱなしにして、ZRボタンを連打する場合は `pressing_x_and_toggle_zr` と記述します。
|
183
187
|
これに時間を指定をする場合は、forで繋ぎます。 `pressing_x_and_toggle_zr_for_1sec` となります。
|
@@ -192,7 +196,7 @@ y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, rig
|
|
192
196
|
* toggle_x_and_toggle_zr_for_0_2sec
|
193
197
|
* XボタンとZRボタンを0.2秒間連打
|
194
198
|
|
195
|
-
上述したマクロ(ステップ)は、open_macro
|
199
|
+
上述したマクロ(ステップ)は、open_macroという構文でも記述できます。次は実際の記述例です。
|
196
200
|
|
197
201
|
```
|
198
202
|
open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec, :toggle_thumbr_and_toggle_zr_for_0_34sec, :toggle_r_for_1sec], if_pressed: [:zl, :right]
|
@@ -204,11 +208,16 @@ open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec,
|
|
204
208
|
[左スティックの感度調整](/docs/setting/left-analogstick-cap.md)
|
205
209
|
|
206
210
|
## 入力表示
|
207
|
-
* https://github.com/splaplapla/switch-procon-input-viewer
|
208
|
-
*
|
211
|
+
* 使い方は https://github.com/splaplapla/switch-procon-input-viewer を参照してください。
|
212
|
+
* https://zenn.dev/jiikko/articles/2ef0ccbdfe0fe7 に技術的な解説を書きました
|
209
213
|
|
210
214
|
## 設定ファイルの書き方
|
211
|
-
|
215
|
+
設定ファイルは、ymlフォーマットに埋め込まれたRubyスクリプトで記述します。
|
216
|
+
Rubyスクリプトな上に独特な構文に対して、アレンジを加えることは難しいと思ったので、マウス操作をするだけで設定ファイルを生成するツールを作りました。
|
217
|
+
https://splaplapla.github.io/procon_bypass_man_setting_editor/ です。
|
218
|
+
このツールで設定ファイルを生成し、コピペをするだけで大半のことは済みます。
|
219
|
+
|
220
|
+
TODO 設定ファイルの書き方
|
212
221
|
|
213
222
|
## プラグインの書き方
|
214
223
|
* 後で書きます
|
@@ -229,3 +238,22 @@ procon_bypass_man_cloudとの接続が完了後、Raspberry Piを起動時にpro
|
|
229
238
|
セットアップ方法などでわからないことがあればdiscordで質問してみてください。
|
230
239
|
|
231
240
|
セットアップ方法は https://pbm-cloud.herokuapp.com/faq に書いています。
|
241
|
+
|
242
|
+
## 最適化について
|
243
|
+
本稿では、Rubyの最適化について書きます。上級者向けです。適用しなくても普通に動きますが、逆に適用したことで何らかのケースで遅くなる場合があるかもしれません。
|
244
|
+
|
245
|
+
* jemallocを使う
|
246
|
+
* GCの回数が減る(はずな)ので小さな遅延が減ると考えています。が、違いを測定および体感はできませんでした。
|
247
|
+
* インストール方法と動作確認
|
248
|
+
* sudo apt install libjemalloc-dev
|
249
|
+
* export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2
|
250
|
+
* MALLOC_CONF=stats_print:true ruby -e "exit"
|
251
|
+
* 適用方法
|
252
|
+
* `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2` を足してください
|
253
|
+
* ex) `ExecStart=/bin/bash -c "LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2 /home/pi/.rbenv/versions/3.0.1/bin/ruby /usr/share/pbm/current/app.rb"`
|
254
|
+
* jitを有効にする
|
255
|
+
* 起動した直後は、コンパイルが走るので遅くなります。しかし、有効にしたところで本プログラムはIOバインドなので効果は薄いようです。
|
256
|
+
* 適用方法
|
257
|
+
* `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `--jit` を足してください
|
258
|
+
* ex) `ExecStart=/bin/bash -c "/home/pi/.rbenv/versions/3.0.1/bin/ruby --jit /usr/share/pbm/current/app.rb"`
|
259
|
+
* ラズベリーパイのGUIをオフにする
|
@@ -9,12 +9,52 @@
|
|
9
9
|
* wget https://raw.githubusercontent.com/splaplapla/procon_bypass_man/master/docs/setup_raspi.mitamae.rb -O setup_raspi.mitamae.rb
|
10
10
|
* sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
|
11
11
|
* sudo reboot
|
12
|
-
* sudo sh /usr/share/pbm/shared/add_procon_gadget.sh
|
13
|
-
*
|
12
|
+
* sudo sh /usr/share/pbm/shared/add_procon_gadget.sh の実行する
|
13
|
+
* 何も表示されなければOK
|
14
14
|
* PCとRaspberry Pi4を接続し、プロコンとして認識していることを確認する
|
15
15
|
* sudo gem i pbmenv
|
16
16
|
* sudo pbmenv install latest
|
17
17
|
|
18
|
+
Raspberry Piのセットアップは以上です。
|
19
|
+
次は、SwitchとRaspberry Piとプロコンにケーブルを接続した上で、次のコマンドをshellに入力し、procon_bypass_manの動作確認を行なってください。
|
20
|
+
|
21
|
+
```shell
|
22
|
+
cd /usr/share/pbm/current
|
23
|
+
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
24
|
+
```
|
25
|
+
|
26
|
+
次のような出力が画面に表示されれば、動作しています。
|
27
|
+
|
28
|
+
```
|
29
|
+
----
|
30
|
+
ProconBypassMan::VERSION: 0.2.2
|
31
|
+
RUBY_VERSION: 3.0.1
|
32
|
+
Pbmenv::VERSION: 0.1.10
|
33
|
+
pid: 574
|
34
|
+
root: /usr/share/pbm/v0.2.0
|
35
|
+
pid_path: /usr/share/pbm/v0.2.0/pbm_pid
|
36
|
+
setting_path: /usr/share/pbm/current/setting.yml
|
37
|
+
uptime from boot: 60 sec
|
38
|
+
use_pbmenv: true
|
39
|
+
session_id: s_c6f36422-c20f-4a04-a446-b4a235c2face
|
40
|
+
device_id: d_8b0c90d8-90*************************
|
41
|
+
bypass_mode: normal(5)
|
42
|
+
----
|
43
|
+
```
|
44
|
+
|
45
|
+
<hr>
|
46
|
+
|
47
|
+
procon_bypass_manを手動で起動する場合は、先ほどの2行のコマンドを毎回入力してください。
|
48
|
+
procon_bypass_manを自動起動する方法については `GETTING STARTED` を参照してください。
|
49
|
+
|
50
|
+
<hr>
|
51
|
+
|
52
|
+
|
53
|
+
ケーブルの接続方法は、次の写真を参考にしてください。
|
54
|
+
|
55
|
+
<img src="https://user-images.githubusercontent.com/1664497/151661582-3a1e8ce9-6c38-4754-8075-7a4453b3109a.jpg" width="500px">
|
56
|
+
|
57
|
+
<!--
|
18
58
|
## 上記手順の動作確認方法
|
19
59
|
* 使えそうなイメージ
|
20
60
|
* navikey/raspbian-bullseye
|
@@ -48,3 +88,5 @@ sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
|
|
48
88
|
* /etc/modules に指定の文字列があること
|
49
89
|
* /boot/config.txt に指定の文字列があること
|
50
90
|
* /usr/share/pbm/shared/add_procon_gadget.sh が存在していること
|
91
|
+
|
92
|
+
-->
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class ProconBypassMan::Background::JobQueue
|
2
|
+
extend ProconBypassMan::CanOverProcess
|
3
|
+
|
4
|
+
include Singleton
|
5
|
+
|
6
|
+
attr_reader :distributed_queue
|
7
|
+
|
8
|
+
# @override
|
9
|
+
def self.enable?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
# @override
|
14
|
+
def self.distributed_class
|
15
|
+
Queue
|
16
|
+
end
|
17
|
+
|
18
|
+
# @override
|
19
|
+
def self.socket_file_path
|
20
|
+
"/tmp/procon_bypass_man_background_job_queue_queue".freeze
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.push(value)
|
24
|
+
return unless enable?
|
25
|
+
|
26
|
+
instance.distributed_queue.push(value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.pop
|
30
|
+
return unless enable?
|
31
|
+
|
32
|
+
instance.distributed_queue.pop
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.size
|
36
|
+
return unless enable?
|
37
|
+
|
38
|
+
instance.distributed_queue.size
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.clear
|
42
|
+
return unless enable?
|
43
|
+
|
44
|
+
instance.distributed_queue.clear
|
45
|
+
end
|
46
|
+
|
47
|
+
def initialize
|
48
|
+
@distributed_queue = DRbObject.new_with_uri(self.class.socket_path)
|
49
|
+
end
|
50
|
+
end
|
@@ -6,9 +6,9 @@ module ProconBypassMan
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def perform_async(*args)
|
9
|
-
ProconBypassMan::Background::
|
9
|
+
ProconBypassMan::Background::JobQueue.push(
|
10
10
|
args: args,
|
11
|
-
|
11
|
+
job_class: self.name, # drb上のQueueに格納するので念の為文字列入れて、取り出すときにevalでクラス化する
|
12
12
|
)
|
13
13
|
end
|
14
14
|
end
|
@@ -5,7 +5,7 @@ class ProconBypassMan::ReportBootJob < ProconBypassMan::ReportEventBaseJob
|
|
5
5
|
def self.perform(body)
|
6
6
|
ProconBypassMan::ReportHttpClient.new(
|
7
7
|
path: path,
|
8
|
-
|
8
|
+
server: api_server,
|
9
9
|
retry_on_connection_error: true,
|
10
10
|
).post(body: body, event_type: :boot)
|
11
11
|
end
|
@@ -4,7 +4,7 @@ class ProconBypassMan::ReportCompletedUpgradePbmJob < ProconBypassMan::ReportEve
|
|
4
4
|
def self.perform
|
5
5
|
ProconBypassMan::ReportHttpClient.new(
|
6
6
|
path: path,
|
7
|
-
|
7
|
+
server: api_server,
|
8
8
|
).post(body: nil, event_type: :completed_upgrade_pbm)
|
9
9
|
end
|
10
10
|
end
|
@@ -5,7 +5,7 @@ class ProconBypassMan::ReportErrorReloadConfigJob < ProconBypassMan::ReportEvent
|
|
5
5
|
def self.perform(body)
|
6
6
|
ProconBypassMan::ReportHttpClient.new(
|
7
7
|
path: path,
|
8
|
-
|
8
|
+
server: api_server,
|
9
9
|
).post(body: body, event_type: :error_reload_config)
|
10
10
|
end
|
11
11
|
end
|
@@ -5,7 +5,7 @@ class ProconBypassMan::ReportLoadConfigJob < ProconBypassMan::ReportEventBaseJob
|
|
5
5
|
def self.perform(body)
|
6
6
|
ProconBypassMan::ReportHttpClient.new(
|
7
7
|
path: path,
|
8
|
-
|
8
|
+
server: api_server,
|
9
9
|
).post(body: body, event_type: :load_config)
|
10
10
|
end
|
11
11
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class ProconBypassMan::ReportProconPerformanceMeasurementsJob < ProconBypassMan::BaseJob
|
2
|
+
extend ProconBypassMan::HasExternalApiSetting
|
3
|
+
|
4
|
+
# @param [ProconBypassMan::Procon::PerformanceMeasurement::MeasurementCollection] measurement_collection
|
5
|
+
def self.perform(measurement_collection)
|
6
|
+
return if measurement_collection.nil?
|
7
|
+
|
8
|
+
collected_spans_size = measurement_collection.spans.size
|
9
|
+
metric = ProconBypassMan::Procon::PerformanceMeasurement.summarize(
|
10
|
+
spans: measurement_collection.spans
|
11
|
+
)
|
12
|
+
body = {
|
13
|
+
timestamp: measurement_collection.timestamp_key,
|
14
|
+
interval_from_previous_succeed_max: metric.interval_from_previous_succeed_max,
|
15
|
+
interval_from_previous_succeed_p50: metric.interval_from_previous_succeed_p50,
|
16
|
+
write_time_max: metric.write_time_max,
|
17
|
+
write_time_p50: metric.write_time_p50,
|
18
|
+
read_time_max: metric.read_time_max,
|
19
|
+
read_time_p50: metric.read_time_p50,
|
20
|
+
time_taken_max: metric.time_taken_max,
|
21
|
+
time_taken_p50: metric.time_taken_p50,
|
22
|
+
time_taken_p95: metric.time_taken_p95,
|
23
|
+
time_taken_p99: metric.time_taken_p99,
|
24
|
+
read_error_count: metric.read_error_count,
|
25
|
+
write_error_count: metric.write_error_count,
|
26
|
+
gc_count: metric.gc_count,
|
27
|
+
gc_time: metric.gc_time,
|
28
|
+
succeed_rate: metric.succeed_rate,
|
29
|
+
load_agv: ProconBypassMan::LoadAgv.new.get,
|
30
|
+
collected_spans_size: collected_spans_size,
|
31
|
+
}
|
32
|
+
ProconBypassMan.logger.info(body)
|
33
|
+
|
34
|
+
ProconBypassMan::ProconPerformanceHttpClient.new(
|
35
|
+
path: path,
|
36
|
+
server: api_server,
|
37
|
+
).post(body: body)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.path
|
41
|
+
"/api/devices/#{ProconBypassMan.device_id}/procon_performance_metrics"
|
42
|
+
end
|
43
|
+
end
|
@@ -5,7 +5,7 @@ class ProconBypassMan::ReportReloadConfigJob < ProconBypassMan::ReportEventBaseJ
|
|
5
5
|
def self.perform(body)
|
6
6
|
ProconBypassMan::ReportHttpClient.new(
|
7
7
|
path: path,
|
8
|
-
|
8
|
+
server: api_server,
|
9
9
|
).post(body: body, event_type: :reload_config)
|
10
10
|
end
|
11
11
|
end
|
@@ -5,7 +5,7 @@ class ProconBypassMan::SyncDeviceStatsJob < ProconBypassMan::BaseJob
|
|
5
5
|
def self.perform(status)
|
6
6
|
ProconBypassMan::SendDeviceStatsHttpClient.new(
|
7
7
|
path: path,
|
8
|
-
|
8
|
+
server: api_server,
|
9
9
|
).post(status: status, pbm_session_id: ProconBypassMan.session_id)
|
10
10
|
end
|
11
11
|
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require "procon_bypass_man/background/jobs/concerns/has_internal_api_setting"
|
2
1
|
require "procon_bypass_man/background/jobs/concerns/has_external_api_setting"
|
3
2
|
require "procon_bypass_man/background/jobs/concerns/job_performable"
|
4
|
-
require "procon_bypass_man/background/
|
3
|
+
require "procon_bypass_man/background/job_queue"
|
5
4
|
require "procon_bypass_man/background/job_performer"
|
6
5
|
require "procon_bypass_man/background/jobs/base_job"
|
7
6
|
require "procon_bypass_man/background/jobs/report_event_base_job"
|
@@ -11,7 +10,7 @@ require "procon_bypass_man/background/jobs/report_reload_config_job"
|
|
11
10
|
require "procon_bypass_man/background/jobs/report_error_reload_config_job"
|
12
11
|
require "procon_bypass_man/background/jobs/report_load_config_job"
|
13
12
|
require "procon_bypass_man/background/jobs/report_error_job"
|
14
|
-
require "procon_bypass_man/background/jobs/report_pressed_buttons_job"
|
15
13
|
require "procon_bypass_man/background/jobs/report_completed_upgrade_pbm_job"
|
14
|
+
require "procon_bypass_man/background/jobs/report_procon_performance_measurements_job"
|
16
15
|
require "procon_bypass_man/background/jobs/sync_device_stats_job"
|
17
16
|
require "procon_bypass_man/background/jobs/post_completed_remote_macro_job"
|