1 /*
2 * Copyright (c) 2021-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 #include "napi_hiappevent_init.h"
16
17 #include <map>
18 #include <string>
19
20 #include "napi_util.h"
21
22 namespace OHOS {
23 namespace HiviewDFX {
24 namespace NapiHiAppEventInit {
25 namespace {
26 constexpr int FAULT_EVENT_TYPE = 1;
27 constexpr int STATISTIC_EVENT_TYPE = 2;
28 constexpr int SECURITY_EVENT_TYPE = 3;
29 constexpr int BEHAVIOR_EVENT_TYPE = 4;
30
31 const std::string EVENT_CLASS_NAME = "Event";
32 const std::string EVENT_CLASS_NAME_V9 = "event";
33 const std::string PARAM_CLASS_NAME = "Param";
34 const std::string PARAM_CLASS_NAME_V9 = "param";
35 const std::string EVENT_TYPE_CLASS_NAME = "EventType";
36 const std::string DOMAIN_CLASS_NAME = "domain";
37
ClassConstructor(napi_env env,napi_callback_info info)38 napi_value ClassConstructor(napi_env env, napi_callback_info info)
39 {
40 size_t argc = 0;
41 napi_value argv = nullptr;
42 napi_value thisArg = nullptr;
43 void* data = nullptr;
44 napi_get_cb_info(env, info, &argc, &argv, &thisArg, &data);
45
46 napi_value global = 0;
47 napi_get_global(env, &global);
48
49 return thisArg;
50 }
51
InitEventTypeMap(napi_env env,std::map<const char *,napi_value> & eventTypeMap)52 void InitEventTypeMap(napi_env env, std::map<const char*, napi_value>& eventTypeMap)
53 {
54 eventTypeMap["FAULT"] = NapiUtil::CreateInt32(env, FAULT_EVENT_TYPE);
55 eventTypeMap["STATISTIC"] = NapiUtil::CreateInt32(env, STATISTIC_EVENT_TYPE);
56 eventTypeMap["SECURITY"] = NapiUtil::CreateInt32(env, SECURITY_EVENT_TYPE);
57 eventTypeMap["BEHAVIOR"] = NapiUtil::CreateInt32(env, BEHAVIOR_EVENT_TYPE);
58 }
59
InitEventMap(napi_env env,std::map<const char *,napi_value> & eventMap)60 void InitEventMap(napi_env env, std::map<const char*, napi_value>& eventMap)
61 {
62 eventMap["USER_LOGIN"] = NapiUtil::CreateString(env, "hiappevent.user_login");
63 eventMap["USER_LOGOUT"] = NapiUtil::CreateString(env, "hiappevent.user_logout");
64 eventMap["DISTRIBUTED_SERVICE_START"] = NapiUtil::CreateString(env, "hiappevent.distributed_service_start");
65 eventMap["APP_CRASH"] = NapiUtil::CreateString(env, "APP_CRASH");
66 eventMap["APP_FREEZE"] = NapiUtil::CreateString(env, "APP_FREEZE");
67 eventMap["APP_LAUNCH"] = NapiUtil::CreateString(env, "APP_LAUNCH");
68 eventMap["SCROLL_JANK"] = NapiUtil::CreateString(env, "SCROLL_JANK");
69 eventMap["CPU_USAGE_HIGH"] = NapiUtil::CreateString(env, "CPU_USAGE_HIGH");
70 eventMap["BATTERY_USAGE"] = NapiUtil::CreateString(env, "BATTERY_USAGE");
71 eventMap["RESOURCE_OVERLIMIT"] = NapiUtil::CreateString(env, "RESOURCE_OVERLIMIT");
72 eventMap["ADDRESS_SANITIZER"] = NapiUtil::CreateString(env, "ADDRESS_SANITIZER");
73 eventMap["MAIN_THREAD_JANK"] = NapiUtil::CreateString(env, "MAIN_THREAD_JANK");
74 }
75
InitParamMap(napi_env env,std::map<const char *,napi_value> & paramMap)76 void InitParamMap(napi_env env, std::map<const char*, napi_value>& paramMap)
77 {
78 paramMap["USER_ID"] = NapiUtil::CreateString(env, "user_id");
79 paramMap["DISTRIBUTED_SERVICE_NAME"] = NapiUtil::CreateString(env, "ds_name");
80 paramMap["DISTRIBUTED_SERVICE_INSTANCE_ID"] = NapiUtil::CreateString(env, "ds_instance_id");
81 }
82
InitDomainMap(napi_env env,std::map<const char *,napi_value> & domainMap)83 void InitDomainMap(napi_env env, std::map<const char*, napi_value>& domainMap)
84 {
85 domainMap["OS"] = NapiUtil::CreateString(env, "OS");
86 }
87
InitConstClassByName(napi_env env,napi_value exports,const std::string & name)88 void InitConstClassByName(napi_env env, napi_value exports, const std::string& name)
89 {
90 std::map<const char*, napi_value> propertyMap;
91 if (name == EVENT_CLASS_NAME || name == EVENT_CLASS_NAME_V9) {
92 InitEventMap(env, propertyMap);
93 } else if (name == PARAM_CLASS_NAME || name == PARAM_CLASS_NAME_V9) {
94 InitParamMap(env, propertyMap);
95 } else if (name == EVENT_TYPE_CLASS_NAME) {
96 InitEventTypeMap(env, propertyMap);
97 } else if (name == DOMAIN_CLASS_NAME) {
98 InitDomainMap(env, propertyMap);
99 } else {
100 return;
101 }
102
103 int i = 0;
104 napi_property_descriptor descriptors[propertyMap.size()];
105 for (auto it : propertyMap) {
106 descriptors[i++] = DECLARE_NAPI_STATIC_PROPERTY(it.first, it.second);
107 }
108
109 napi_value result = nullptr;
110 napi_define_class(env, name.c_str(), NAPI_AUTO_LENGTH, ClassConstructor, nullptr,
111 sizeof(descriptors) / sizeof(*descriptors), descriptors, &result);
112 napi_set_named_property(env, exports, name.c_str(), result);
113 }
114 }
115
InitNapiClass(napi_env env,napi_value exports)116 napi_value InitNapiClass(napi_env env, napi_value exports)
117 {
118 InitConstClassByName(env, exports, EVENT_CLASS_NAME);
119 InitConstClassByName(env, exports, PARAM_CLASS_NAME);
120 InitConstClassByName(env, exports, EVENT_TYPE_CLASS_NAME);
121 return exports;
122 }
123
InitNapiClassV9(napi_env env,napi_value exports)124 napi_value InitNapiClassV9(napi_env env, napi_value exports)
125 {
126 InitConstClassByName(env, exports, EVENT_CLASS_NAME_V9);
127 InitConstClassByName(env, exports, PARAM_CLASS_NAME_V9);
128 InitConstClassByName(env, exports, EVENT_TYPE_CLASS_NAME);
129 InitConstClassByName(env, exports, DOMAIN_CLASS_NAME);
130 return exports;
131 }
132 } // namespace NapiHiAppEventInit
133 } // namespace HiviewDFX
134 } // namespace OHOS
135