nl::Weave::Profiles::DataManagement_Current::LoggingManagement

#include <src/lib/profiles/data-management/Current/LoggingManagement.h>

用于管理内存事件日志的类。

摘要

构造函数和析构函数

LoggingManagement(nl::Weave::WeaveExchangeManager *inMgr, size_t inNumBuffers, const LogStorageResources *const inLogStorageResources)
LoggingManagement 构造函数。
LoggingManagement(void)
LoggingManagement 默认构造函数。

公共函数

BlitEvent(EventLoadOutContext *aContext, const EventSchema & inSchema, EventWriterFunct inEventWriter, void *inAppData, const EventOptions *inOptions)
用于根据事件日志记录协议写入事件标头和数据的帮助程序函数。
CancelShutdownInProgress(void)
void
将 mShutdownInProgress 标志设置为 false。
CheckShouldRunWDM(void)
bool
决定是否根据未安排上传的事件缓冲区中的字节数来分流事件。
FetchEventsSince(nl::Weave::TLV::TLVWriter & ioWriter, ImportanceType inImportance, event_id_t & ioEventID)
一个函数,用于检索自指定事件 ID 以来具有指定重要性的事件。
GetBytesWritten(void) const
uint32_t
获取自此日志实例化以来写入到此日志的总字节数(涵盖所有事件重要性)。
GetEventReader(nl::Weave::TLV::TLVReader & ioReader, ImportanceType inImportance)
一种辅助方法,用于检查内存中的日志缓冲区。
GetFirstEventID(ImportanceType inImportance)
提取当前针对特定重要性级别存储的第一个事件 ID。
GetLastEventID(ImportanceType inImportance)
获取特定重要性级别的最新提供的 ID。
IsShutdownInProgress(void)
bool
检查 mShutdownInProgress 标志。
IsValid(void)
bool
IsValid 返回 LoggingManagement 实例是否有效。
LoadEvents(TLVReader & reader)
加载之前保留的 Weave 事件。
LogEvent(const EventSchema & inSchema, EventWriterFunct inEventWriter, void *inAppData, const EventOptions *inOptions)
通过带有选项的回调记录事件。
MarkShutdownInProgress(void)
void
将 mShutdownInProgress 标志设置为 true。
NotifyEventsDelivered(ImportanceType inImportance, event_id_t inLastDeliveredEventID, uint64_t inRecipientNodeID)
void
RegisterEventCallbackForImportance(ImportanceType inImportance, FetchExternalEventsFunct inFetchCallback, NotifyExternalEventsDeliveredFunct inNotifyCallback, NotifyExternalEventsEvictedFunct inEvictedCallback, size_t inNumEvents, event_id_t *outLastEventID)
用于注册一组外部存储的事件的公共 API。
RegisterEventCallbackForImportance(ImportanceType inImportance, FetchExternalEventsFunct inFetchCallback, NotifyExternalEventsDeliveredFunct inNotifyCallback, size_t inNumEvents, event_id_t *outLastEventID)
用于注册一组外部存储的事件的公共 API。
RegisterEventCallbackForImportance(ImportanceType inImportance, FetchExternalEventsFunct inFetchCallback, size_t inNumEvents, event_id_t *outLastEventID)
用于注册一组外部存储的事件的公共 API。
ScheduleFlushIfNeeded(bool inFlushRequested)
安排日志分流任务。
SerializeEvents(TLVWriter & writer)
序列化所有重要类型的 Weave 事件。
SetBDXUploader(LogBDXUpload *inUploader)
void
SetExchangeManager(nl::Weave::WeaveExchangeManager *inMgr)
设置要与此日志记录子系统搭配使用的 WeaveExchangeManager
SetLoggingEndpoint(event_id_t *inEventEndpoints, size_t inNumImportanceLevels, size_t & outLoggingPosition)
SkipEvent(EventLoadOutContext *aContext)
void
用于跳过编写与分配的事件 ID 对应的事件的辅助函数。
ThrottleLogger(void)
void
ThrottleLogger 将有效日志记录级别提升到生产级别。
UnregisterEventCallbackForImportance(ImportanceType inImportance, event_id_t inEventID)
void
用于取消注册一组外部存储事件的公共 API。
UnthrottleLogger(void)
void
UnthrottleLogger 可将有效日志记录级别恢复到已配置的日志记录级别。

