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 預設為呼叫時的目前時間),
  • 「根」事件來源的區段 (事件來源和特徵 ID);如果為 NULL,則預設為目前的裝置。事件會標示為與發出呼叫的裝置相關,
  • 用於分組事件 ID 的相關事件 ID;當相關事件 ID 為 0 時,該事件會標示為與任何其他事件無關;
  • 急迫性;預設為不會緊急

詳細資料
參數
[in] inSchema
結構定義用來定義這項事件的重要性、設定檔 ID 和結構類型。
[in] inEventWriter
此回呼會叫用以實際序列化事件資料
[in] inAppData
回呼的應用程式結構定義。
[in] inOptions
事件中繼資料的選項。可以是空值。
傳回
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 結構體的指標會在失敗時為空值,否則將會填入指派給回呼的開始和結束事件 ID。此指標應用於取消註冊一組事件。

如要進一步瞭解回呼必須實作的項目,請參閱 FetchExternalEventsFunct 說明文件。

詳細資料
參數
[in] inImportance
重要性層級
[in] inFetchCallback
註冊以擷取外部事件的回呼
[in] inNotifyCallback
用於登錄運送通知的回呼
[in] inEvictedCallback
用於註冊撤銷通知的回呼
[in] inNumEvents
這個組合中的事件數量
[out] outLastEventID
指向 event_id_t;成功註冊外部事件時,函式會儲存與外部事件區塊的最後一個事件 ID 相對應的事件 ID。參數可以是空值。
傳回值
WEAVE_ERROR_NO_MEMORY
如果沒有其他可用的回呼運算單元。
WEAVE_ERROR_INVALID_ARGUMENT
空值函式回呼函式或沒有可註冊的事件。
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 結構體的指標會在失敗時為空值,否則將會填入指派給回呼的開始和結束事件 ID。此指標應用於取消註冊一組事件。

如要進一步瞭解回呼必須實作的項目,請參閱 FetchExternalEventsFunct 說明文件。

詳細資料
參數
[in] inImportance
重要性層級
[in] inCallback
註冊以擷取外部事件的回呼
[in] inNotifyCallback
用於登錄運送通知的回呼
[in] inNumEvents
這個組合中的事件數量
[out] outLastEventID
指向 event_id_t;成功註冊外部事件時,函式會儲存與外部事件區塊的最後一個事件 ID 相對應的事件 ID。參數可以是空值。
傳回值
WEAVE_ERROR_NO_MEMORY
如果沒有其他可用的回呼運算單元。
WEAVE_ERROR_INVALID_ARGUMENT
空值函式回呼函式或沒有可註冊的事件。
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 結構體的指標會在失敗時為空值,否則將會填入指派給回呼的開始和結束事件 ID。此指標應用於取消註冊一組事件。

如要進一步瞭解回呼必須實作的項目,請參閱 FetchExternalEventsFunct 說明文件。

詳細資料
參數
[in] inImportance
重要性層級
[in] inCallback
註冊以擷取外部事件的回呼
[in] inNumEvents
這個組合中的事件數量
[out] outLastEventID
指向 event_id_t;成功註冊外部事件時,函式會儲存與外部事件區塊的最後一個事件 ID 相對應的事件 ID。參數可以是空值。
傳回值
WEAVE_ERROR_NO_MEMORY
如果沒有其他可用的回呼運算單元。
WEAVE_ERROR_INVALID_ARGUMENT
空值函式回呼函式或沒有可註冊的事件。
WEAVE_NO_ERROR
成功時。

ScheduleFlushIfNeeded

WEAVE_ERROR ScheduleFlushIfNeeded(
  bool inFlushRequested
)

排定記錄檔卸載工作。

此函式會決定是否要排定工作卸載程序,如果是,則會排定在 Weave 執行緒上以非同步方式執行 LoggingFlushHandler

安排清除時間的原因取決於三個因素:

清除緩衝區的明確要求

事件緩衝區的狀態,以及尚未與事件取用端同步的資料量

指出是否有待處理的要求清除要求事件。

透過輸入參數傳遞排程清除的明確要求。

一般而言,自動清除作業會安排在事件緩衝區含有足夠資料,以便啟動新的卸載。視卸載策略而定,系統可能還會將卸載間隔時間的最短和最長時間等觸發納入考量。

事件記錄的待處理狀態會以 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
)