Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
b4952f5
feat: DuckDB v1.3.2 を静的リンクライブラリとして追加
voluntas Jul 26, 2025
f057d47
feat: HTTP サーバー機能と /version エンドポイントを追加
voluntas Jul 26, 2025
272a86d
refactor: 未使用の TODO コメントを削除
voluntas Jul 26, 2025
1b4eda8
DuckDBを使用したクライアント統計情報の永続化機能を実装
voluntas Jul 26, 2025
7102a3f
type:offer受信時にのみDuckDBに統計情報を書き込むように修正
voluntas Jul 26, 2025
dbf5b8b
fix: DuckDBへのJSON保存時の二重エスケープ問題を修正
voluntas Jul 26, 2025
5f1fd0a
プリペアドステートメントでCAST AS JSONを使用してJSON二重エスケープ問題を修正
voluntas Jul 26, 2025
55a2955
DuckDB C++ APIでのJSON保存時の二重エスケープ問題に関する詳細なコメントを追加
voluntas Jul 26, 2025
1b8be15
DuckDBの統計情報保存をJSON型から分離テーブル構造に変更
voluntas Jul 27, 2025
1504b80
media-source統計情報テーブルを追加
voluntas Jul 27, 2025
924b458
Ubuntu 24.04のDuckDBビルドエラー対策を追加
voluntas Jul 27, 2025
1cf61d0
/queryエンドポイントを追加してSQL実行機能を実装
voluntas Jul 27, 2025
b05bd4b
/queryエンドポイントのContent-Typeをapplication/sqlに変更
voluntas Jul 27, 2025
968ebfd
/へのリバースプロキシ機能を追加
voluntas Jul 27, 2025
8860e47
CORSヘッダーを追加して--ui-remote-urlからのアクセスを許可
voluntas Jul 27, 2025
2faa62e
/versionエンドポイントの改善
voluntas Jul 27, 2025
5cfefd5
/versionレスポンスをバージョン番号のみに変更
voluntas Jul 27, 2025
4ecf830
リバースプロキシの実装を改善してブラウザからのアクセスに対応
voluntas Jul 27, 2025
bf1f6d6
Boostバージョン表示処理にコメントを追加
voluntas Jul 27, 2025
7d448db
DuckDB APIを正しく使用してクエリ結果を全件取得できるように修正する
voluntas Jul 27, 2025
212b44f
webrtc_logs_0を webrtc_logs_* に変更してすべてのWebRTCログファイルを無視する
voluntas Jul 27, 2025
ce0c4ce
リバースプロキシ使用時のCORSヘッダーを削除する
voluntas Jul 28, 2025
ea3fa39
Windowsサポートを削除し、boost::urlの使用を一時的に回避
voluntas Jul 28, 2025
d87b400
DuckDBの静的ライブラリからダイナミックライブラリに切り替える
voluntas Jul 28, 2025
e959777
DuckDB C++ APIからC APIへの移行
voluntas Jul 28, 2025
39c2a69
Merge branch 'develop' into feature/add-duckdb
voluntas Jul 28, 2025
9b5974d
APIエンドポイントをJSON-RPC 2.0に移行
voluntas Jul 28, 2025
6854f71
DuckDB C APIへの移行を完了し、RTC統計情報の保存を実装
voluntas Jul 28, 2025
3b1bae0
DuckDB RTC統計情報の書き込み時にトランザクション管理を追加
voluntas Jul 28, 2025
dc061c8
JSON-RPCクエリレスポンスをシンプル化
voluntas Jul 28, 2025
b3becf6
DuckDBユーティリティクラスを追加し、RAIIパターンでリソース管理を改善する
voluntas Jul 28, 2025
9193772
HTTPサーバー起動時のログメッセージにURLを追加する
voluntas Jul 29, 2025
5f64f60
DuckDB統計情報挿入成功時のログ出力を削除する
voluntas Jul 29, 2025
b9245fa
未使用のFindDuckDB.cmakeを削除する
voluntas Jul 29, 2025
8106750
Merge branch 'develop' into feature/add-duckdb
voluntas Jul 31, 2025
0e2b87a
DuckDB統計情報挿入処理をPrepared Statementsに置き換える
voluntas Jul 31, 2025
954a60d
DuckDBStatsWriterの正常系INFOログを削減
voluntas Jul 31, 2025
0e808ef
WriteRTCStatsメソッドから不要なトランザクションを削除
voluntas Jul 31, 2025
335793c
エラーハンドリングを改善しRAIIパターンを活用
voluntas Jul 31, 2025
86393a9
DuckDBStatsWriterのリソース管理をRAIIパターンで改善する
voluntas Jul 31, 2025
db6a3ce
ExecuteQueryメソッドのメモリ効率を改善する
voluntas Jul 31, 2025
7635d42
DuckDBStatsWriterの改善
voluntas Jul 31, 2025
7066d20
テンプレートファイルのフォーマットエラーを修正
voluntas Jul 31, 2025
a0e862b
DuckDBStatsWriterのパフォーマンスを改善
voluntas Jul 31, 2025
f2bdcc4
DuckDBStatsWriterの細かな改善
voluntas Jul 31, 2025
40a1058
CMakeテンプレートファイルのフォーマット問題を修正
voluntas Jul 31, 2025
3d4ad9d
DuckDBStatsWriterとduckdb_utilsのコードレビュー対応
voluntas Jul 31, 2025
91b7b86
全角と半角の間に半角スペースを入れることを追加する
voluntas Jul 31, 2025
f69c310
DuckDBStatsWriter のコードレビュー対応 (2)
voluntas Jul 31, 2025
74cb75f
Revert "DuckDBStatsWriter のコードレビュー対応 (2)"
voluntas Jul 31, 2025
7962d40
PreparedStatement のキャッシュを削除し毎回作成するように変更
voluntas Jul 31, 2025
012c825
.gitignore に yaml ファイルのパターンを追加する
voluntas Jul 31, 2025
ec16c74
qualityLimitationDurations の map 型からの値取得を修正
voluntas Jul 31, 2025
c3675c7
Merge branch 'develop' into feature/add-duckdb
voluntas Aug 1, 2025
3705ca1
RPC ドキュメントを追加して、JSON-RPC API のエンドポイントと利用可能なメソッドを説明する
voluntas Aug 1, 2025
1c89dcd
HTTP サーバーのコンストラクタにホスト引数を追加し、ポートとホストの設定を行うように修正する
voluntas Aug 1, 2025
03c5564
変更履歴を更新する
voluntas Aug 1, 2025
2fb0570
.clang-format-ignore ファイルを削除する
voluntas Aug 1, 2025
d57e38a
不要な INFO ログを削減する
voluntas Aug 1, 2025
aeeef6a
DuckDB スキーマドキュメントを追加する
voluntas Aug 1, 2025
f752af9
HTTP プロキシレスポンスボディのサイズチェックを追加し、10MB を超える場合はエラーを返すように修正する
voluntas Aug 1, 2025
83ad058
codec_stats テーブルへの挿入で TO_TIMESTAMP を CURRENT_TIMESTAMP に統一する
voluntas Aug 1, 2025
fc3ea8f
rtc_stats_timer_ の操作に適切なロックを追加し、タイマーのキャンセルと再設定時の競合状態を防ぐ
voluntas Aug 1, 2025
080ea13
DuckDB ファイル出力先ディレクトリ指定と出力無効化オプションを追加する
voluntas Aug 1, 2025
8d99634
OnDisconnect メソッドで rtc_stats_timer_ のキャンセル処理を追加する
voluntas Aug 1, 2025
9dc4763
HTTP プロキシに HTTPS サポートを追加する
voluntas Aug 1, 2025
88879ba
HTTP プロキシに HTTPS サポートを追加し、SSL/TLS 接続、証明書検証、SNI をサポートする。VirtualClient:…
voluntas Aug 1, 2025
da056bb
DuckDB に zakuro と zakuro_scenario テーブルを追加し、起動時の情報を記録する
voluntas Aug 3, 2025
a5a3060
DuckDB のテーブル名を単数形に変更し、WebRTC 統計テーブルに rtc_stats_ プレフィックスを追加する
voluntas Aug 3, 2025
3a718fb
W3C WebRTC API 仕様に従って remote-inbound-rtp、remote-outbound-rtp、data-cha…
voluntas Aug 3, 2025
0308f1b
DuckDB ファイルの拡張子を .ddb から .db に変更し、doc/DUCKDB.md を現在の実装に合わせて更新する
voluntas Aug 4, 2025
142bc08
DuckDB ファイル名のプレフィックスを zakuro_stats_ から zakuro_ に変更する
voluntas Aug 4, 2025
b08fdc5
DuckDB についてのセクションを追加し、テーブル名は単数形を採用することを明記する
voluntas Aug 4, 2025
ee7da92
WebRTC 統計情報の収集対象に remote-inbound-rtp、remote-outbound-rtp、data-channel…
voluntas Aug 4, 2025
00a9183
zakuro テーブルに start_timestamp と stop_timestamp を追加し、プロセスの実行時間を記録する
voluntas Aug 4, 2025
4b42dc7
doc/RPC.md を最新の実装に追従させる
voluntas Aug 4, 2025
eb22352
zakuro のバージョンを "2025.3.0-dev" から "2025.3.0-canary0" に変更し、RTP ストリームの統計…
voluntas Aug 4, 2025
9eacce8
不要な RTC_LOG(LS_INFO) ログを削除し、connection テーブルに role カラムを追加する
voluntas Aug 5, 2025
3ef1a8c
Merge branch 'develop' into feature/add-duckdb
voluntas Aug 20, 2025
3aabe00
Merge branch 'develop' into feature/add-duckdb
voluntas Aug 25, 2025
b13e980
Merge branch 'develop' into feature/add-duckdb
voluntas Aug 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,32 @@
zakuro
core
*.tar.gz
webrtc_logs_0
webrtc_logs_*
.DS_Store
*.swp
*.log

