診斷持續性服務

Fuchsia 診斷持續服務會在裝置重新啟動時保留「診斷」資料。

運作方式

服務觸發時,持續性會讀取診斷資料集,並將資料儲存至磁碟。持續性會在下次啟動時,在其檢查階層中發布儲存的資料。

持續性是由設定檔中的項目所設定。每個項目都會指定服務名稱、該服務中的標記,以及一組選取器。服務名稱會設定 FIDL 服務。

保留資料的要求將由 FIDL 傳送至保留狀態,要求保留該標記的選取器。沒有定期取樣。每則訊息都包含一個標記。

每個標記受到以下限制:大小有上限,且固定率會節流。

如果要求太快送達,就會延後到輪詢失效為止。系統會將在輪詢期間內收到的多項要求合併為一個要求。

如果要求的選取器擷取過多資料,則會儲存錯誤字串,進而覆寫該要求先前儲存的所有資料。

如何使用「持續性」功能

如要保留並發布資料,請按照下列步驟操作:

定義資料

決定要保留哪些資料。如果該檔案尚未寫入檢查,請新增程式碼來發布。請注意,保留可能會在要求送出後的一段時間 (尤其是在啟用時間輪詢的情況下) 擷取資料。

將資料加入許可清單

永久讀取 FeedbackArchiveAccessor 的內容,因此您需要將該管道的設定檔加入許可清單中,將檢查資料加入許可清單。

設定永久性

將檔案放入 //src/diagnostics/config/persistence 或 //vendor/*/diagnostics/config/persistence。 檔案的名稱必須為 *.persist。將檔案新增至 BUILD.gn 中的 keepence_files。

.persist 檔案採用 JSON5 格式。每個檔案都含有物件陣列。每個物件都具備下列結構定義:

{
        tag: 'any-name-you-like', // lowercase and hyphens only
        service_name: 'service-name', // lowercase and hyphens only
        max_bytes: 1000, // limit on size of JSON-format data persisted
        min_seconds_between_fetch: 60, // limit on frequency
        selectors: [
            'INSPECT:core/component:root/path:leaf_name',
            'INSPECT:core/component:root/*:another_leaf',
        ],
},

所有欄位均為必填。您可以從任何元件擷取資料,但只有將服務轉送至該元件的元件才能要求擷取。

每項服務的標記名稱不得重複。設定檔名稱為任意名稱,但設定目錄之間不得重複。

取得隱私權核准

隱私權需要審查永久設定。如要取得評論

  • 取得 CL +2
  • 將 cphoenix@ 和 miguelfrde@ 新增至 CL。
  • 我們會 +1 CL,並將隱私權團隊新增到 CL。
  • 隱私權相關人士將 +2 CL (或提出疑慮)。
  • CLS 因隱私權而 +2 (可能需要約一週) 後,系統就會顯示 OWNERS 的核准,供您提交。

轉送及使用服務

每個服務名稱都會發布為 fuchsia.diagnostics.persist.DataPersistence-service-name。這個元件必須轉送至會使用該服務定義的標記的任何元件。

該服務的 FIDL 通訊協定位於 //src/diagnostics/persistence/fidl/persist.fidl。函式呼叫

protocol DataPersistence {
    Persist(string:MAX_NAME_SIZE tag) -> (PersistResult result);
};

想要的結果為 PersistResult::QUEUED

使用已發布的資料

下次啟動時,系統會將儲存的資料在延遲 (目前為 120 秒) 後發布至檢查項目。

如果 INSPECT:core/test_component:root/path:number 選取器具有 my-service 服務和 my-tag 標記,則資料可在 core/diagnostics-persistence:root/persist/my-service/my-tag/core\test_component/root/path:number 下方找到。