公共静态函数

CreateLoggingManagement(nl::Weave::WeaveExchangeManager *inMgr, size_t inNumBuffers, const LogStorageResources *const inLogStorageResources)
void
创建 LoggingManagement 对象,并使用提供的资源初始化日志记录管理子系统。
DestroyLoggingManagement(void)
void
在关停时执行我们需要的任何操作。
GetInstance(void)

公共函数

BlitEvent

WEAVE_ERROR BlitEvent(
  EventLoadOutContext *aContext,
  const EventSchema & inSchema,
  EventWriterFunct inEventWriter,
  void *inAppData,
  const EventOptions *inOptions
)

用于根据事件日志记录协议写入事件标头和数据的帮助程序函数。

详细信息
参数
[in,out] aContext
EventLoadOutContext,使用缓冲区的有状态信息初始化。BlitEvent 使用此上下文更新和保留状态。
[in] inSchema
架构,用于定义此事件的重要性、个人资料 ID 和结构类型。
[in] inEventWriter
为序列化事件数据而调用的回调。
[in] inAppData
回调的应用上下文。
[in] inOptions
EventOptions,用于描述时间戳以及与此事件相关的其他标记。

CancelShutdownInProgress

void CancelShutdownInProgress(
  void
)

将 mShutdownInProgress 标志设置为 false。

CheckShouldRunWDM

bool CheckShouldRunWDM(
  void
)

决定是否根据未安排上传的事件缓冲区中的字节数来分流事件。

函数的行为通过 WEAVE_CONFIG_EVENT_LOGGING_BYTE_THRESHOLD 常量控制。如果自上次发送 WDM 通知以来,系统写入的字节数超过了上述字节数,该函数就会指示是时候触发 NotificationEngine 了。

详细信息
返回值
true
应分流事件
false
其他情况

FetchEventsSince

WEAVE_ERROR FetchEventsSince(
  nl::Weave::TLV::TLVWriter & ioWriter,
  ImportanceType inImportance,
  event_id_t & ioEventID
)

一个函数,用于检索自指定事件 ID 以来具有指定重要性的事件。

如果已给定 nl::Weave::TLV::TLVWriter、重要性类型和事件 ID,则该函数将提取自指定事件以来具有指定重要性的事件。该函数会继续提取事件,直到 nl::Weave::TLV::TLVWriter 或日志中的空间用尽为止。函数会在事件边界处终止事件写入。

详细信息
参数
[in] ioWriter
用于事件存储的写入器
[in] inImportance
要提取的事件的重要性
[in,out] ioEventID
输入时,紧挨着我们要提取的事件的 ID。完成时,提取的最后一个事件的 ID。
返回值
WEAVE_END_OF_TLV
该函数已到达指定重要性级别的可用日志条目的末尾
WEAVE_ERROR_NO_MEMORY
函数中的 ioWriter 已用尽,日志中有更多事件可用。
WEAVE_ERROR_BUFFER_TOO_SMALL
函数中的 ioWriter 已用尽,日志中有更多事件可用。

GetBytesWritten

uint32_t GetBytesWritten(
  void
) const 

获取自此日志实例化以来写入到此日志的总字节数(涵盖所有事件重要性)。

详细信息
返回值
写入日志的字节数。

GetEventReader

WEAVE_ERROR GetEventReader(
  nl::Weave::TLV::TLVReader & ioReader,
  ImportanceType inImportance
)

一种辅助方法,用于检查内存中的日志缓冲区。