*.jsonc

/_package
/_source
/_build
/_install
/__pycache__
/__pycache__
*.pyc

# DuckDB

*.db
*.ddb
*.wal

# Claude

/.claude
CLAUDE.local.md


# yaml
*.yaml
*.yml
34 changes: 34 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,40 @@
- @voluntas
- [CHANGE] kuzushi 機能を削除する
- @voluntas
- [ADD] DuckDB を使用した WebRTC 統計情報の永続化機能を追加する
- 統計情報は `zakuro_YYYYMMDD_HHMMSS_mmm.db` 形式のファイルに保存される
- 対応済み WebRTC 統計情報
- `codec`
- `outbound-rtp`
- `inbound-rtp`
- @voluntas
- [ADD] ビルドシステムに DuckDB のダイナミックライブラリを追加する
- @voluntas
- [ADD] DuckDB ファイルの出力先ディレクトリを指定する `--duckdb-output-dir` オプションを追加する
- 指定しない場合はカレントディレクトリに出力される
- @voluntas
- [ADD] DuckDB への統計情報出力を無効化する `--no-duckdb-output` オプションを追加する
- @voluntas
- [ADD] HTTP サーバー機能を追加する
- `--http-port` オプションで HTTP サーバーを起動可能
- `none` を指定すると HTTP サーバーを起動しない
- デフォルトは `none`
- `--http-host` オプションで HTTP サーバーのバインドアドレスを指定可能
- デフォルトは `127.0.0.1`
- @voluntas
- [ADD] JSON-RPC 2.0 over HTTP/1.1 対応の `/rpc` エンドポイントを追加する
- `version` メソッドで Zakuro および関連ライブラリのバージョン情報を取得可能
- `query` メソッドで DuckDB に対する SQL クエリを実行可能
- @voluntas
- [ADD] 実験的に UI 機能を追加する
- `--ui-remote-url` オプションで UI の URL を設定可能
- デフォルトは <http://localhost:5173>
- @voluntas
- [ADD] HTTP プロキシに HTTPS サポートを追加する
- SSL/TLS 接続、証明書検証、SNI をサポート
- @voluntas
- [FIX] VirtualClient::OnDisconnect で rtc_stats_timer_ のキャンセル処理が欠落していた問題を修正する
- @voluntas

