et_collector

et_collector

模块

et_collector

模块摘要

收集跟踪事件,并提供适合迭代的备份存储。

描述

事件追踪(ET)应用程序的接口模块

出口

start_link(Options) -> {ok, CollectorPid} | {error, Reason}

类型

启动收集器进程。

收集器收集跟踪事件并按时间戳排序。时间戳可以反映生成实际跟踪数据的时间(trace_ts)或跟踪数据转换为事件记录(event_ts)的时间。如果跟踪数据中缺少时间戳(缺少erlang:trace / 4的timestamp选项),则trace_ts将设置为event_ts。

事件通过报告功能直接报告给收集者,或通过一个或多个跟踪客户端间接报告。所有报告的事件在收集器存储之前首先通过收集器过滤器进行过滤。通过用定制的dito替换默认收集器过滤器,可以允许任何跟踪数据作为输入。收集器过滤器是一个带有预定义键{过滤器,收集器}的字典条目,并且该值是元素1的乐趣。有关接口详细信息,请参阅et_selector:make_event / 1,例如接受哪个erlang:trace / 1元组。

收藏家有一个内置的字典服务。任何术语都可以作为字典中的值存储并绑定到唯一键。当使用现有密钥插入新值时,新值将覆盖现有密钥。通过使用{subscriber,pid()}作为字典键,进程可以订阅字典更新。所有字典更新将被传播到匹配模式{{subscriber,'_'},'_'}的订户进程,其中第一个'_'被解释为pid()。

在全局跟踪模式下,收集器将自动开始跟踪所有连接的Erlang节点。当节点连接时,将在该节点上启动端口跟踪程序,并在收集器节点上启动相应的跟踪客户端。

默认值:

  • parent_pid - self()。

  • event_order - trace_ts。

  • trace_global - false。

  • trace_pattern - 未定义。

  • trace_port - 4711。

  • trace_max_queue - 50。

stop(CollectorPid) -> ok

类型

停止收集器进程。

save_event_file(CollectorPid, FileName, Options) -> ok | {error, Reason}

类型

将事件保存到文件中。

默认情况下,当前存储的事件(现有)被写入一个全新的文件(写入),事件在写入文件后保持(保持)。

在将事件写入文件后不再保留事件,可以在成功写入文件(清除)后删除所有存储的事件。

选项默认为现有的、写入的和保持的。

load_event_file(CollectorPid, FileName) -> {ok, BadBytes} | exit(Reason)

类型

从文件加载事件表。

report(Handle, TraceOrEvent) -> {ok, Continuation} | exit(Reason)report_event(Handle, DetailLevel, FromTo, Label, Contents) -> {ok, Continuation} | exit(Reason)report_event(Handle, DetailLevel, From, To, Label, Contents) -> {ok, Continuation} | exit(Reason)

类型

向收集器报告事件。

所有事件都通过收集器过滤器进行过滤,而收集器过滤器可以选择转换或丢弃事件。第一个调用应该使用收集器进程的PID作为报告句柄,而随后的调用应该使用表句柄。

make_key(Type, Stuff) -> Key

类型

从事件记录或旧键中创建密钥。

get_table_handle(CollectorPid) -> Handle

类型

返回一个表柄。

get_global_pid() -> CollectorPid | exit(Reason)

类型

如果存在,则返回全局注册收集器的标识。

change_pattern(CollectorPid, RawPattern) -> {old_pattern, TracePattern}

类型

在所有跟踪节点上全局更改活动跟踪模式。

dict_insert(CollectorPid, {filter, collector}, FilterFun) -> okdict_insert(CollectorPid, {subscriber, SubscriberPid}, Void) -> okdict_insert(CollectorPid, Key, Val) -> ok

类型

插入字典条目并向所有注册的订阅者发送{et,{dict_insert,Key,Val}}元组。

如果条目是新的订阅者,它将意味着新的订阅者进程首先将为每个已存储的字典条目获得一条消息,然后它和所有旧订户都会得到这个特定条目。收集器进程链接并监督订阅者进程。如果用户进程死亡,它将暗示它与正常的dict_delete / 2一样被取消注册。

dict_lookup(CollectorPid, Key) -> [Val]

类型

查找字典条目并返回零或一个值。

dict_delete(CollectorPid, Key) -> ok

类型

删除一个字典条目并向所有注册的订阅者发送{et,{dict_delete,Key}}元组。

如果已删除的条目是注册订阅服务器,它将意味着订阅方进程已被取消注册为订阅服务器,并获得了最终消息。

dict_match(CollectorPid, Pattern) -> [Match]

类型

匹配一些字典条目

multicast(_CollectorPid, Msg) -> ok

类型

向所有注册订阅者发送消息。

start_trace_client(CollectorPid, Type, Parameters) -> file_loaded | {trace_client_pid, pid()} | exit(Reason)

类型

从文件、端口或进程加载原始Erlang跟踪。

iterate(Handle, Prev, Limit) -> NewAcc

迭代的简写(Handle,Prev,Limit,undefined,Prev) - > NewAcc

iterate(Handle, Prev, Limit, Fun, Acc) -> NewAcc

类型

迭代当前存储的事件。

迭代当前存储的事件并为每个事件应用一个函数。迭代可以向前或向后执行,并且可以被限制为事件的最大数量(绝对(极限))。

clear_table(Handle) -> ok

类型

清除事件表。