详细信息
参数
[in,out] ioReader
对将通过事件日志中的后备存储空间初始化的读取器的引用
[in] inImportance
对读者的起始重要性。请注意,在这种情况下,起始重要性有点违反直觉:除了专用缓冲区之外,更重要的事件会与不太重要的事件共享缓冲区。因此,在传入调试重要性时,读取器将遍历最少的数据。
返回值
WEAVE_NO_ERROR 无条件限制。

GetFirstEventID

event_id_t GetFirstEventID(
  ImportanceType inImportance
)

提取当前针对特定重要性级别存储的第一个事件 ID。

详细信息
参数
inImportance
重要性级别
返回值
event_id_t 当前针对该事件重要性存储的第一个事件 ID

GetLastEventID

event_id_t GetLastEventID(
  ImportanceType inImportance
)

获取特定重要性级别的最新提供的 ID。

详细信息
参数
inImportance
重要性级别
返回值
event_id_t 针对该事件重要性最近提供的事件 ID

IsShutdownInProgress

bool IsShutdownInProgress(
  void
)

检查 mShutdownInProgress 标志。

IsValid

bool IsValid(
  void
)

IsValid 返回 LoggingManagement 实例是否有效。

详细信息
返回值
true
实例有效(使用适当的后备存储空间初始化)
false
其他情况

LoadEvents

WEAVE_ERROR LoadEvents(
  TLVReader & reader
)

加载之前保留的 Weave 事件。

LogEvent

event_id_t LogEvent(
  const EventSchema & inSchema,
  EventWriterFunct inEventWriter,
  void *inAppData,
  const EventOptions *inOptions
)

通过带有选项的回调记录事件。

该函数会记录以 EventWriterFunct 表示的事件以及特定于应用的 appData 上下文。该函数会写入事件元数据,并通过 nl::Weave::TLV::TLVWriter 引用和 inAppData 上下文调用 inEventWriter,以便用户代码可以直接将事件数据发送到事件日志中。这种形式的事件日志记录可将事件数据直接序列化到目标缓冲区,从而最大限度地减少内存消耗。事件数据必须包含要在由 inProfileIDinEventType 标识的架构中解读的上下文标记。第一个元素的标记将被忽略;则事件日志记录系统会将其替换为 eventData 标记。

如果架构重要性超过 LoggingConfiguration 中指定的日志记录阈值,则会记录此事件。如果事件的重要性未达到当前阈值,则该函数会被丢弃,并且该函数会返回 0 作为生成的事件 ID。

该调用的这种变体允许调用方设置 EventOptions 的任意组合:

  • 时间戳,如果 0 默认为通话时的当前时间,
  • “root”事件来源的“事件来源”和“特征 ID”部分;如果为 NULL,则默认为当前设备。该事件被标记为与进行调用的设备相关;
  • 将事件 ID 分组的相关事件 ID;当相关事件 ID 为 0 时,该事件将被标记为与其他任何事件均无关。
  • 紧迫性;默认为非紧急

详细信息
参数
[in] inSchema
架构,用于定义此事件的重要性、个人资料 ID 和结构类型。
[in] inEventWriter
为实际序列化事件数据而调用的回调
[in] inAppData
回调的应用上下文。
[in] inOptions
事件元数据的选项。可以为 NULL。
返回值
event_id_t:如果事件已写入日志,则为事件 ID,否则为 0。

LoggingManagement

 LoggingManagement(
  nl::Weave::WeaveExchangeManager *inMgr,
  size_t inNumBuffers,
  const LogStorageResources *const inLogStorageResources
)

LoggingManagement 构造函数。

使用一个 LogStorageResources 数组初始化 LoggingManagement。数组必须为每个有效的重要性级别提供一项资源,数组元素中的数值必须是重要性递增的数字值(以及重要性级别逐渐降低);数组中的第一个元素对应为最关键事件分配的资源,最后一个元素对应最不重要的事件。