### misc

Expand Down
17 changes: 16 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# CLAUDE.md

- Premature Optimization is the Root of All Evil
- 一切忖度しないこと
- 常に日本語を利用すること
- 全角と半角の間には半角スペースを入れること

## レビューについて

Expand All @@ -13,4 +15,17 @@
- レビューの表現は、指摘内容を優先順位をつけること
- レビューの表現は、指摘内容を優先順位をつけて、重要なものから順に記載すること
- ドキュメントは別に書いているので、ドキュメトに付いては考慮しないこと
- 変更点とリリースノートの整合性を確認すること
- 変更点とリリースノートの整合性を確認すること

## ビルドについて

- Ubuntu x86_64 / arm64 または macOS arm64 をターゲットとすること
- ビルドエラーは無視しないこと
- ビルドは `python3 run.py <ubuntu-22.04_x86_64|ubuntu-24.04_x86_64|macos_arm64>` で行うこと
- 利用しているアーキテクチャを指定すること
- クリーンは `git clean -ffdx -e libopenh264-*-mac-arm64.dylib -e CLAUDE* -e .claude/*` で行うこと

## DuckDB について

- テーブル名は単数形を採用すること
- 変更点とリリースノートの整合性を確認すること
44 changes: 42 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 3.23)

# Only interpret if() arguments as variables or keywords when unquoted.
cmake_policy(SET CMP0054 NEW)
# MSVC runtime library flags are selected by an abstraction.
cmake_policy(SET CMP0091 NEW)

