- 版本:1.0.0
- GitHub:
- NPM: https://npmjs.net.cn/package/%40awarns%2Ftracing
- 下载
- 昨天:0
- 上周:0
- 上个月:0
@awarns/tracing
在使用AwarNS 框架时,后台执行流程可能会变得非常复杂,但这并不一定是坏事。该模块通过一组装饰器和任务帮助调试此类工作流程,这些装饰器和任务允许跟踪任务执行和某些事件的触发。记录的跟踪信息可以稍后查询并导出为本地文件。可选地,可以将记录的跟踪信息自动存储在外部数据存储中(例如,后端)。
使用以下命令行指令安装插件
ns plugin add @awarns/tracing
用法
安装和配置此插件后,您将获得两种交互机制来使用它
- 插件API。通过它,您可以“装饰”现有任务,跟踪它们的执行。然后,您可以查询记录的执行跟踪并使用最常见的信息交换格式导出它们。
- 跟踪特定事件的任务。有时,任务本身的执行并不重要,但只是它产生的一个(或多个)事件。或者,事件生成器可能不是任务,而是某些UI代码在非常特定的情况下发出事件。如果这些事件的触发对您的应用程序很重要,您可以使用这些任务跟踪它们。
设置
此插件要求您在框架初始化期间注册其加载器,如下所示
// ... platform imports
import { awarns } from '@awarns/core';
import { demoTasks } from '../tasks';
import { demoTaskGraph } from '../graph';
import { registerTracingPlugin } from '@awarns/tracing';
import { externalTracesStore } from './external-store';
awarns
.init(
demoTasks,
demoTaskGraph,
[
registerTracingPlugin({
externalTracesStore: externalTracesStore,
oldTracesMaxAgeHours: 7 * 24 // 1 week
}),
]
)
// ... handle initialization promise
插件加载器配置参数选项
属性 | 类型 | 描述 |
---|---|---|
externalTracesStore |
TracesStore |
(可选) 注入外部跟踪存储的适配器并启用记录跟踪的自动上传。下表描述了此适配器需要实现的方法 |
oldTracesMaxAgeHours |
数字 |
(可选) 告诉插件定期清理旧本地跟踪。默认情况下,保留所有跟踪 |
TracesStore (外部)
方法 | 返回类型 | 描述 |
---|---|---|
insert(trace: Trace) |
Promise<void> |
持久化给定的跟踪。如果出现问题,则抛出错误。下一次应用程序初始化期间将重试写入 |
因此,目前,此插件仅支持单向同步,其余方法旨在供将来使用,目前无需实现。您可以在其中抛出未实现错误,以便更容易识别它们在未来版本中的使用。
API
此插件的API可以分为三组:任务装饰器、跟踪存储和数据导出器。
任务装饰器
makeTraceable
在任务装饰器组中,有一个makeTraceable
函数,允许装饰一个或多个任务以跟踪它们的执行,以下参数(请参阅完整示例用法这里)
参数 | 类型 | 描述 |
---|---|---|
tasksToTrace |
Array<Task> |
一个数组,包含所有将被装饰以跟踪其执行的任务 |
config |
TracerConfig |
(可选) 允许调整追踪器的某些配置选项。有关更多信息,请参阅 TracerConfig 属性 |
makeTraceable
函数返回一个装饰过的任务数组。
TracerConfig
属性 | 类型 | 描述 |
---|---|---|
outputsSensitiveData |
布尔值 |
指示追踪器,正在跟踪的任务输出敏感信息,这些信息不应被记录。默认值为 false |
追踪存储
tracesStore
在追踪存储组中,有一个 tracesStore
单例对象,具有以下方法
方法 | 返回类型 | 描述 |
---|---|---|
insert(record: Record) |
Promise<void> |
持久化给定的追踪。如果成功,并在插件初始化时提供,它将尝试自动将新的追踪写入外部存储 |
getAll(reverseOrder?: boolean, limitSize?: number) |
Promise |
允许检索当前最新的(默认)或最早的追踪,可选地限制结果列表的大小 |
list(size?: number) |
Observable |
允许观察“n”个最近的追踪,其中“n”由大小参数的值确定。默认大小为 100 |
clear() |
Promise<void> |
允许从本地数据库中清除所有存储的追踪。 注意:仅删除旧追踪,请在插件初始化时配置 oldTracesMaxAgeHours 选项 |
changes (属性) |
Observable |
监听此可观察属性以了解何时创建了一个追踪。它传播最近存储的追踪的id更新 |
注意:建议安装 RxJS,以操作返回
Observable
的方法。
追踪
属性 | 类型 | 描述 |
---|---|---|
id |
字符串 |
追踪的唯一id |
chainId |
字符串 |
追踪所属链的id。链是一系列事件上升和任务执行,它们源于同一起始事件 |
type |
TraceType |
可以是 task 或 event ,具体取决于什么触发了追踪 |
name |
字符串 |
触发追踪的任务或事件的名称 |
result |
TraceResult |
可以是 OK 或 error 。对于事件追踪,此值始终为 OK ,因为如果出现问题,事件根本不会上升 |
timestamp |
Date |
追踪创建的日期和时间 |
content |
对象 |
任务追踪和事件追踪在其内容属性中的结构不同。事件追踪将在这里包含事件的负载,除非已声明事件包含敏感数据,在这种情况下,它将保留一个空({} )对象。任务追踪的内容具有固定的结构,如下所示 |
追踪内容(任务)
属性 | 类型 | 描述 |
---|---|---|
emitted |
字符串 |
任务发出的事件的名称 |
outcome |
字符串 |
事件发出的负载。如果追踪器配置中的 outputsSensitiveData 设置为 true ,则此属性将保留一个空对象({} ) |
message |
字符串 |
如果在任务的执行过程中抛出错误,其堆栈跟踪将在这里显示 |
took |
数字 |
任务执行时间,以毫秒为单位 |
导出数据
createRecordsExporter
在最后一个组中,数据导出器组中,有一个 createRecordsExporter()
函数,具有以下参数
参数 | 类型 | 描述 |
---|---|---|
folder |
文件夹 |
系统文件夹对象。使用 NativeScript FileSystem API 定义导出文件将保存的位置 |
format |
'csv' | 'json' |
选择要使用的交换信息格式。默认为 csv |
fileName |
字符串 |
(可选) 指定要用于导出文件的文件名(不带扩展名)。默认为当前日期和时间 |
createRecordsExporter()
返回一个具有以下API的 Exporter
对象
导出器
方法 | 返回类型 | 描述 |
---|---|---|
export() |
Promise |
告诉导出器导出追踪信息,并将它们保存到配置的导出文件中。完成后返回一个 ExportResult |
ExportResult
属性 | 返回类型 | 描述 |
---|---|---|
exportCount |
数字 |
已导出的追踪信息数量 |
fileName |
字符串 |
已保存的导出文件名称 |
任务
任务名称 | 描述 |
---|---|
trackEvent |
生成包含触发执行事件信息的事件追踪 |
trackSensitiveEvent |
生成包含触发执行事件信息的事件追踪。由于它被认为包含敏感信息,因此将忽略事件的负载 |
追踪常规事件
要为此任务注册使用,您只需将其导入,并在您应用程序的任务列表中调用其生成函数
import { Task } from '@awarns/core/tasks';
import { trackEventTask } from '@awarns/tracing';
export const demoTasks: Array<Task> = [
trackEventTask(),
];
任务生成器参数
任务生成器不接收任何参数。
任务输出事件
trackEventFinished
(默认,无内容)
在应用程序任务图中的示例用法
on('startEvent', run('trackEvent')); // Include some payload data in your start event,
// to see how it becomes recorded too
追踪包含敏感信息的事件
要为此任务注册使用,您只需将其导入,并在您应用程序的任务列表中调用其生成函数
import { Task } from '@awarns/core/tasks';
import { trackSensitiveEventTask } from '@awarns/tracing';
export const demoTasks: Array<Task> = [
trackSensitiveEventTask(),
];
任务生成器参数
任务生成器不接收任何参数。
任务输出事件
trackSensitiveEventFinished
(默认,无内容)
在应用程序任务图中的示例用法
on('startEvent', run('trackSensitiveEvent')); // Include some payload data in your start event,
// to see how it does not appear in the event trace
许可证
Apache License 版本 2.0