详细信息
参数
[in] inMgr
WeaveExchangeManager,以便与此日志记录子系统配合使用
[in] inNumBuffers
inLogStorageResources 数组中的元素数
[in] inLogStorageResources
每个重要性级别的 LogStorageResources 数组。

LoggingManagement

 LoggingManagement(
  void
)

LoggingManagement 默认构造函数。

提供的主要目的是让编译器满意。

详细信息
返回值

MarkShutdownInProgress

void MarkShutdownInProgress(
  void
)

将 mShutdownInProgress 标志设置为 true。

NotifyEventsDelivered

void NotifyEventsDelivered(
  ImportanceType inImportance,
  event_id_t inLastDeliveredEventID,
  uint64_t inRecipientNodeID
)

RegisterEventCallbackForImportance

WEAVE_ERROR RegisterEventCallbackForImportance(
  ImportanceType inImportance,
  FetchExternalEventsFunct inFetchCallback,
  NotifyExternalEventsDeliveredFunct inNotifyCallback,
  NotifyExternalEventsEvictedFunct inEvictedCallback,
  size_t inNumEvents,
  event_id_t *outLastEventID
)

用于注册一组外部存储的事件的公共 API。

注册 FetchExternalEventsFunct 形式的回调。此 API 要求平台知道注册时的事件数量。内部工作原理也要求此数字为常量。由于此 API 不允许平台注册特定事件 ID,因此这会阻止平台持久存储事件(至少使用唯一事件 ID 是这样)。

每当订阅者尝试提取该范围内的事件 ID 的次数(不限次数)时,系统就会调用该回调函数,直至其被取消注册。

当外部提供程序希望在事件传递给订阅者时以及外部事件对象被逐出时收到通知时,应使用该函数的此变体。

传送事件时,外部提供程序会收到有关这一点的通知,以及接收者的节点 ID 和传送给该接收者的最后一个事件的 ID。请注意,外部提供方可能会收到多次针对同一事件 ID 的通知。具体来说,处理程序可以取消注册外部事件 ID。

如果外部事件对象被逐出日志缓冲区,则系统会通知外部提供程序以及外部事件对象的副本。

如果失败,指向 ExternalEvents 结构体的指针将为 NULL,否则将使用分配给回调函数的开始和结束事件 ID 填充。此指针应用于取消注册这组事件。

如需详细了解回调必须实现的内容,请参阅 FetchExternalEventsFunct 的文档。

详细信息
参数
[in] inImportance
重要性级别
[in] inFetchCallback
用于注册以提取外部事件的回调
[in] inNotifyCallback
用于注册送达通知的回调
[in] inEvictedCallback
用于注册逐出通知的回调
[in] inNumEvents
此集中的事件数量
[out] outLastEventID
指向 event_id_t; 的指针;成功注册外部事件后,此函数会存储与外部事件块的最后一个事件 ID 相对应的事件 ID。该参数可以为 NULL。
返回值
WEAVE_ERROR_NO_MEMORY
如果没有更多可用的回调槽。
WEAVE_ERROR_INVALID_ARGUMENT
Null 函数回调或没有要注册的事件。
WEAVE_NO_ERROR
成功时。

RegisterEventCallbackForImportance

WEAVE_ERROR RegisterEventCallbackForImportance(
  ImportanceType inImportance,
  FetchExternalEventsFunct inFetchCallback,
  NotifyExternalEventsDeliveredFunct inNotifyCallback,
  size_t inNumEvents,
  event_id_t *outLastEventID
)

用于注册一组外部存储的事件的公共 API。

注册 FetchExternalEventsFunct 形式的回调。此 API 要求平台知道注册时的事件数量。内部工作原理也要求此数字为常量。由于此 API 不允许平台注册特定事件 ID,因此这会阻止平台持久存储事件(至少使用唯一事件 ID 是这样)。

每当订阅者尝试提取该范围内的事件 ID 的次数(不限次数)时,系统就会调用该回调函数,直至其被取消注册。