project(zakuro C CXX)

Expand All @@ -20,22 +18,45 @@ find_package(Threads REQUIRED)
find_package(Blend2D REQUIRED)
find_package(CLI11 REQUIRED)

# DuckDB を手動で設定(システムのライブラリを使わないため)
set(DuckDB_INCLUDE_DIRS ${DUCKDB_ROOT_DIR}/include)

# プラットフォーム別のダイナミックライブラリ設定
if(ZAKURO_PLATFORM STREQUAL "macos_arm64")
# macOSの場合は .dylib
set(DuckDB_LIBRARIES ${DUCKDB_ROOT_DIR}/lib/libduckdb.dylib)
elseif(ZAKURO_PLATFORM STREQUAL "ubuntu-22.04_x86_64" OR ZAKURO_PLATFORM STREQUAL "ubuntu-24.04_x86_64")
# Linuxの場合は .so
set(DuckDB_LIBRARIES ${DUCKDB_ROOT_DIR}/lib/libduckdb.so)
else()
message(FATAL_ERROR "Unsupported platform for DuckDB: ${ZAKURO_PLATFORM}")
endif()

add_executable(zakuro)

set_target_properties(zakuro PROPERTIES CXX_STANDARD 17 C_STANDARD 17)
set_target_properties(zakuro PROPERTIES POSITION_INDEPENDENT_CODE ON)

# RPATH設定
set_target_properties(zakuro PROPERTIES BUILD_RPATH_USE_ORIGIN ON)

