通訊協定
ComponentDataRegister
定義於 fuchsia.feedback/data_register.fidl
註冊可附加在意見回饋報告 (當機、使用者意見回饋或錯誤報告) 中的實用資料。
元件可使用這項功能,擴充所有意見回饋報表附加的資料。根據預設,意見回饋服務會附加向平台公開的資料。如果某些產品中的特定元件知道資料,但未向平台公開,這個通訊協定就很有用。
ZX_ERR_INVALID_ARGS 墓誌銘表示用戶端傳送的要求無效。請參閱下方說明,瞭解各項要求可能無效的原因。
ZX_ERR_NO_RESOURCES 墓誌銘表示伺服器無法再儲存其他元件資料,且不會為新連線提供服務。
新增或更新
更新或插入要納入意見回饋報告的額外元件資料。
系統會根據命名空間和每個註解鍵,決定要更新或插入註解。如果相同命名空間中的指定鍵已有註解,請更新值,否則請在該命名空間下插入具有該鍵的註解。
舉例來說,假設伺服器已保留這些資料 (來自先前對 Upsert() 的呼叫):
{
"bar": { # namespace
"channel": "stable",
},
"foo": { # namespace
"version": "0.2",
}
}
接著:
Upsert({
"namespace": "bar",
"annotations": [
"version": "1.2.3.45",
"channel": "beta",
]
})
伺服器現在會保留:
{
"bar": { # namespace
"channel": "beta", # updated
"version": "1.2.3.45" # inserted
},
"foo": { # namespace
"version": "0.2", # untouched
}
}
請注意,伺服器每個命名空間最多只會保留 MAX_NUM_ANNOTATIONS_PER_NAMESPACE 個不同的註解鍵,並會挑選最新值。
要求
| 名稱 | 類型 |
|---|---|
data |
ComponentData
|
回應
<EMPTY>
CrashReporter
定義於 fuchsia.feedback/crash_reporter.fidl
提供提交當機報告的功能。
FileReport
提交當機 report,並提供作業的最終結果。
這可能代表在本機當機報告資料庫中產生當機報告,或將當機報告上傳至遠端當機伺服器,具體取決於 FIDL 伺服器的設定。
警告:這項作業可能需要幾分鐘才能完成。不建議以同步方式呼叫這個函式。
要求
| 名稱 | 類型 |
|---|---|
report |
CrashReport
|
回應
| 名稱 | 類型 |
|---|---|
payload |
CrashReporter_FileReport_Result
|
CrashReportingProductRegister
定義於 fuchsia.feedback/crash_register.fidl
允許元件選擇不同的當機回報產品,以便回報該元件的當機情形。
根據預設,平台偵測到的所有當機事件都會歸入當機伺服器上的單一產品。這個 API 可讓元件選擇自己的產品,同時仍可受益於平台的例外狀況處理和當機回報功能。
新增或更新
更新或插入指定元件網址的當機回報產品。
如果後續對同一個元件網址呼叫 Upsert(),系統會覆寫該元件的 CrashReportingProduct。
如果元件本身也會提交當機報告,建議使用 UpsertWithAck(),避免競爭狀況和歸因錯誤。
要求
| 名稱 | 類型 |
|---|---|
component_url |
string:2083
|
product |
CrashReportingProduct
|
UpsertWithAck
執行 upsert 作業 (請參閱上文),並在作業完成時通知用戶端。
這樣一來,用戶端就能避免在提交當機報告和呼叫 Upsert 之間發生競爭。否則,如果在 upsert 完成前提交當機報告,當機報告會歸因於錯誤的產品,可能導致當機資料不正確。
要求
| 名稱 | 類型 |
|---|---|
component_url |
string:2083
|
product |
CrashReportingProduct
|
回應
<EMPTY>
DataProvider
定義於 fuchsia.feedback/data_provider.fidl
提供可附加至意見回饋報告的實用資料,例如系統提交的當機報告、使用者提交的使用者意見回饋報告,或開發人員提交的錯誤報告。
GetAnnotations
傳回一組裝置狀態的註解。
如果收集時發生問題,annotations 可能會空白。
這些註解與 GetSnapshot() 提供的註解相同,有些用戶端只需要註解,有些則需要註解和快照,而產生快照所需的時間可能比收集註解的時間長得多,例如記錄檔只是快照的一部分,而不是註解的一部分,可能需要一些時間。
要求
| 名稱 | 類型 |
|---|---|
params |
GetAnnotationsParameters
|
回應
| 名稱 | 類型 |
|---|---|
annotations |
Annotations
|
GetSnapshot
傳回裝置狀態的快照。
如果生成快照時發生問題,snapshot 可能會空白。
要求
| 名稱 | 類型 |
|---|---|
params |
GetSnapshotParameters
|
回應
| 名稱 | 類型 |
|---|---|
snapshot |
Snapshot
|
DeviceIdProvider
定義於 fuchsia.feedback/device_id_provider.fidl
提供裝置的意見回饋 ID。
意見回饋 ID 是永久 UUID,用於將意見回饋報告分組。這個 ID 僅用於意見回饋,不適用於其他報表用途,例如遙測。
GetId
傳回裝置的回饋 ID。
這個方法採用 hanging-get 模式,只有在上次呼叫後 ID 有所變更時,才會傳回值。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
feedback_id |
string:64
|
LastRebootInfoProvider
定義於 fuchsia.feedback/last_reboot_info.fidl
瞭解裝置上次關機的原因。由於許多開發人員會以重新啟動來詢問關機問題,且大多數元件都想知道系統重新啟動的原因,因此我們使用重新啟動一詞,而非關機。
取得
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
last_reboot |
LastReboot
|
STRUCTS
註解
定義於 fuchsia.feedback/annotation.fidl
註解及其純 ASCII 字串索引鍵。註解是簡短字串,例如主機板名稱或建構版本。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
key |
string:128
|
無預設值 | |
value |
string:1024
|
無預設值 |
附件資源
定義於 fuchsia.feedback/attachment.fidl
附件及其純 ASCII 字串鍵。附件是較大的物件,例如記錄檔。可以是二進位或文字資料。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
key |
string:128
|
無預設值 | |
value |
fuchsia.mem/Buffer
|
無預設值 |
CrashReporter_FileReport_Response
定義於 fuchsia.feedback/crash_reporter.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
results |
FileReportResults
|
無預設值 |
列舉
FilingError 彈性
類型:uint32
定義於 fuchsia.feedback/crash_reporter.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
不明 |
0 |
|
INVALID_ARGS_ERROR |
1 |
|
SERVER_ERROR |
2 |
|
PERSISTENCE_ERROR |
3 |
|
QUOTA_REACHED_ERROR |
4 |
FilingSuccess 彈性
類型:uint32
定義於 fuchsia.feedback/crash_reporter.fidl
「記憶體」是指非永久位置,例如記憶體支援的檔案系統。
| 名稱 | 值 | 說明 |
|---|---|---|
不明 |
0 |
|
REPORT_UPLOADED |
1 |
|
REPORT_ON_DISK |
2 |
|
REPORT_IN_MEMORY |
3 |
|
REPORT_NOT_FILED_USER_OPTED_OUT |
4 |
RebootReason 彈性
類型:uint16
定義於 fuchsia.feedback/last_reboot_info.fidl
裝置上次重新啟動的原因。
| 名稱 | 值 | 說明 |
|---|---|---|
不明 |
0 |
如果伺服器傳送了用戶端未編譯的新列舉值,用戶端就會取得這個值。 新增:9
|
COLD |
2 |
裝置從冷啟動狀態啟動。 這很可能是因為裝置長時間未通電,或首次使用 Fuchsia 啟動。 |
BRIEF_POWER_LOSS |
3 |
裝置因短暫斷電而重新啟動。 在某些硬體上,這可能是因為使用者快速連續拔除並重新連接裝置的電源。 |
BROWNOUT |
4 |
裝置電壓低於允許值,但未降至 0,因此重新啟動。 |
KERNEL_PANIC |
5 |
|
SYSTEM_OUT_OF_MEMORY |
6 |
|
HARDWARE_WATCHDOG_TIMEOUT |
7 |
|
SOFTWARE_WATCHDOG_TIMEOUT |
8 |
|
ROOT_JOB_TERMINATION |
19 |
使用者空間根工作終止,因此裝置重新啟動,這很可能是因為其中一項重要程序異常終止。 |
USER_HARD_RESET |
28 |
使用者刻意按住電源鍵,強制重設裝置,因此裝置重新啟動。 新增:31
|
USER_REQUEST |
9 |
裝置使用者啟動重新啟動程序,因此裝置已重新啟動。 請勿用於任何與使用者明確重新啟動動作無直接關聯的程式碼路徑。請改用下方的 DEVELOPER_REQUEST。 |
USER_REQUEST_DEVICE_STUCK |
26 |
裝置因當機而由使用者重新啟動。 新增:31
|
DEVELOPER_REQUEST |
22 |
開發人員啟動重新啟動程序,通常是透過殼層指令或類似介面 (包括在自動化測試中),因此裝置重新啟動。 新增:28
|
RETRY_SYSTEM_UPDATE |
17 |
套用 OTA 失敗,因此裝置重新啟動,我們想重試。 |
HIGH_TEMPERATURE |
11 |
系統判定裝置過熱,因此重新啟動。 |
SESSION_FAILURE |
12 |
裝置因工作階段問題而重新啟動,或工作階段管理員無法從錯誤中復原。 |
SYSMGR_FAILURE |
15 |
系統管理員 (sysmgr) 無法從錯誤中復原,因此裝置重新啟動。 |
FACTORY_DATA_RESET |
14 |
裝置已恢復原廠設定並重新啟動。 請參閱 fuchsia.recovery.FactoryReset。 |
CRITICAL_COMPONENT_FAILURE |
16 |
sysmgr 管理的重要元件故障,因此裝置重新啟動。 |
ZBI_SWAP |
18 |
裝置已重新啟動,套用 Zircon 開機映像檔的切換。 |
ANDROID_UNEXPECTED_REASON |
21 |
Starnix 無法辨識 Android 啟動重新啟動的原因。 新增:28
|
ANDROID_NO_REASON |
25 |
Android 啟動關機程序,但 Starnix 不知道原因。 新增:30
|
ANDROID_RESCUE_PARTY |
23 |
Android 呼叫「RescueParty」,因此裝置重新啟動。 新增:29
|
ANDROID_CRITICAL_PROCESS_FAILURE |
24 |
Android 的其中一項重要程序失敗,因此裝置重新啟動。 新增:29
|
BATTERY_DRAINED |
27 |
裝置電池電量耗盡。 新增:31
|
SUSPENSION_FAILURE |
29 |
系統無法在預期時間內暫停或恢復。 新增:32
|
CRITICAL_DRIVER_FAILURE |
30 |
重要驅動程式庫故障,導致裝置重新啟動。 新增:HEAD
|
SYSTEM_UPDATE |
10 |
裝置因 OTA 重新啟動。 |
NETSTACK_MIGRATION |
20 |
Netstack 元件正在變更版本。 移除:NEXT 新增:26
|
ShutdownAction 彈性
類型:uint32
定義於 fuchsia.feedback/last_reboot_info.fidl
裝置上次關機的方式。
| 名稱 | 值 | 說明 |
|---|---|---|
POWEROFF |
1 |
|
重新啟動 |
2 |
|
REBOOT_TO_RECOVERY |
3 |
|
REBOOT_TO_BOOTLOADER |
4 |
TABLES
註解
定義於 fuchsia.feedback/data_provider.fidl
裝置狀態的註解。
客戶通常會直接將資料上傳到伺服器。因此,資料會以任意鍵/值組合的形式傳送,用戶端可以直接轉送至伺服器。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
2 |
annotations2 |
vector<Annotation>:512
|
鍵/值字串組合的向量。鍵保證不重複。 新增:25
|
ComponentData
定義於 fuchsia.feedback/data_register.fidl
元件已知但未向平台公開的資料,可附加至意見回饋報告。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
namespace |
string:32
|
與資料相關聯的頂層命名空間:
|
2 |
annotations |
vector<Annotation>:16
|
鍵/值字串組合的向量,例如 金鑰:
|
CrashReport 資源
定義於 fuchsia.feedback/crash_reporter.fidl
代表當機報告。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
program_name |
string:1024
|
當機程式的名稱,例如程序或元件的名稱。 在內部,程式名稱用於在無法立即上傳報告時保留報告。因此,當做檔案系統路徑使用時,系統會進行清理,例如移除任何 fuchsia-pkg:// 前置字元。如果經過清理的程式名稱為下列任一項,系統會傳回 ZX_ERR_INVALID_ARGS:
|
2 |
specific_report |
SpecificCrashReport
|
特定報表,取決於當機類型。 如需傳送當機程式的其他資訊 (例如小型傾印),請設定這個欄位。 |
3 |
annotations |
vector<Annotation>:32
|
鍵/值字串組合的向量,代表應附加至當機報告的任意資料。 鍵不得重複,因為系統只會考量向量中指定鍵的最新值。 |
4 |
attachments |
vector<Attachment>:16
|
鍵/值字串對 VMO 配對的向量,代表應附加至當機報告的任意資料。 鍵不得重複,因為系統只會考量向量中指定鍵的最新值。 如果符合下列任一情況,系統會傳回 ZX_ERR_INVALID_ARGS:
|
5 |
event_id |
string:128
|
當機伺服器可使用的文字 ID,用於將與同一事件相關的多個當機報告分組。 與當機簽章不同,共用相同 ID 的當機報告對應到不同的當機,但可以視為屬於同一個事件,例如低層級伺服器當機導致高層級 UI 小工具當機。 |
6 |
program_uptime |
zx/Duration
|
程式在當機前執行的時間。 |
7 |
crash_signature |
string:128
|
當機伺服器可用來追蹤相同異常終止情形的文字簽章,例如「核心錯誤」或「記憶體不足」。這個簽章的優先順序高於從其餘資料衍生的任何自動簽章。 與事件 ID 不同,共用相同簽章的當機報告對應到相同的當機,但發生在多個事件中,例如,每當伺服器收到相同要求時,就會發生空值指標例外狀況。 必須符合 [a-z][a-z-]*,也就是只能使用小寫英文字母和連字號,否則會導致 ZX_ERR_INVALID_ARGS 墓誌銘。 |
8 |
is_fatal |
bool
|
指出當機報告是否針對執行中程序、元件或系統本身的非典型停止。 以下是會導致嚴重當機報告的事件範例:
以下是會產生非致命當機報告的事件示例:
這個欄位主要用於將當機情形分為致命、非致命和未知,分別對應到設為 true、設為 false 或未設定的欄位。 |
9 |
weight |
uint32
|
選用。用於表示這份報告不只代表這個當機例項。舉例來說,如果選擇每 10 個這類當機事件只回報 1 個,則應將這個欄位設為 10。 如未設定這個欄位,則會使用權重 1。明確設定的值為 0 則無效,系統會拒絕。 新增:28
|
CrashReportingProduct
定義於 fuchsia.feedback/crash_register.fidl
要回報給當機伺服器的產品資訊。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
name |
string
|
當機伺服器上的產品名稱。
|
2 |
version |
string
|
元件的產品版本 (選用)。
如未指定版本,則不會向當機伺服器回報任何版本。 |
3 |
channel |
string
|
元件的選用產品發布管道,例如「canary」、「beta」、「stable」。 如未指定,就不會向當機伺服器回報任何管道。 |
FileReportResults
定義於 fuchsia.feedback/crash_reporter.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
result |
FilingSuccess
|
成功類型。 |
2 |
report_id |
string:64
|
如果 |result| 為 FilingSuccess::REPORT_UPLOADED,則為非空值。 |
GetAnnotationsParameters
定義於 fuchsia.feedback/data_provider.fidl
DataProvider::GetAnnotations() 方法的參數。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
collection_timeout_per_annotation |
zx/Duration
|
系統會從平台上的多個位置平行收集註解,每個位置都有逾時限制。
|
GetSnapshotParameters 資源
定義於 fuchsia.feedback/data_provider.fidl
DataProvider::GetSnapshot() 方法的參數。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
collection_timeout_per_data |
zx/Duration
|
快照會匯總從平台平行收集的各種資料 (裝置運作時間、記錄、檢查資料等)。在內部,每項資料收集作業都會在逾時時間內完成。
請注意,這項設定不會控管快照生成作業可能耗費的總時間,因為用戶端可以透過在呼叫 GetSnapshot() 時設定逾時時間,來控管總時間,因此總時間在結構上會高於 |
2 |
response_channel |
handle<channel>
|
如果設定,系統會透過這個管道將快照封存檔傳送為 |fuchsia.io.File|,而不是在 |Snapshot| 回應的 |archive| 欄位中設定。如果用戶端位於主機上,且不支援 VMO,這個方法通常很實用。 |
LastReboot
定義於 fuchsia.feedback/last_reboot_info.fidl
裝置上次重新啟動的原因。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
graceful |
bool
|
上次重新啟動是否正常,也就是裝置並非因錯誤而重新啟動,而是以受控方式重新啟動。 用戶端可透過這個欄位,瞭解上次重新啟動是否正常,而不必剖析選用的 |reason| 欄位。如果未設定 |reason| (例如系統只知道重新啟動正常,但不知道其他資訊),或 API 演進到支援新的 RebootReason 值,但用戶端尚未更新,這個方法就很有用。 如果提供 |reason|,這個欄位一律會有值。不過,|reason| 不一定會提供這個欄位的值。 |
2 |
reason |
RebootReason
|
裝置上次重新啟動的原因。 |
3 |
uptime |
zx/Duration
|
裝置重新啟動前的正常運作時間。這是自開機後經過的時間,包括在暫停至閒置狀態的時間。 |
4 |
planned |
bool
|
上次重新啟動是否為預定,即裝置是否按照系統套用的排程重新啟動。 用戶端可透過這個欄位,瞭解上次重新啟動是否為預定作業,不必剖析 |reason| 欄位。 計畫性重新啟動作業本質上是正常關機。 新增:26
|
5 |
runtime |
zx/Duration
|
裝置重新啟動前的執行時間。這是指自開機以來經過的時間,不包括在暫停至閒置狀態中花費的時間。 新增:27
|
6 |
action |
ShutdownAction
|
裝置上次關機的方式。 新增:29
|
NativeCrashReport 資源
定義於 fuchsia.feedback/crash_reporter.fidl
代表原生例外狀況的當機報告,用戶端已根據該例外狀況建立 minidump。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
minidump |
fuchsia.mem/Buffer
|
Minidump 格式的核心 dump。 |
2 |
process_name |
string:64
|
當機程序的名稱。 |
3 |
process_koid |
zx/Koid
|
當機程序的核心物件 ID。 |
4 |
thread_name |
string:64
|
當機執行緒的名稱。 |
5 |
thread_koid |
zx/Koid
|
當機執行緒的核心物件 ID。 |
RuntimeCrashReport 資源
定義於 fuchsia.feedback/crash_reporter.fidl
代表執行階段例外狀況的當機報告,適用於大多數語言。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
exception_type |
string:128
|
例外狀況類型,例如「FileSystemException」。 |
2 |
exception_message |
string:4096
|
例外狀況訊息,例如「無法開啟檔案」。 |
3 |
exception_stack_trace |
fuchsia.mem/Buffer
|
例外狀況堆疊追蹤的文字表示法。 |
快照資源
定義於 fuchsia.feedback/data_provider.fidl
裝置狀態的快照。
客戶通常會直接將資料上傳到伺服器。因此,資料會以任意鍵/值組合的形式傳送,用戶端可以直接轉送至伺服器。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
archive |
Attachment
|
<檔案名稱, ZIP 封存檔> 配對。 ZIP 封存檔包含多個檔案,對應從平台收集的各種資料。通常會有一個檔案包含所有註解 (裝置運作時間、建構版本等),以及一個檔案包含每個附件 (記錄、檢查資料等)。 如果要求中已設定 |response_channel|,則不會設定。 |
3 |
annotations2 |
vector<Annotation>:512
|
鍵/值字串組合的向量。鍵保證不重複。 雖然 ZIP 封存檔本身就包含註解,但有些用戶端也希望個別取得註解,以便建立索引或擴充註解,因此我們也會個別提供註解。 新增:25
|
TextBacktraceCrashReport 資源
定義於 fuchsia.feedback/crash_reporter.fidl
代表含有文字堆疊追蹤的當機報告。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
fuchsia_backtrace |
fuchsia.mem/Buffer
|
Fuchsia 符號標記格式的回溯文字表示法。 |
2 |
process_name |
string:64
|
當機程序的名稱。 |
3 |
process_koid |
zx/Koid
|
當機程序的核心物件 ID。 |
4 |
thread_name |
string:64
|
當機執行緒的名稱。 |
5 |
thread_koid |
zx/Koid
|
當機執行緒的核心物件 ID。 |
UNIONS
CrashReporter_FileReport_Result strict
定義於 fuchsia.feedback/crash_reporter.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
CrashReporter_FileReport_Response
|
|
2 |
err |
FilingError
|
SpecificCrashReport 彈性 資源
定義於 fuchsia.feedback/crash_reporter.fidl
代表特定當機報告。
如果伺服器需要特殊案例,說明如何處理特定類型當機事件的特定註解和附件,請新增成員,例如 Javascript 的 RuntimeCrashReport。
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
2 |
native |
NativeCrashReport
|
用於原生例外狀況。 |
3 |
dart |
RuntimeCrashReport
|
適用於 Dart 例外狀況。 |
4 |
text_backtrace |
TextBacktraceCrashReport
|
適用於 Fuchsia 符號標記格式的文字堆疊追蹤。 新增:HEAD
|
常數
| 名稱 | 值 | 類型 | 說明 |
|---|---|---|---|
| MAX_ANNOTATION_KEY_LENGTH |
128
|
uint64 |
註解鍵的長度上限。 新增:23
|
| MAX_ANNOTATION_VALUE_LENGTH |
1024
|
uint64 |
註解值的長度上限。 新增:23
|
| MAX_CRASH_SIGNATURE_LENGTH |
128
|
uint32 |
|
| MAX_EVENT_ID_LENGTH |
128
|
uint32 |
|
| MAX_EXCEPTION_MESSAGE_LENGTH |
4096
|
uint32 |
新增:10
|
| MAX_EXCEPTION_TYPE_LENGTH |
128
|
uint32 |
|
| MAX_NAMESPACE_LENGTH |
32
|
uint32 |
|
| MAX_NUM_ANNOTATIONS2_PROVIDED |
512
|
uint32 |
新增:25
|
| MAX_NUM_ANNOTATIONS_PER_CRASH_REPORT |
32
|
uint32 |
|
| MAX_NUM_ANNOTATIONS_PER_NAMESPACE |
16
|
uint32 |
|
| MAX_NUM_ATTACHMENTS_PER_CRASH_REPORT |
16
|
uint32 |
|
| MAX_PROCESS_NAME_LENGTH |
64
|
uint32 |
|
| MAX_PROGRAM_NAME_LENGTH |
1024
|
uint32 |
|
| MAX_REPORT_ID_LENGTH |
64
|
uint32 |
新增:11
|
| MAX_THREAD_NAME_LENGTH |
64
|
uint32 |