snapshot-serviceにBitflyerの約定情報(executions)をDBに保存する機能を追加しました。
lightning_executions_BTC_JPYとlightning_executions_FX_BTC_JPYチャンネルを購読するように追加しました。
Bitflyerの約定メッセージをパースする構造体を追加:
ChannelMessage:channelMessageメソッド形式ExecutionsMessage: 直接メソッド形式ExecutionData: 約定データ
GMO版と同様にsave_trade_to_db関数を追加し、約定情報をexecutionsテーブルに保存します。
snapshot-serviceのmain.rsで、BitflyerWebSocketClientにPostgreSQLプールを渡すように修正しました。
# Bitflyerの約定情報が保存されているか確認
sudo journalctl -u snapshot-service | grep -i "Bitflyer Trade" | tail -50
# DB保存の成功ログ
sudo journalctl -u snapshot-service | grep -i "Saved Bitflyer trade" | tail -50
# エラーログ
sudo journalctl -u snapshot-service -p err | grep -i "Bitflyer\|execution" | tail -20# PostgreSQLに接続
PGPASSWORD="xxxxxx" psql --host=localhost --port=15432 --username=exch_sim_user --dbname=exch_sim
# Bitflyerの約定情報を確認(EXTERNAL_FEED)
SELECT exec_id, username, symbol, last_px, last_qty, side, created_at, counter_party_username
FROM executions
WHERE symbol = 'B_FX_BTCJPY'
AND username = 'EXTERNAL_FEED'
ORDER BY created_at DESC
LIMIT 20;
# 約定数の確認
SELECT username, symbol, COUNT(*) as count, MIN(created_at) as first_exec, MAX(created_at) as last_exec
FROM executions
WHERE symbol = 'B_FX_BTCJPY'
AND username = 'EXTERNAL_FEED'
GROUP BY username, symbol;- 約定情報は
username = 'EXTERNAL_FEED'として保存されます price_multiplier = 1,qty_multiplier = 1000を使用して変換されます- 重複挿入エラー(unique_violation)は無視されます