string(SUBSTRING "${ZAKURO_COMMIT}" 0 8 ZAKURO_COMMIT_SHORT)
string(SUBSTRING "${WEBRTC_COMMIT}" 0 8 WEBRTC_COMMIT_SHORT)
configure_file(src/zakuro_version.gen.h.template ${CMAKE_CURRENT_BINARY_DIR}/zakuro_version.gen.h)
target_include_directories(zakuro PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
# OpenH264
target_include_directories(zakuro PRIVATE ${OPENH264_ROOT_DIR}/include)
# DuckDB
target_include_directories(zakuro PRIVATE ${DuckDB_INCLUDE_DIRS})

target_sources(zakuro
PRIVATE
src/duckdb_stats_writer.cpp
src/duckdb_utils.cpp
src/embedded_binary.cpp
src/fake_video_capturer.cpp
src/http_server.cpp
src/json_rpc.cpp
src/main.cpp
src/nop_video_decoder.cpp
src/util.cpp
Expand All @@ -55,8 +76,15 @@ target_link_libraries(zakuro
Boost::filesystem
CLI11::CLI11
Blend2D::Blend2D
${DuckDB_LIBRARIES}
)


# Ubuntu 24.04 での追加のリンクオプション
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(zakuro PRIVATE pthread dl)
endif()

target_compile_definitions(zakuro
PRIVATE
# CLI11 は C++17 でのビルドにおいて std::filesystem を利用するが、これを clang で解決するには c++fs のリンクが必要になる。
Expand Down Expand Up @@ -176,6 +204,18 @@ if (ZAKURO_PLATFORM STREQUAL "macos_arm64")
target_compile_options(zakuro PRIVATE -fconstant-string-class=NSConstantString)
target_link_options(zakuro PRIVATE -ObjC)
set_target_properties(zakuro PROPERTIES CXX_VISIBILITY_PRESET hidden)
# DuckDBダイナミックライブラリのRPATH設定
set_target_properties(zakuro PROPERTIES
BUILD_RPATH_USE_ORIGIN ON
INSTALL_RPATH "@executable_path"
BUILD_WITH_INSTALL_RPATH TRUE
)

elseif (ZAKURO_PLATFORM STREQUAL "ubuntu-20.04_x86_64" OR ZAKURO_PLATFORM STREQUAL "ubuntu-22.04_x86_64" OR ZAKURO_PLATFORM STREQUAL "ubuntu-24.04_x86_64")
# LinuxでのRPATH設定
set_target_properties(zakuro PROPERTIES
BUILD_RPATH_USE_ORIGIN ON
INSTALL_RPATH "$ORIGIN"
BUILD_WITH_INSTALL_RPATH TRUE
)
endif()
1 change: 1 addition & 0 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ CMAKE_VERSION=4.0.3
BLEND2D_VERSION=0.12.0
BLEND2D_SHA256_HASH=8d2f9466451fc0e464bf67edef34c28391a5bf57d26d684453a03d1a1a5b2730
OPENH264_VERSION=v2.6.0
DUCKDB_VERSION=v1.3.2
44 changes: 44 additions & 0 deletions buildbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -2150,6 +2150,50 @@ def install_aom(version, source_dir, build_dir, install_dir, configuration, cmak
cmd(["cmake", "--install", aom_build_dir])


@versioned
def install_duckdb(version, source_dir, install_dir, platform):
duckdb_install_dir = os.path.join(install_dir, "duckdb")
rm_rf(duckdb_install_dir)
mkdir_p(duckdb_install_dir)

# プラットフォーム別のダウンロードURL(ダイナミックライブラリ)
if platform == "macos_arm64":
# macOS用のuniversalバイナリを使用
url = f"https://github.com/duckdb/duckdb/releases/download/{version}/libduckdb-osx-universal.zip"
elif platform in ("ubuntu-22.04_x86_64", "ubuntu-24.04_x86_64"):
url = f"https://github.com/duckdb/duckdb/releases/download/{version}/libduckdb-linux-amd64.zip"
else:
raise Exception(f"Unsupported platform for DuckDB: {platform}")

# ダウンロードと展開
path = download(url, source_dir)
with cd(duckdb_install_dir):
cmd(["unzip", "-q", path])

# ディレクトリ構造を整理
# include ディレクトリを作成してヘッダーファイルを移動
include_dir = os.path.join(duckdb_install_dir, "include")
mkdir_p(include_dir)

# ヘッダーファイルを移動(C APIのヘッダーのみ)
if os.path.exists(os.path.join(duckdb_install_dir, "duckdb.h")):
shutil.move(os.path.join(duckdb_install_dir, "duckdb.h"), include_dir)

# lib ディレクトリを作成してライブラリファイルを移動
lib_dir = os.path.join(duckdb_install_dir, "lib")
mkdir_p(lib_dir)

# ダイナミックライブラリファイルを移動
if platform == "macos_arm64":
# macOSの場合は .dylib ファイル
for lib_file in glob.glob(os.path.join(duckdb_install_dir, "*.dylib")):
shutil.move(lib_file, lib_dir)
elif platform in ("ubuntu-22.04_x86_64", "ubuntu-24.04_x86_64"):
# Linuxの場合は .so ファイル
for lib_file in glob.glob(os.path.join(duckdb_install_dir, "*.so")):
shutil.move(lib_file, lib_dir)


class PlatformTarget(object):
def __init__(self, os, osver, arch, extra=None):
self.os = os
Expand Down
Loading
Loading