* Copyright (c) 2022-2024 Huawei Device Co., Ltd.
* 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.
*/
#include "dcamera_hisysevent_adapter.h"
#include "hisysevent.h"
#include "securec.h"
#include "anonymous_string.h"
#include "distributed_camera_errno.h"
#include "distributed_hardware_log.h"
namespace OHOS {
namespace DistributedHardware {
namespace {
constexpr int32_t MSG_MAX_LEN = 2048;
constexpr int32_t ENUM_STREAMTYPE_LEN = 2;
constexpr int32_t ENUM_ENCODETYPE_LEN = 4;
using HiSysEventNameSpace = OHOS::HiviewDFX::HiSysEvent;
const std::string ENUM_STREAMTYPE_STRINGS[] = {
"CONTINUOUS_FRAME", "SNAPSHOT_FRAME"
};
const std::string ENUM_ENCODETYPE_STRINGS[] = {
"ENCODE_TYPE_NULL", "ENCODE_TYPE_H264", "ENCODE_TYPE_H265", "ENCODE_TYPE_JPEG"
};
}
void ReportDcamerInitFail(const std::string& eventName, int32_t errCode, const std::string& errMsg)
{
int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
eventName,
HiSysEventNameSpace::EventType::FAULT,
"ERRCODE", errCode,
"MSG", errMsg);
if (ret != DCAMERA_OK) {
DHLOGE("Write HiSysEvent error ret %{public}d, errMsg %{public}s.", ret, errMsg.c_str());
}
}
void ReportRegisterCameraFail(const std::string& eventName, const std::string& devId, const std::string& dhId,
std::string version, const std::string& errMsg)
{
int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
eventName,
HiSysEventNameSpace::EventType::FAULT,
"DEVID", devId,
"DHID", dhId,
"VERSION", version,
"MSG", errMsg);
if (ret != DCAMERA_OK) {
DHLOGE("Write HiSysEvent error ret %d, devId %s, dhId %s, errMsg %s.", ret, GetAnonyString(devId).c_str(),
dhId.c_str(), errMsg.c_str());
}
}
void ReportDcamerOptFail(const std::string& eventName, int32_t errCode, const std::string& errMsg)
{
int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
eventName,
HiSysEventNameSpace::EventType::FAULT,
"ERRCODE", errCode,
"MSG", errMsg);
if (ret != DCAMERA_OK) {
DHLOGE("Write HiSysEvent error ret %{public}d, errMsg %{public}s.", ret, errMsg.c_str());
}
}
void ReportSaEvent(const std::string& eventName, int32_t saId, const std::string& errMsg)
{
int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
eventName,
HiSysEventNameSpace::EventType::BEHAVIOR,
"SAID", saId,
"MSG", errMsg);
if (ret != DCAMERA_OK) {
DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
}
}
void ReportRegisterCameraEvent(const std::string& eventName, const std::string& devId, const std::string& dhId,
std::string version, const std::string& errMsg)
{
int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
eventName,
HiSysEventNameSpace::EventType::BEHAVIOR,
"DEVID", devId,
"DHID", dhId,
"VERSION", version,
"MSG", errMsg);
if (ret != DCAMERA_OK) {
DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
}
}
void ReportCameraOperaterEvent(const std::string& eventName, const std::string& devId, const std::string& dhId,
const std::string& errMsg)
{
int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
eventName,
HiSysEventNameSpace::EventType::BEHAVIOR,
"DEVID", devId,
"DHID", dhId,
"MSG", errMsg);
if (ret != DCAMERA_OK) {
DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
}
}
void ReportStartCaptureEvent(const std::string& eventName, EventCaptureInfo& capture, const std::string& errMsg)
{
if (capture.encodeType_ < 0 || capture.encodeType_ >= ENUM_ENCODETYPE_LEN ||
capture.type_ < 0 || capture.type_ >= ENUM_STREAMTYPE_LEN) {
DHLOGE("Invalid capture parameters.");
return;
}
int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
eventName,
HiSysEventNameSpace::EventType::BEHAVIOR,
"WIDTH", capture.width_,
"HEIGHT", capture.height_,
"FORMAT", capture.format_,
"ISCAPTURE", capture.isCapture_ ? "true" : "false",
"ENCODETYPE", ENUM_ENCODETYPE_STRINGS[capture.encodeType_],
"STREAMTYPE", ENUM_STREAMTYPE_STRINGS[capture.type_],
"MSG", errMsg);
if (ret != DCAMERA_OK) {
DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
}
}
std::string CreateMsg(const char *format, ...)
{
va_list args;
va_start(args, format);
char msg[MSG_MAX_LEN] = {0};
if (vsnprintf_s(msg, sizeof(msg), sizeof(msg) - 1, format, args) < 0) {
DHLOGE("failed to call vsnprintf_s");
va_end(args);
return "";
}
va_end(args);
return msg;
}
}
}