From 1bbc9e61824e18df2f17b82be77f12a0a358420d Mon Sep 17 00:00:00 2001 From: misyaguziya <53165965+misyaguziya@users.noreply.github.com> Date: Fri, 9 Jan 2026 23:49:39 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=83=86=E3=83=AC=E3=83=A1=E3=83=88?= =?UTF-8?q?=E3=83=AA=E8=A8=AD=E5=AE=9A=E3=81=AE=E3=83=97=E3=83=AD=E3=83=91?= =?UTF-8?q?=E3=83=86=E3=82=A3=E5=90=8D=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97?= =?UTF-8?q?=E3=80=81API=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=83=86=E3=83=AC=E3=83=A1=E3=83=88=E3=83=AA=E3=81=AE=E6=9C=89?= =?UTF-8?q?=E5=8A=B9=E5=8C=96/=E7=84=A1=E5=8A=B9=E5=8C=96=E3=82=92?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-python/config.py | 4 ++-- src-python/controller.py | 25 ++++++++++++++++++++++++- src-python/docs/telemetry_design.md | 18 +++++++++--------- src-python/mainloop.py | 3 +++ src-python/model.py | 7 +++++-- 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src-python/config.py b/src-python/config.py index f34f4580..db28f83b 100644 --- a/src-python/config.py +++ b/src-python/config.py @@ -726,7 +726,7 @@ class Config: WEBSOCKET_PORT = ManagedProperty('WEBSOCKET_PORT', type_=int) # --- Telemetry Settings --- - TELEMETRY_ENABLED = ManagedProperty('TELEMETRY_ENABLED', type_=bool) + ENABLE_TELEMETRY = ManagedProperty('ENABLE_TELEMETRY', type_=bool) # --- Selection properties with validation (ManagedProperty) --- SELECTED_TAB_NO = ManagedProperty('SELECTED_TAB_NO', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_TAB_NO_LIST) @@ -1027,7 +1027,7 @@ class Config: self._WEBSOCKET_PORT = 2231 ## Telemetry - self._TELEMETRY_ENABLED = True # デフォルト有効 + self._ENABLE_TELEMETRY = True # デフォルト有効 def load_config(self): if os_path.isfile(self.PATH_CONFIG) is not False: diff --git a/src-python/controller.py b/src-python/controller.py index c2674851..372a0292 100644 --- a/src-python/controller.py +++ b/src-python/controller.py @@ -56,7 +56,7 @@ class Controller: dict with status 200 and result True on success. """ try: - model.shutdown() + model.telemetryShutdown() return {"status": 200, "result": True} except Exception: errorLogging() @@ -2595,6 +2595,24 @@ class Controller: model.updateOverlayLargeLog(overlay_image) return {"status":200, "result":data} + @staticmethod + def getTelemetry(*args, **kwargs) -> dict: + return {"status":200, "result":config.ENABLE_TELEMETRY} + + @staticmethod + def setEnableTelemetry(*args, **kwargs) -> dict: + if config.ENABLE_TELEMETRY is False: + config.ENABLE_TELEMETRY = True + model.telemetryInit(enabled=config.ENABLE_TELEMETRY, app_version=config.VERSION) + return {"status":200, "result":config.ENABLE_TELEMETRY} + + @staticmethod + def setDisableTelemetry(*args, **kwargs) -> dict: + if config.ENABLE_TELEMETRY is True: + config.ENABLE_TELEMETRY = False + model.telemetryShutdown() + return {"status":200, "result":config.ENABLE_TELEMETRY} + def swapYourLanguageAndTargetLanguage(self, *args, **kwargs) -> dict: your_languages = config.SELECTED_YOUR_LANGUAGES your_language_temp = your_languages[config.SELECTED_TAB_NO]["1"] @@ -3457,6 +3475,11 @@ class Controller: printLog("Revalidate Selected Models") config.revalidate_selected_models() + # telemetry Init + printLog("Telemetry Init") + if config.ENABLE_TELEMETRY is True: + model.telemetryInit(enabled=config.ENABLE_TELEMETRY, app_version=config.VERSION) + # Update Settings printLog("Update settings") self.updateConfigSettings() diff --git a/src-python/docs/telemetry_design.md b/src-python/docs/telemetry_design.md index 95dcd6e6..9b12ebd0 100644 --- a/src-python/docs/telemetry_design.md +++ b/src-python/docs/telemetry_design.md @@ -36,7 +36,7 @@ VRCT の **匿名な使用状況** を取得し、プロダクトの改善に役 | 項目 | 方針 | |------|------| -| **デフォルト状態** | 有効(`telemetry_enabled = true`) | +| **デフォルト状態** | 有効(`ENABLE_TELEMETRY = true`) | | **ユーザー制御** | 設定から任意で無効化可能 | | **無効時の動作** | 一切の通信・スレッド・処理を停止 | | **送信内容** | イベント名と固定属性のみ | @@ -164,9 +164,9 @@ Timeline: ``` 1. アプリ起動 ↓ -2. config.json から telemetry_enabled 読込 +2. config.json から ENABLE_TELEMETRY 読込 ↓ -3. telemetry.init(enabled=config.telemetry_enabled) +3. telemetry.init(enabled=config.ENABLE_TELEMETRY) ├─ enabled=True の場合 │ ├─ Aptabase SDK 初期化 │ ├─ heartbeat スレッド開始 @@ -180,7 +180,7 @@ Timeline: ``` 操作発生(翻訳/ASR/テキスト入力) ↓ -telemetry_enabled チェック +ENABLE_TELEMETRY チェック ├─ False → 何もしない └─ True ↓ @@ -217,7 +217,7 @@ telemetry.init(enabled=True) ``` config.json 更新 ↓ -telemetry_enabled: false に変更 +ENABLE_TELEMETRY: false に変更 ↓ telemetry.shutdown() ├─ heartbeat スレッド停止 @@ -383,7 +383,7 @@ class Model: # Telemetry 初期化 try: - telemetry.init(enabled=config.TELEMETRY_ENABLED) + telemetry.init(enabled=config.ENABLE_TELEMETRY) except Exception: errorLogging() @@ -1073,11 +1073,11 @@ def test_full_flow(): ```python # config.py 修正 -TELEMETRY_ENABLED = True # デフォルト有効 +ENABLE_TELEMETRY = True # デフォルト有効 # config.json への保存 { - "telemetry_enabled": true + "ENABLE_TELEMETRY": true } ``` @@ -1122,7 +1122,7 @@ UI に以下を表示: | 1 | `__init__.py`, `state.py` 作成 | 高 | | 2 | `client.py`, `core.py` 作成 | 高 | | 3 | `heartbeat.py` 作成・テスト | 高 | -| 4 | `config.py` に `telemetry_enabled` 追加 | 高 | +| 4 | `config.py` に `ENABLE_TELEMETRY` 追加 | 高 | | 5 | `controller.py` に API 呼び出し追加 | 高 | | 6 | `mainloop.py` に init/shutdown 追加 | 高 | | 7 | ユニット・統合テスト | 高 | diff --git a/src-python/mainloop.py b/src-python/mainloop.py index 6f7fc1b8..8ad4ee66 100644 --- a/src-python/mainloop.py +++ b/src-python/mainloop.py @@ -129,6 +129,9 @@ mapping = { "/run/send_text_overlay": {"status": True, "variable":controller.sendTextOverlay}, + "/get/data/telemetry" : {"status": True, "variable":controller.getTelemetry}, + "/set/enable/telemetry" : {"status": True, "variable":controller.setEnableTelemetry}, + "/set/disable/telemetry" : {"status": True, "variable":controller.setDisableTelemetry}, "/run/shutdown": {"status": True, "variable":controller.shutdown}, "/run/swap_your_language_and_target_language": {"status": True, "variable":controller.swapYourLanguageAndTargetLanguage}, diff --git a/src-python/model.py b/src-python/model.py index 51ddf876..0012e077 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -144,7 +144,6 @@ class Model: # Telemetry 初期化(Model 内でインスタンスを保持) self.telemetry = Telemetry() - self.telemetry.init(enabled=config.TELEMETRY_ENABLED, app_version=config.VERSION) self._inited = True @@ -1297,7 +1296,11 @@ class Model: errorLogging() return False - def shutdown(self): + def telemetryInit(self, enabled: bool, app_version: str): + """Model 内で Telemetry を初期化""" + self.telemetry.init(enabled=enabled, app_version=app_version) + + def telemetryShutdown(self): """Model cleanup on application shutdown.""" # Telemetry 終了(app_closed 送信) if hasattr(self, "telemetry") and self.telemetry: