/* * * Copyright (c) 2023 Project CHIP Authors * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include namespace chip { namespace app { namespace Clusters { namespace DiagnosticLogs { typedef uint16_t LogSessionHandle; // The value UINT16_MAX will be used as an invalid log session handle and must not be used as a valid value for LogSessionHandle constexpr LogSessionHandle kInvalidLogSessionHandle = UINT16_MAX; /** @brief * Defines methods for implementing application-specific logic for getting the log data from the diagnostic logs provider * DiagnosticLogsProviderDelegate. */ class DiagnosticLogsProviderDelegate { public: DiagnosticLogsProviderDelegate() = default; virtual ~DiagnosticLogsProviderDelegate() = default; /** * Called to start log collection for the log type passed in. * * @param[in] intent The type of log for which the start of log collection is requested. * @param[out] outHandle The unique log session handle that identifies the log collection session that has been started. * @param[out] outTimeStamp An optional value with the timestamp of the oldest log entry * @param[out] outTimeSinceBoot An optional value with the time since boot of the oldest log entry * Returns kInvalidLogSessionHandle if there are no logs of the intent. */ virtual CHIP_ERROR StartLogCollection(IntentEnum intent, LogSessionHandle & outHandle, Optional & outTimeStamp, Optional & outTimeSinceBoot) = 0; /** * Called to end log collection for the log session identified by sessionHandle. * This must be called if StartLogCollection happens successfully and a valid sessionHandle has been * returned from StartLogCollection. * * @param[in] sessionHandle The unique handle for this log session returned from a call to StartLogCollection. * */ virtual CHIP_ERROR EndLogCollection(LogSessionHandle sessionHandle) = 0; /** * Called to get the next chunk for the log session identified by sessionHandle. * The outBuffer is resized to the actual size of data that was successfully read from the file. * Should return CHIP_NO_ERROR if we were able to read successfully from the file into the buffer, otherwise * an appropriate error code is returned. * * @param[in] sessionHandle The unique handle for this log session returned from a call to StartLogCollection. * @param[out] outBuffer The buffer thats passed in by the caller to write to. * @param[out] outIsEndOfLog Set to true if there is no more log data otherwise set to false. */ virtual CHIP_ERROR CollectLog(LogSessionHandle sessionHandle, MutableByteSpan & outBuffer, bool & outIsEndOfLog) = 0; /** * Called to get the file size for the log type passed in. * * @param[in] intent The type of log for which the file size is requested. * * Returns the size of the logs for the target intent. Retuns 0 if there are no logs for the given intent, otherwise returns the * size in bytes. */ virtual size_t GetSizeForIntent(IntentEnum intent) = 0; /** * Called to get the newest diagnostic log entries for the target intent. * * @param[in] intent The intent for which the log size is requested. * @param[out] outBuffer The buffer thats passed in by the caller to write to. * @param[out] outTimeStamp An optional value with the timestamp of the oldest log entry * @param[out] outTimeSinceBoot An optional value with the time since boot of the oldest log entry * */ virtual CHIP_ERROR GetLogForIntent(IntentEnum intent, MutableByteSpan & outBuffer, Optional & outTimeStamp, Optional & outTimeSinceBoot) = 0; }; } // namespace DiagnosticLogs } // namespace Clusters } // namespace app } // namespace chip