当外部提供程序希望在事件传递给订阅者时收到通知,而不是外部事件对象被逐出时,应使用该函数的此变体。传送事件时,外部提供程序会收到有关这一点的通知,以及接收者的节点 ID 和传送给该接收者的最后一个事件的 ID。请注意,外部提供方可能会收到多次针对同一事件 ID 的通知。具体来说,处理程序可以取消注册外部事件 ID。

如果失败,指向 ExternalEvents 结构体的指针将为 NULL,否则将使用分配给回调函数的开始和结束事件 ID 填充。此指针应用于取消注册这组事件。

如需详细了解回调必须实现的内容,请参阅 FetchExternalEventsFunct 的文档。

详细信息
参数
[in] inImportance
重要性级别
[in] inCallback
用于注册以提取外部事件的回调
[in] inNotifyCallback
用于注册送达通知的回调
[in] inNumEvents
此集中的事件数量
[out] outLastEventID
指向 event_id_t; 的指针;成功注册外部事件后,此函数会存储与外部事件块的最后一个事件 ID 相对应的事件 ID。该参数可以为 NULL。
返回值
WEAVE_ERROR_NO_MEMORY
如果没有更多可用的回调槽。
WEAVE_ERROR_INVALID_ARGUMENT
Null 函数回调或没有要注册的事件。
WEAVE_NO_ERROR
成功时。

RegisterEventCallbackForImportance

WEAVE_ERROR RegisterEventCallbackForImportance(
  ImportanceType inImportance,
  FetchExternalEventsFunct inFetchCallback,
  size_t inNumEvents,
  event_id_t *outLastEventID
)

用于注册一组外部存储的事件的公共 API。

注册 FetchExternalEventsFunct 形式的回调。此 API 要求平台知道注册时的事件数量。内部工作原理也要求此数字为常量。由于此 API 不允许平台注册特定事件 ID,因此这会阻止平台持久存储事件(至少使用唯一事件 ID 是这样)。

每当订阅者尝试提取该范围内的事件 ID 的次数(不限次数)时,系统就会调用该回调函数,直至其被取消注册。

当外部提供程序在传递外部事件和逐出外部事件对象时均需要通知时,应使用该函数的此变体。

如果失败,指向 ExternalEvents 结构体的指针将为 NULL,否则将使用分配给回调函数的开始和结束事件 ID 填充。此指针应用于取消注册这组事件。

如需详细了解回调必须实现的内容,请参阅 FetchExternalEventsFunct 的文档。

详细信息
参数
[in] inImportance
重要性级别
[in] inCallback
用于注册以获取外部事件的回调
[in] inNumEvents
此集中的事件数量
[out] outLastEventID
指向 event_id_t; 的指针;成功注册外部事件后,此函数会存储与外部事件块的最后一个事件 ID 相对应的事件 ID。该参数可以为 NULL。
返回值
WEAVE_ERROR_NO_MEMORY
如果没有更多可用的回调槽。
WEAVE_ERROR_INVALID_ARGUMENT
Null 函数回调或没有要注册的事件。
WEAVE_NO_ERROR
成功时。

ScheduleFlushIfNeeded

WEAVE_ERROR ScheduleFlushIfNeeded(
  bool inFlushRequested
)

安排日志分流任务。

函数会决定是否安排任务分流进程,如果是,则会安排 LoggingFlushHandler 在 Weave 线程上异步运行。

安排 flush 的决定取决于以下三个因素:

显式请求刷新缓冲区

事件缓冲区的状态以及尚未与事件使用方同步的数据量

是否已存在待处理的请求刷新请求事件。

计划刷新的显式请求是通过输入参数传递的。

当事件缓冲区包含足够的数据,值得启动新的分流时,通常会安排自动刷新。根据分流策略,也可以考虑其他触发条件,例如分流之间的最短和最长时间。

事件日志的待处理状态由 mUploadRequested 变量表示。由于此函数可以由多个线程调用,因此必须以原子方式读取和设置 mUploadRequested,以避免在发送通知之前调度冗余 LoggingFlushHandler

