协议
ComponentDataRegister
在 fuchsia.feedback/data_register.fidl 中定义
注册可以附加到反馈报告(崩溃、用户反馈或错误报告)中的数据。
组件可以使用此数据来扩充所有反馈报告中附加的数据。默认情况下,反馈服务会附加向平台公开的数据。此协议适用于某些产品中某些组件已知但未提供给平台的数据。
epitaph ZX_ERR_INVALID_ARGS 表示客户端发送的请求无效。请参阅下文,了解每项请求可能无效的可能原因。
epitaph 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_EmailAddressS_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 之间的争用之间发生争用。否则,如果在更新/插入操作完成之前提交崩溃报告,系统会将崩溃报告归因于错误的产品,从而导致崩溃数据可能不正确。
请求
名称 | 类型 |
---|---|
component_url |
string[2083]
|
product |
CrashReportingProduct
|
响应
<EMPTY>
DataProvider
在 fuchsia.feedback/data_provider.fidl 中定义
提供可用于附加到反馈报告中的数据,例如,系统提交的崩溃报告、用户提交的用户反馈报告或开发者提交的 bug 报告。
GetAnnotations
返回一组关于设备状态的注解。
如果收集这些商品时出现问题,annotations
可能为空。
这些注释与通过 GetSnapshot() 提供的注释相同。有些客户端只想要注释,而另一些客户端则同时需要注释和快照,而生成快照所花费的时间可能比收集注释所花的时间要长得多。例如,日志只是快照的一部分,不是注释的一部分,可能需要一些时间。
请求
名称 | 类型 |
---|---|
params |
GetAnnotationsParameters
|
响应
名称 | 类型 |
---|---|
annotations |
Annotations
|
GetScreenshot
返回以提供的 encoding
编码的当前视图的图像。
如果编码不受支持、设备没有显示屏或内存不足,无法分配屏幕截图图片,则 screenshot
可能为 null。
屏幕截图与快照是分开提供的,因为调用方可能希望在更改视图之前阻止此调用,但可以在后台收集快照。还有许多客户对屏幕截图不感兴趣。
请求
名称 | 类型 |
---|---|
encoding |
ImageEncoding
|
响应
名称 | 类型 |
---|---|
screenshot |
Screenshot?
|
GetSnapshot
返回设备状态的快照。
如果生成快照时出现问题,snapshot
可能为空。
请求
名称 | 类型 |
---|---|
params |
GetSnapshotParameters
|
响应
名称 | 类型 |
---|---|
snapshot |
Snapshot
|
DeviceIdProvider
在 fuchsia.feedback/device_id_provider.fidl 中定义
提供设备的反馈 ID。
反馈 ID 是用于对反馈报告进行分组的持久 UUID。该 ID 不能用于反馈以外的任何报告目的,例如不能用于遥测。
GetId
返回设备的反馈 ID。
此方法遵循挂起模式,自上次调用更改以来,直到 ID 发生变化时才会返回任何值。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
feedback_id |
string[64]
|
LastRebootInfoProvider
在 fuchsia.feedback/last_reboot_info.fidl 中定义
了解设备上次关机的原因。使用术语重新启动而不是关闭,因为许多开发者将有关关闭的问题表述为重新启动,并且大多数组件都有兴趣了解系统为什么会刚刚重新启动。
获取
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
last_reboot |
LastReboot
|
结构
注解
在 fuchsia.feedback/annotation.fidl 中定义
注解及其纯 ASCII 字符串键。 注解是简短的字符串,例如板级名称或 build 号。
野战 | 类型 | 说明 | 默认 |
---|---|---|---|
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
|
无默认取景方式 |
屏幕截图资源
在 fuchsia.feedback/data_provider.fidl 中定义
经过编码的屏幕图片。
野战 | 类型 | 说明 | 默认 |
---|---|---|---|
image |
fuchsia.mem/Buffer
|
无默认取景方式 | |
dimensions_in_px |
fuchsia.math/Size
|
无默认取景方式 |
枚举
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 |
ImageEncoding 严格
类型:uint32
在 fuchsia.feedback/data_provider.fidl 中定义
图片使用的编码。
目前仅支持 PNG 格式,但将来,如果需要,可通过其他编码返回屏幕截图。
名称 | 值 | 说明 |
---|---|---|
PNG |
0 |
RebootReason 灵活
类型:uint16
在 fuchsia.feedback/last_reboot_info.fidl 中定义
上次重新启动设备的原因。
名称 | 值 | 说明 |
---|---|---|
未知 |
0 |
如果服务器发送未使用客户端编译的新枚举值,则客户端将获取此值。 |
温度偏低 |
2 |
设备从冷状态启动。 这很可能是由于长时间没有电源或设备首次使用 Fuchsia 启动造成的。 |
BRIEF_POWER_LOSS |
3 |
设备已重新启动,因为短暂断电。 在某些硬件上,这可能是由于用户断开连接,然后快速连续重新连接设备电源造成的。 |
淡出 |
4 |
设备重新启动,因为其电压未降至 0 而降至允许水平以下。 |
KERNEL_PANIC |
5 |
|
SYSTEM_OUT_OF_MEMORY |
6 |
|
HARDWARE_WATCHDOG_TIMEOUT |
7 |
|
SOFTWARE_WATCHDOG_TIMEOUT |
8 |
|
ROOT_JOB_TERMINATION |
19 |
设备重新启动,原因是用户空间根作业已终止(很可能是由于其中一个关键进程崩溃)。 |
USER_REQUEST |
9 |
设备因用户发起了重新启动,而重新启动。用户可以是人类,也可以是代表人与设备交互的程序,例如 SL4F 或 RCS。 |
SYSTEM_UPDATE |
10 |
设备因 OTA 更新而重新启动。 |
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 启动映像的交换。 |
表
注解
在 fuchsia.feedback/data_provider.fidl 中定义
关于设备状态的注解。
客户端通常会将数据直接上传到服务器。因此,数据采用任意键值对的形式,客户端可以直接转发到服务器。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
annotations |
vector<Annotation>[64]
|
键值对字符串对的矢量。键必须唯一。 |
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]
|
崩溃的程序的名称,例如进程或组件的名称。 |
2 |
specific_report |
SpecificCrashReport
|
取决于崩溃类型的具体报告。 如果需要发送有关崩溃程序的其他信息(例如小型转储),则应设置此字段。 |
3 |
annotations |
vector<Annotation>[32]
|
键值对字符串对矢量,表示应附加到崩溃报告的任意数据。 键应该是唯一的,因为系统只会考虑矢量中给定键的最新值。 |
4 |
attachments |
vector<Attachment>[16]
|
键值对字符串到 VMO 对的矢量,表示应附加到崩溃报告的任意数据。 键应该是唯一的,因为系统只会考虑矢量中给定键的最新值。 |
5 |
event_id |
string[128]
|
崩溃服务器可以使用的文本 ID,对与同一事件相关的多个崩溃报告进行分组。 与崩溃签名不同,共用相同 ID 的崩溃报告对应于不同的崩溃,但也可以被视为属于同一事件,例如,低级服务器中的崩溃会导致高级界面 widget 中出现崩溃。 |
6 |
program_uptime |
zx/Duration
|
程序在崩溃前运行了多长时间。 |
7 |
crash_signature |
string[128]
|
崩溃服务器可用于跟踪一段时间内同一崩溃的文本签名,例如: “kernel-panic”或“oom”。此签名将优先于从其他数据派生的任何自动签名。 与事件 ID 不同,共用相同签名的崩溃报告对应于同一个崩溃,但这些崩溃发生在多个事件上,例如,每当服务器发出相同的请求时,就会出现 null 指针异常。 必须与 [a-z][a-z-]* 匹配,即仅匹配小写字母和连字符,否则将产生 ZX_ERR_INVALID_ARGS 片名。 |
8 |
is_fatal |
bool
|
指示崩溃报告是针对正在运行的进程、组件还是系统本身的非典型停止。 导致严重崩溃报告的事件示例如下:
下面列举了一些会导致非严重崩溃报告的事件:
此字段主要用于按严重、非严重和未知对崩溃进行分组,分别对应于设置为 true、设置为 false 或未设置的字段。 |
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
|
快照汇总了从平台并行收集的各种数据(设备正常运行时间、日志、检查数据等)。在内部,每次数据收集都是在超时时间内完成的。
请注意,这无法控制快照生成可能需要的总时间(采用高于 |
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
|
设备重新启动前的正常运行时间。 |
NativeCrashReport 资源
在 fuchsia.feedback/crash_reporter.fidl 中定义
表示客户端已为其构建小型转储的原生异常的崩溃报告。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
minidump |
fuchsia.mem/Buffer
|
采用迷你转储格式的核心转储。 |
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 归档文件包含若干文件,分别对应从平台收集的各种数据。通常,所有注解(设备正常运行时间、build 版本等)都有一个文件,每个附件(日志、检查数据等)也有一个文件。 如果请求中设置了 |response_channel|,则不会设置此参数。 |
2 |
annotations |
vector<Annotation>[64]
|
键值对字符串对的矢量。键必须唯一。 虽然这些注释包含在 ZIP 归档文件中,但有些客户还希望它们单独编入索引或扩充它们,因此我们也要单独提供它们。 |
联合
CrashReporter_FileReport_Result 严格
在 fuchsia.feedback/crash_reporter.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
CrashReporter_FileReport_Response
|
|
2 |
err |
FilingError
|
SpecificCrashReport 灵活 资源
在 fuchsia.feedback/crash_reporter.fidl 中定义
表示特定的崩溃报告。
当服务器需要以特殊方式处理给定类型崩溃的特定注解和附件时,添加一个新成员。例如,在 JavaScript 代码中添加 RuntimeCrashReport
。
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
2 |
native |
NativeCrashReport
|
适用于原生异常。 |
3 |
dart |
RuntimeCrashReport
|
适用于 Dart 异常。 |
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
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_ANNOTATIONS_PER_CRASH_REPORT |
32
|
uint32 |
|
MAX_NUM_ANNOTATIONS_PER_NAMESPACE |
16
|
uint32 |
|
MAX_NUM_ANNOTATIONS_PROVIDED |
64
|
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 |