-
Notifications
You must be signed in to change notification settings - Fork 4
DuckDB による統計情報の保存と HTTP API 経由での統計情報の取得 #57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
voluntas
wants to merge
78
commits into
develop
Choose a base branch
from
feature/add-duckdb
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- DEPS に DUCKDB_VERSION=v1.3.2 を追加 - buildbase.py に install_duckdb 関数を実装(プリビルドの静的ライブラリを使用) - run.py に DuckDB のインストール処理を追加 - FindDuckDB.cmake を作成(静的ライブラリの検出用) - CMakeLists.txt に DuckDB のリンク設定を追加 macOS ARM64 および Linux x86_64 向けのプリビルド静的ライブラリを使用することで、 ソースコードからのビルドを回避し、ビルド時間を短縮。 C++ SDK で取得したクライアント単位の統計情報を DuckDB にリアルタイムで 保存する基盤を構築。
- --port オプションが指定された場合に HTTP サーバーを起動する機能を追加 - /version エンドポイントを実装し、以下の情報を JSON で返却: - zakuro_version: Zakuro のバージョン情報 - duckdb_version: 組み込まれた DuckDB のバージョン情報 - Boost.Beast を使用した非同期 HTTP サーバーの実装 - DuckDB の全依存ライブラリを静的リンクに追加 使用例: ./zakuro --port 8080 --config config.yaml curl http://localhost:8080/version
古い SoraServer 関連の TODO コメントと未使用コードを削除
- DuckDBStatsWriterクラスを追加し、接続情報を永続化 - 日付ベースのファイル名(.ddb拡張子)で保存 - connectionsテーブルにchannel_id, connection_id, session_id, audio, video等を記録 - type:offerメッセージから必要な情報を抽出 - DuckDBのSEQUENCE機能を使用してPKを自動生成 - SIGINT/SIGTERMハンドラーで適切にシャットダウン処理 - .gitignoreに*.ddb, *.db, *.pycを追加
- OnSetOfferメソッドでtype:offer受信時に即座にDuckDBに書き込み - 定期的な書き込み処理を削除し、重複書き込みを防止 - VirtualClientConfigとZakuroConfigにduckdb_writerを追加 - デバッグログを追加して動作確認を容易に
stats.ToJson()で取得したJSON文字列をDuckDBに保存する際、 文字列が二重エスケープされる問題を修正。 INSERT文でCAST( AS JSON)を使用することで、 JSON文字列を適切にJSON型として保存するように変更。
- プリペアドステートメント使用時の問題の原因を詳細に説明 - DuckDB内部でSTRING_LITERAL型として扱われ、Blob::ToString()でエスケープされることを記載 - CAST AS JSONでも解決しない理由を説明 - 回避策として直接SQL文を使用し、シングルクォートのエスケープ処理を実装 - デバッグ用のログ出力とテストファイルを削除
- stats テーブルを codec_stats, inbound_rtp_stats, outbound_rtp_stats に分割 - WebIDL仕様に準拠した型定義を実装 - codec_stats の重複挿入を防止(INSERT...WHERE NOT EXISTS) - GetStats() 呼び出し時の共通タイムスタンプを使用
- media_source_stats テーブルを追加(RTCMediaSourceStats仕様準拠) - RTCAudioSourceStatsとRTCVideoSourceStatsのフィールドを実装 - media-sourceは常に挿入(変化の有無に関わらず記録)
- jemalloc_extension.aを条件付きでリンクリストに追加 - Linuxビルド時にpthreadとdlライブラリを追加
- POST /query でSQL文字列を受け取り実行 - DuckDBStatsWriter::ExecuteQueryメソッドを追加 - クエリ結果をJSON形式で返す(カラム名、型、データ行を含む) - HTTPサーバーにDuckDBWriterのインスタンスを渡す仕組みを追加
- text/plainからapplication/sqlに変更 - Content-Typeのチェックを追加
- --ui-remote-url オプションを追加(デフォルト: http://localhost:5173) - /、/assets/、/static/へのアクセスを指定されたURLにプロキシ - HTTPクライアント機能をboost::beastで実装 - Boost::urlライブラリをリンクに追加
- Access-Control-Allow-Originに--ui-remote-urlの値を設定 - すべてのレスポンス(成功・エラー・404)にCORSヘッダーを追加 - OPTIONSメソッドでCORS preflightに対応 - Access-Control-Allow-MethodsとAccess-Control-Allow-Headersも設定
- zakuro_versionをバージョン番号のみに変更(GetVersion()メソッドを追加) - sora_sdk_version、libwebrtc_version、boost_versionを追加 - 各ライブラリのバージョン情報を表示
- sora_cpp_sdk_version: Sora C++ SDKのバージョン番号のみ - libwebrtc_version: WebRTCのビルドバージョン番号のみ - GetSoraCppSdkVersion()とGetWebRTCVersion()メソッドを追加 - フルバージョン文字列からバージョン番号を抽出する処理を実装
- Boost.Beastが認識できないHTTPヘッダーフィールドを文字列形式で処理するように修正 - 不要なログ出力とコメントアウトされたコードを削除 - /versionエンドポイントのJSONキーから_versionサフィックスを削除 - 不要なSSL関連のincludeを削除してコードを整理
BOOST_VERSIONマクロの仕組みをコメントで説明
リバースプロキシ経由でのアクセスではCORSヘッダーは不要のため、 以下のヘッダーを削除: - Access-Control-Allow-Origin - Access-Control-Allow-Methods - Access-Control-Allow-Headers - Access-Control-Max-Age また、OPTIONSメソッドの処理(CORSプリフライト)も削除。 将来的にはコマンドライン引数でCORSの有効/無効を 切り替えられるようにする予定。
- CMakeLists.txt: MSVC runtime library関連のポリシー設定を削除 - duckdb_stats_writer.cpp: Windows用のlocaltime_sを削除 - http_server.cpp: boost::urlを簡易URLパース実装に置き換え(将来的にboost::urlを使用予定) - zakuro_audio_device_module.h: WindowsDeviceType引数のメソッドは残す(WebRTCインターフェース要件のため)
- CMakeLists.txt: 静的ライブラリの一覧を削除し、プラットフォーム別にダイナミックライブラリ(.dylib/.so)を設定 - buildbase.py: static-libs-*.zipからlibduckdb-*.zipへの切り替え、ダイナミックライブラリのコピー処理を追加 - run.py: ビルド後とパッケージ作成時にDuckDBのダイナミックライブラリをコピーする処理を追加 - macOSとLinuxの両方でRPATH設定を追加し、実行ファイルと同じディレクトリからライブラリを読み込むように設定
- duckdb.hppからduckdb.hへヘッダーファイルを変更 - C++のクラス(DuckDB、Connection)からCの構造体(duckdb_database、duckdb_connection)へ移行 - すべてのDuckDB操作をC API関数に書き換え - CMakeLists.txtにBUILD_RPATH_USE_ORIGIN ONを追加してRPATH設定を改善 - buildbase.pyからduckdb.hpp(C++ヘッダー)のダウンロード処理を削除 - http_server.cppでduckdb_library_version()を使用してバージョン情報を取得 この変更により、UbuntuでのlibstdC++とlibc++の違いによる問題を回避
- /version と /query エンドポイントを廃止 - /rpc エンドポイントでJSON-RPC 2.0リクエストを受け付けるように変更 - JSON-RPC 2.0ハンドラーを別ファイル (json_rpc.cpp/h) に分離 - --port オプションを --rpc-port に変更 - idフィールドは数値、文字列、nullをサポート JSON-RPCメソッド: - version: バージョン情報を取得 - query: SQLクエリを実行 (params.sql にSQL文を指定)
- json_rpc.cpp: デバッグ用の DEBUG\!\!\! ログをすべて削除 - virtual_client.cpp: 冗長な情報ログ(GetStats、OnSetOffer、Got系)を削除 - main.cpp: HTTPサーバーとDuckDB初期化の重複ログを削除
!opus レビューして、まず要約を用意してからレビューお願いします。 |
This comment was marked as outdated.
This comment was marked as outdated.
!opus 指摘された点をいくつか修正したので再度レビューして |
This comment was marked as outdated.
This comment was marked as outdated.
- --duckdb-output-dir オプションで DuckDB ファイルの出力先ディレクトリを指定可能にする - --no-duckdb-output オプションで DuckDB への統計情報出力を無効化可能にする - YAML 設定ファイルでも duckdb-output-dir と no-duckdb-output をサポートする - DuckDB クローズ時の CHECKPOINT コマンドを修正する(WAL_CHECKPOINT は存在しないため)
!opus 再度レビューをお願いします。 |
This comment was marked as outdated.
This comment was marked as outdated.
VirtualClient::OnDisconnect で rtc_stats_timer_ のキャンセル処理が欠落していたため、 メモリリークとタイマーコールバックの不正アクセスの可能性があった。 Clear() メソッドと同様に、適切なミューテックスロックを使用して タイマーのキャンセル処理を追加した。
- boost::asio::ssl を使用して SSL/TLS 接続をサポート - SSL コンテキストの作成と証明書検証の実装 - SNI (Server Name Indication) のサポート - HTTP と同様のレスポンスボディサイズ制限(10MB)を適用 - デフォルトポート設定(HTTP: 80, HTTPS: 443)の自動判定
…:OnDisconnect で rtc_stats_timer_ のキャンセル処理が欠落していた問題を修正する。
- connections → connection - codec_stats → rtc_stats_codec - inbound_rtp_stats → rtc_stats_inbound_rtp - outbound_rtp_stats → rtc_stats_outbound_rtp - media_source_stats → rtc_stats_media_source シーケンス名、インデックス名も同様に変更
…nnel の統計情報テーブルを追加する 以下のテーブルを追加: - rtc_stats_remote_inbound_rtp - rtc_stats_remote_outbound_rtp - rtc_stats_data_channel WriteRTCStats メソッドに対応する統計タイプの処理を実装
- テーブル名を実装に合わせて修正(connections → connection など) - 新しいテーブルのドキュメントを追加: - zakuro: プロセス実行情報 - zakuro_scenario: シナリオ情報 - rtc_stats_remote_inbound_rtp: リモート受信統計 - rtc_stats_remote_outbound_rtp: リモート送信統計 - rtc_stats_data_channel: データチャンネル統計 - クエリ例のテーブル名を更新 - データチャンネル統計情報取得の curl コマンド例を追加
- 各ファイルから不要な情報レベルのログを削除 - VirtualClientStats 構造体に role フィールドを追加 - connection テーブルに role カラムを追加して Sora のロール情報を記録
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.