详细信息
参数
inRequestFlush
一个布尔值,表示无论内部缓冲区管理政策是否应该安排刷新。
返回值
WEAVE_ERROR_INCORRECT_STATE
LoggingManagement 模块未完全初始化。
WEAVE_NO_ERROR
成功时。

SerializeEvents

WEAVE_ERROR SerializeEvents(
  TLVWriter & writer
)

序列化所有重要类型的 Weave 事件。

将 WeaveCircularTLVBuffer 中的事件和相关状态序列化到提供的缓冲区中。

此方法旨在供在休眠时不保留 RAM 的设备使用,允许它们在进入休眠状态前保留事件,从而防止丢失事件

SetBDXUploader

void SetBDXUploader(
  LogBDXUpload *inUploader
)

SetExchangeManager

WEAVE_ERROR SetExchangeManager(
  nl::Weave::WeaveExchangeManager *inMgr
)

设置要与此日志记录子系统搭配使用的 WeaveExchangeManager

在某些平台上,这可能需要与上面的 CreateLoggingManagement() 分开进行。

详细信息
参数
[in] inMgr
WeaveExchangeManager,以便与此日志记录子系统配合使用

SetLoggingEndpoint

WEAVE_ERROR SetLoggingEndpoint(
  event_id_t *inEventEndpoints,
  size_t inNumImportanceLevels,
  size_t & outLoggingPosition
)

SkipEvent

void SkipEvent(
  EventLoadOutContext *aContext
)

用于跳过编写与分配的事件 ID 对应的事件的辅助函数。

详细信息
参数
[in,out] aContext
EventLoadOutContext,使用缓冲区的有状态信息初始化。BlitEvent 使用此上下文更新和保留状态。

ThrottleLogger

void ThrottleLogger(
  void
)

ThrottleLogger 将有效日志记录级别提升到生产级别。

UnregisterEventCallbackForImportance

void UnregisterEventCallbackForImportance(
  ImportanceType inImportance,
  event_id_t inEventID
)

用于取消注册一组外部存储事件的公共 API。

取消注册回调将阻止 LoggingManagement 针对一组事件调用该回调。LoggingManagement 将不再向订阅者发送这些事件 ID。

其目的是让一个函数一次提供一组事件。如果需要使用同一函数注册一组新的事件,则应先取消注册回调,然后再重新注册。这意味着无法再提取原始的一组事件。

此函数将无条件成功运行。如果回调从未注册或已经取消注册,则为空操作。

详细信息
参数
[in] inImportance
重要性级别
[in] inEventID
与要取消注册的外部事件块中的任意事件对应的事件 ID。

UnthrottleLogger

void UnthrottleLogger(
  void
)

UnthrottleLogger 可将有效日志记录级别恢复到已配置的日志记录级别。

公共静态函数

CreateLoggingManagement

void CreateLoggingManagement(
  nl::Weave::WeaveExchangeManager *inMgr,
  size_t inNumBuffers,
  const LogStorageResources *const inLogStorageResources
)

创建 LoggingManagement 对象,并使用提供的资源初始化日志记录管理子系统。

使用一个 LogStorageResources 数组初始化 LoggingManagement。数组必须为每个有效的重要性级别提供一项资源,数组元素中的数值必须是重要性递增的数字值(以及重要性级别逐渐降低);数组中的第一个元素对应为最关键事件分配的资源,最后一个元素对应最不重要的事件。

详细信息
参数
[in] inMgr
WeaveExchangeManager,以便与此日志记录子系统配合使用
[in] inNumBuffers
inLogStorageResources 数组中的元素数
[in] inLogStorageResources
每个重要性级别的 LogStorageResources 数组。

DestroyLoggingManagement

void DestroyLoggingManagement(
  void
)

在关停时执行我们需要的任何操作。

GetInstance

LoggingManagement & GetInstance(
  void
)