1 /*
2  * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "dcamera_hisysevent_adapter.h"
17 
18 #include "hisysevent.h"
19 #include "securec.h"
20 
21 #include "anonymous_string.h"
22 #include "distributed_camera_errno.h"
23 #include "distributed_hardware_log.h"
24 
25 namespace OHOS {
26 namespace DistributedHardware {
27 namespace {
28 constexpr int32_t MSG_MAX_LEN = 2048;
29 constexpr int32_t ENUM_STREAMTYPE_LEN = 2;
30 constexpr int32_t ENUM_ENCODETYPE_LEN = 4;
31 using HiSysEventNameSpace = OHOS::HiviewDFX::HiSysEvent;
32 const std::string ENUM_STREAMTYPE_STRINGS[] = {
33     "CONTINUOUS_FRAME", "SNAPSHOT_FRAME"
34 };
35 const std::string ENUM_ENCODETYPE_STRINGS[] = {
36     "ENCODE_TYPE_NULL", "ENCODE_TYPE_H264", "ENCODE_TYPE_H265", "ENCODE_TYPE_JPEG"
37 };
38 }
39 
ReportDcamerInitFail(const std::string & eventName,int32_t errCode,const std::string & errMsg)40 void ReportDcamerInitFail(const std::string& eventName, int32_t errCode, const std::string& errMsg)
41 {
42     int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
43         eventName,
44         HiSysEventNameSpace::EventType::FAULT,
45         "ERRCODE", errCode,
46         "MSG", errMsg);
47     if (ret != DCAMERA_OK) {
48         DHLOGE("Write HiSysEvent error ret %{public}d, errMsg %{public}s.", ret, errMsg.c_str());
49     }
50 }
51 
ReportRegisterCameraFail(const std::string & eventName,const std::string & devId,const std::string & dhId,std::string version,const std::string & errMsg)52 void ReportRegisterCameraFail(const std::string& eventName, const std::string& devId, const std::string& dhId,
53     std::string version, const std::string& errMsg)
54 {
55     int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
56         eventName,
57         HiSysEventNameSpace::EventType::FAULT,
58         "DEVID", devId,
59         "DHID", dhId,
60         "VERSION", version,
61         "MSG", errMsg);
62     if (ret != DCAMERA_OK) {
63         DHLOGE("Write HiSysEvent error ret %d, devId %s, dhId %s, errMsg %s.", ret, GetAnonyString(devId).c_str(),
64             dhId.c_str(), errMsg.c_str());
65     }
66 }
67 
ReportDcamerOptFail(const std::string & eventName,int32_t errCode,const std::string & errMsg)68 void ReportDcamerOptFail(const std::string& eventName, int32_t errCode, const std::string& errMsg)
69 {
70     int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
71         eventName,
72         HiSysEventNameSpace::EventType::FAULT,
73         "ERRCODE", errCode,
74         "MSG", errMsg);
75     if (ret != DCAMERA_OK) {
76         DHLOGE("Write HiSysEvent error ret %{public}d, errMsg %{public}s.", ret, errMsg.c_str());
77     }
78 }
79 
ReportSaEvent(const std::string & eventName,int32_t saId,const std::string & errMsg)80 void ReportSaEvent(const std::string& eventName, int32_t saId, const std::string& errMsg)
81 {
82     int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
83         eventName,
84         HiSysEventNameSpace::EventType::BEHAVIOR,
85         "SAID", saId,
86         "MSG", errMsg);
87     if (ret != DCAMERA_OK) {
88         DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
89     }
90 }
91 
ReportRegisterCameraEvent(const std::string & eventName,const std::string & devId,const std::string & dhId,std::string version,const std::string & errMsg)92 void ReportRegisterCameraEvent(const std::string& eventName, const std::string& devId, const std::string& dhId,
93     std::string version, const std::string& errMsg)
94 {
95     int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
96         eventName,
97         HiSysEventNameSpace::EventType::BEHAVIOR,
98         "DEVID", devId,
99         "DHID", dhId,
100         "VERSION", version,
101         "MSG", errMsg);
102     if (ret != DCAMERA_OK) {
103         DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
104     }
105 }
106 
ReportCameraOperaterEvent(const std::string & eventName,const std::string & devId,const std::string & dhId,const std::string & errMsg)107 void ReportCameraOperaterEvent(const std::string& eventName, const std::string& devId, const std::string& dhId,
108     const std::string& errMsg)
109 {
110     int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
111         eventName,
112         HiSysEventNameSpace::EventType::BEHAVIOR,
113         "DEVID", devId,
114         "DHID", dhId,
115         "MSG", errMsg);
116     if (ret != DCAMERA_OK) {
117         DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
118     }
119 }
120 
ReportStartCaptureEvent(const std::string & eventName,EventCaptureInfo & capture,const std::string & errMsg)121 void ReportStartCaptureEvent(const std::string& eventName, EventCaptureInfo& capture, const std::string& errMsg)
122 {
123     if (capture.encodeType_ < 0 || capture.encodeType_ >= ENUM_ENCODETYPE_LEN ||
124         capture.type_ < 0 || capture.type_ >= ENUM_STREAMTYPE_LEN) {
125         DHLOGE("Invalid capture parameters.");
126         return;
127     }
128     int32_t ret = HiSysEventWrite(HiSysEventNameSpace::Domain::DISTRIBUTED_CAMERA,
129         eventName,
130         HiSysEventNameSpace::EventType::BEHAVIOR,
131         "WIDTH", capture.width_,
132         "HEIGHT", capture.height_,
133         "FORMAT", capture.format_,
134         "ISCAPTURE", capture.isCapture_ ? "true" : "false",
135         "ENCODETYPE", ENUM_ENCODETYPE_STRINGS[capture.encodeType_],
136         "STREAMTYPE", ENUM_STREAMTYPE_STRINGS[capture.type_],
137         "MSG", errMsg);
138     if (ret != DCAMERA_OK) {
139         DHLOGE("Write HiSysEvent error, ret:%{public}d, errMsg %{public}s.", ret, errMsg.c_str());
140     }
141 }
142 
CreateMsg(const char * format,...)143 std::string CreateMsg(const char *format, ...)
144 {
145     va_list args;
146     va_start(args, format);
147     char msg[MSG_MAX_LEN] = {0};
148     if (vsnprintf_s(msg, sizeof(msg), sizeof(msg) - 1, format, args) < 0) {
149         DHLOGE("failed to call vsnprintf_s");
150         va_end(args);
151         return "";
152     }
153     va_end(args);
154     return msg;
155 }
156 } // namespace DistributedHardware
157 } // namespace OHOS