1 /*
2 * Copyright (c) 2023 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 #ifndef BASE_EVENT_RAW_INCLUDE_RAW_BASE_DEF_H
17 #define BASE_EVENT_RAW_INCLUDE_RAW_BASE_DEF_H
18
19 #include <cstdarg>
20 #include <cstddef>
21 #include <cstdint>
22 #include <sstream>
23 #include <string>
24
25 namespace OHOS {
26 namespace HiviewDFX {
27 namespace EventRaw {
28 constexpr unsigned int MAX_DOMAIN_LENGTH = 16;
29 constexpr unsigned int MAX_EVENT_NAME_LENGTH = 32;
30 constexpr unsigned int MAX_ARRAY_SIZE = 100;
31
32 constexpr char BASE_INFO_KEY_DOMAIN[] = "domain_";
33 constexpr char BASE_INFO_KEY_NAME[] = "name_";
34 constexpr char BASE_INFO_KEY_TYPE[] = "type_";
35 constexpr char BASE_INFO_KEY_TIME_STAMP[] = "time_";
36 constexpr char BASE_INFO_KEY_TIME_ZONE[] = "tz_";
37 constexpr char BASE_INFO_KEY_ID[] = "id_";
38 constexpr char BASE_INFO_KEY_PID[] = "pid_";
39 constexpr char BASE_INFO_KEY_TID[] = "tid_";
40 constexpr char BASE_INFO_KEY_UID[] = "uid_";
41 constexpr char BASE_INFO_KEY_TRACE_ID[] = "traceid_";
42 constexpr char BASE_INFO_KEY_SPAN_ID[] = "spanid_";
43 constexpr char BASE_INFO_KEY_PARENT_SPAN_ID[] = "pspanid_";
44 constexpr char BASE_INFO_KEY_TRACE_FLAG[] = "trace_flag_";
45
46 template<typename T>
47 inline static constexpr bool isUnsignedNum = std::is_same_v<std::decay_t<T>, std::uint8_t> ||
48 std::is_same_v<std::decay_t<T>, std::uint16_t> || std::is_same_v<std::decay_t<T>, std::uint32_t> ||
49 std::is_same_v<std::decay_t<T>, uint64_t>;
50
51 template<typename T>
52 inline static constexpr bool isSignedNum = std::is_same_v<std::decay_t<T>, std::int8_t> ||
53 std::is_same_v<std::decay_t<T>, std::int16_t> || std::is_same_v<std::decay_t<T>, std::int32_t> ||
54 std::is_same_v<std::decay_t<T>, int64_t>;
55
56 template<typename T>
57 inline static constexpr bool isFloatingPointNum = std::is_same_v<std::decay_t<T>, float> ||
58 std::is_same_v<std::decay_t<T>, double>;
59
60 template<typename T>
61 inline static constexpr bool isString = std::is_same_v<std::decay_t<T>, std::string> ||
62 std::is_same_v<std::decay_t<T>, const char*>;
63
64 template<typename T>
65 inline static constexpr bool isUnsignedNumArray = std::is_same_v<std::decay_t<T>, std::vector<uint8_t>> ||
66 std::is_same_v<std::decay_t<T>, std::vector<uint16_t>> ||
67 std::is_same_v<std::decay_t<T>, std::vector<uint32_t>> || std::is_same_v<std::decay_t<T>, std::vector<uint64_t>>;
68
69 template<typename T>
70 inline static constexpr bool isSignedNumArray = std::is_same_v<std::decay_t<T>, std::vector<int8_t>> ||
71 std::is_same_v<std::decay_t<T>, std::vector<int16_t>> ||
72 std::is_same_v<std::decay_t<T>, std::vector<int32_t>> || std::is_same_v<std::decay_t<T>, std::vector<int64_t>>;
73
74 template<typename T>
75 inline static constexpr bool isFloatingPointNumArray = std::is_same_v<std::decay_t<T>, std::vector<float>> ||
76 std::is_same_v<std::decay_t<T>, std::vector<double>>;
77
78 #pragma pack(1)
79 struct HiSysEventHeader {
80 /* Event domain */
81 char domain[MAX_DOMAIN_LENGTH + 1];
82
83 /* Event name */
84 char name[MAX_EVENT_NAME_LENGTH + 1];
85
86 /* Event timestamp */
87 uint64_t timestamp;
88
89 /* Time zone */
90 uint8_t timeZone;
91
92 /* User id */
93 uint32_t uid;
94
95 /* Process id */
96 uint32_t pid;
97
98 /* Thread id */
99 uint32_t tid;
100
101 /* Event hash code*/
102 uint64_t id;
103
104 /* Event type */
105 uint8_t type : 2;
106
107 /* Trace info flag*/
108 uint8_t isTraceOpened : 1;
109 };
110
111 struct TraceInfo {
112 /* Hitrace flag */
113 uint8_t traceFlag;
114
115 /* Hitrace id */
116 uint64_t traceId;
117
118 /* Hitrace span id */
119 uint32_t spanId;
120
121 /* Hitrace parent span id */
122 uint32_t pSpanId;
123 };
124
125 struct ParamValueType {
126 /* Array flag */
127 uint8_t isArray : 1;
128
129 /* Type of parameter value */
130 uint8_t valueType : 4;
131
132 /* Byte count of parameter value */
133 uint8_t valueByteCnt : 3;
134 };
135 #pragma pack()
136
137 enum ValueType: uint8_t {
138 // Unknown value
139 UNKNOWN = 0,
140
141 // Bool value
142 BOOL,
143
144 // Int8_t value
145 INT8,
146
147 // Uint8_t value
148 UINT8,
149
150 // Int16_t value
151 INT16,
152
153 // Uint16_t value
154 UINT16,
155
156 // Int32_t value
157 INT32,
158
159 // Uint32_t value
160 UINT32,
161
162 // Int64_t value
163 INT64,
164
165 // Uint64_t value
166 UINT64,
167
168 // Float value
169 FLOAT,
170
171 // Double value
172 DOUBLE,
173
174 // String value
175 STRING,
176 };
177
178 enum EncodeType: int8_t {
179 // Varint encoding
180 VARINT = 0,
181
182 // Length delimited encoding
183 LENGTH_DELIMITED = 1,
184
185 // Reserved
186 INVALID = 4,
187 };
188
189 constexpr size_t HISYSEVENT_HEADER_SIZE = sizeof(struct HiSysEventHeader);
190
191 int ParseTimeZone(const std::string& tzStr);
192 std::string ParseTimeZone(const uint8_t tzVal);
193 size_t GetValidDataMinimumByteCount();
194
195 template<typename T>
TransNumToHexStr(T num)196 std::string TransNumToHexStr(T num)
197 {
198 std::stringstream ss;
199 ss << std::hex << num;
200 return ss.str();
201 }
202 } // namespace EventRaw
203 } // namespace HiviewDFX
204 } // namespace OHOS
205
206 #endif // HIVIEW_BASE_EVENT_RAW_INCLUDE_RAW_BASE_DEF_H