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 )
根據事件記錄通訊協定寫入事件標頭和資料的輔助函式。
詳細資料 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
CancelShutdownInProgress
void CancelShutdownInProgress( void )
將 mShutdownInProgress 旗標設為 false。
CheckShouldRunWDM
bool CheckShouldRunWDM( void )
決定是否要根據未排定上傳的事件緩衝區中的位元組數來卸載事件。
函式的行為是透過 WEAVE_CONFIG_EVENT_LOGGING_BYTE_THRESHOLD 常數控制。如果系統自上次傳送 WDM 通知後寫入超過該數量,函式將指出應觸發 NotificationEngine。
詳細資料 | |||||
---|---|---|---|---|---|
傳回值 |
|
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 或記錄中的空間用盡為止。這個函式會終止在事件邊界寫入事件。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
GetBytesWritten
uint32_t GetBytesWritten( void ) const
取得此記錄自執行個體執行個體化以來寫入的位元組總數 (涵蓋所有事件重要性)。
詳細資料 | |
---|---|
傳回 |
寫入記錄的位元組數。
|
GetEventReader
WEAVE_ERROR GetEventReader( nl::Weave::TLV::TLVReader & ioReader, ImportanceType inImportance )
這個輔助方法適用於檢查記憶體內記錄緩衝區。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回 |
WEAVE_NO_ERROR 無條件。
|
GetFirstEventID
event_id_t GetFirstEventID( ImportanceType inImportance )
擷取目前針對特定重要性等級儲存的第一個事件 ID。
詳細資料 | |||
---|---|---|---|
參數 |
|
||
傳回 |
event_id_t 目前儲存該活動重要性的活動 ID
|
GetLastEventID
event_id_t GetLastEventID( ImportanceType inImportance )
擷取特定重要性等級的最近更新 ID。
詳細資料 | |||
---|---|---|---|
參數 |
|
||
傳回 |
針對該活動重要性使用 event_id_t 最近的活動 ID
|
IsShutdownInProgress
bool IsShutdownInProgress( void )
檢查 mShutdownInProgress 旗標。
IsValid
bool IsValid( void )
LogEvent
event_id_t LogEvent( const EventSchema & inSchema, EventWriterFunct inEventWriter, void *inAppData, const EventOptions *inOptions )
透過回呼記錄事件,並提供選項。
該函式會記錄以 EventWriterFunct 表示的事件,以及應用程式專屬的 appData
情境。函式會寫入事件中繼資料,並使用 nl::Weave::TLV::TLVWriter 參照和 inAppData
結構定義呼叫 inEventWriter
,如此一來,使用者程式碼就可以將事件資料直接發送到事件記錄中。這種形式的事件記錄會使記憶體用量降到最低,因為事件資料會直接序列化到目標緩衝區中。事件資料「必須」包含要在 inProfileID
和 inEventType
識別的結構定義中解讀的事件資料。系統會忽略第一個元素的標記。事件記錄系統就會換成 eventData 代碼。
如果結構定義重要性超過 LoggingConfiguration 中指定的記錄門檻,系統就會記錄事件。如果事件的重要性未達目前的門檻,系統就會捨棄該事件,且函式會傳回 0
做為產生的事件 ID。
此叫用的變體允許呼叫端設定任何 EventOptions
的組合:
- 時間戳記 (如果 0 預設為呼叫時的目前時間),
- 「根」事件來源的區段 (事件來源和特徵 ID);如果為 NULL,則預設為目前的裝置。事件會標示為與發出呼叫的裝置相關,
- 用於分組事件 ID 的相關事件 ID;當相關事件 ID 為 0 時,該事件會標示為與任何其他事件無關;
- 急迫性;預設為不會緊急
詳細資料 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回 |
event_id_t 事件 ID (如果事件寫入記錄),否則為 0。
|
LoggingManagement
LoggingManagement( nl::Weave::WeaveExchangeManager *inMgr, size_t inNumBuffers, const LogStorageResources *const inLogStorageResources )
LoggingManagement 建構函式。
使用 LogStorageResources 陣列初始化 LoggingManagement。陣列必須為每個有效重要性等級提供一項資源,陣列的元素必須是提高重要性數值 (並提高重要性);陣列中的第一個元素會對應至為最關鍵事件分配的資源,而最後一個元素則對應至最低的重要事件。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
LoggingManagement
LoggingManagement( void )
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 說明文件。
詳細資料 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||||||
傳回值 |
|
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 說明文件。
詳細資料 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||||
傳回值 |
|
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 說明文件。
詳細資料 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
ScheduleFlushIfNeeded
WEAVE_ERROR ScheduleFlushIfNeeded( bool inFlushRequested )
排定記錄檔卸載工作。
此函式會決定是否要排定工作卸載程序,如果是,則會排定在 Weave 執行緒上以非同步方式執行 LoggingFlushHandler
。
安排清除時間的原因取決於三個因素:
清除緩衝區的明確要求
事件緩衝區的狀態,以及尚未與事件取用端同步的資料量
指出是否有待處理的要求清除要求事件。
透過輸入參數傳遞排程清除的明確要求。
一般而言,自動清除作業會安排在事件緩衝區含有足夠資料,以便啟動新的卸載。視卸載策略而定,系統可能還會將卸載間隔時間的最短和最長時間等觸發納入考量。
事件記錄的待處理狀態會以 mUploadRequested
變數表示。由於這個函式可能由多個執行緒呼叫,因此 mUploadRequested
必須獨立讀取及設定,以免在傳送通知前安排多餘的 LoggingFlushHandler
。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回值 |
|
SerializeEvents
WEAVE_ERROR SerializeEvents( TLVWriter & writer )
將所有重要類型的 Weave 事件序列化。
將 WeaveCircularTLVBuffer 中的事件和相關狀態序列化到提供的緩衝區。
這個方法適用於未在休眠時保留 RAM 的裝置,讓裝置在入睡前保留事件,以防止遺失事件
SetBDXUploader
void SetBDXUploader( LogBDXUpload *inUploader )
SetExchangeManager
WEAVE_ERROR SetExchangeManager( nl::Weave::WeaveExchangeManager *inMgr )
設定要與這個記錄子系統搭配使用的 WeaveExchangeManager。
在某些平台上,這可能需要與上方的 CreateLoggingManagement() 分開進行。
詳細資料 | |||
---|---|---|---|
參數 |
|
SetLoggingEndpoint
WEAVE_ERROR SetLoggingEndpoint( event_id_t *inEventEndpoints, size_t inNumImportanceLevels, size_t & outLoggingPosition )
SkipEvent
void SkipEvent( EventLoadOutContext *aContext )
輔助函式略過寫入與已分配事件 ID 相對應的事件。
詳細資料 | |||
---|---|---|---|
參數 |
|
ThrottleLogger
void ThrottleLogger( void )
ThrottleLogger 將有效記錄等級提升到實際工作環境等級。
UnregisterEventCallbackForImportance
void UnregisterEventCallbackForImportance( ImportanceType inImportance, event_id_t inEventID )
用於取消註冊外部儲存的一組事件的公用 API。
取消註冊回呼可避免 LoggingManagement 呼叫一組事件的回呼。LoggingManagement 不會再將這些事件 ID 傳送給訂閱者。
使用意圖是讓單一函式一次提供一組事件。如要使用相同函式登錄一組新的事件,請先取消註冊回呼,然後再重新註冊。這表示系統無法再擷取原本的事件組合。
這個函式會無條件執行。如果回呼從未註冊或取消註冊,則免人工管理。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
UnthrottleLogger
void UnthrottleLogger( void )
UnthrottleLogger 將有效記錄等級還原為已設定的記錄層級。
公開的靜態函式
CreateLoggingManagement
void CreateLoggingManagement( nl::Weave::WeaveExchangeManager *inMgr, size_t inNumBuffers, const LogStorageResources *const inLogStorageResources )
建立 LoggingManagement 物件,並使用提供的資源初始化記錄管理子系統。
使用 LogStorageResources 陣列初始化 LoggingManagement。陣列必須為每個有效重要性等級提供一項資源,陣列的元素必須是提高重要性數值 (並提高重要性);陣列中的第一個元素會對應至為最關鍵事件分配的資源,而最後一個元素則對應至最低的重要事件。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
DestroyLoggingManagement
void DestroyLoggingManagement( void )
執行關機時所需的任何操作。