• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (c) 2021-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 HI_APP_EVENT_BASE_H
17  #define HI_APP_EVENT_BASE_H
18  
19  #include <ctime>
20  #include <list>
21  #include <memory>
22  #include <string>
23  #include <vector>
24  
25  namespace OHOS {
26  namespace HiviewDFX {
27  /**
28   * HiAppEvent write app event error code
29   */
30  namespace ErrorCode {
31  const int HIAPPEVENT_VERIFY_SUCCESSFUL = 0;
32  const int ERROR_INVALID_EVENT_NAME = -1;
33  const int ERROR_INVALID_PARAM_TYPE_JS = -2;
34  const int ERROR_INVALID_PARAM_NUM_JS = -3;
35  const int ERROR_INVALID_EVENT_DOMAIN = -4;
36  const int ERROR_INVALID_PARAM_NAME = 1;
37  const int ERROR_INVALID_PARAM_KEY_TYPE = 2;
38  const int ERROR_INVALID_PARAM_VALUE_TYPE = 3;
39  const int ERROR_INVALID_PARAM_VALUE_LENGTH = 4;
40  const int ERROR_INVALID_PARAM_NUM = 5;
41  const int ERROR_INVALID_LIST_PARAM_SIZE = 6;
42  const int ERROR_INVALID_LIST_PARAM_TYPE = 7;
43  const int ERROR_DUPLICATE_PARAM = 8;
44  const int ERROR_HIAPPEVENT_DISABLE = -99;
45  const int ERROR_UNKNOWN = -100;
46  } // namespace ErrorCode
47  
48  /**
49   * HiLog hiappevent domain code
50   */
51  const unsigned int HIAPPEVENT_DOMAIN = 0xD002D07;
52  
53  enum AppEventParamType {
54      EMPTY = 0,
55      BOOL = 1,
56      CHAR = 2,
57      SHORT = 3,
58      INTEGER = 4,
59      LONGLONG = 5,
60      FLOAT = 6,
61      DOUBLE = 7,
62      STRING = 8,
63      BVECTOR = 9,
64      CVECTOR = 10,
65      SHVECTOR = 11,
66      IVECTOR = 12,
67      LLVECTOR = 13,
68      FVECTOR = 14,
69      DVECTOR = 15,
70      STRVECTOR = 16
71  };
72  
73  struct AppEventParamValue {
74      AppEventParamType type;
75      union ValueUnion {
76          bool b_;
77          char c_;
78          int16_t sh_;
79          int i_;
80          int64_t ll_;
81          float f_;
82          double d_;
83          std::string str_;
84          std::vector<bool> bs_;
85          std::vector<char> cs_;
86          std::vector<int16_t> shs_;
87          std::vector<int> is_;
88          std::vector<int64_t> lls_;
89          std::vector<float> fs_;
90          std::vector<double> ds_;
91          std::vector<std::string> strs_;
92  
ValueUnion()93          ValueUnion() {}
94  
ValueUnion(AppEventParamType type)95          ValueUnion(AppEventParamType type)
96          {
97              switch (type) {
98                  case AppEventParamType::STRING:
99                      new (&str_) std::string;
100                      break;
101                  case AppEventParamType::BVECTOR:
102                      new (&bs_) std::vector<bool>;
103                      break;
104                  case AppEventParamType::CVECTOR:
105                      new (&cs_) std::vector<char>;
106                      break;
107                  case AppEventParamType::SHVECTOR:
108                      new (&shs_) std::vector<int16_t>;
109                      break;
110                  case AppEventParamType::IVECTOR:
111                      new (&is_) std::vector<int>;
112                      break;
113                  case AppEventParamType::LLVECTOR:
114                      new (&lls_) std::vector<int64_t>;
115                      break;
116                  case AppEventParamType::FVECTOR:
117                      new (&fs_) std::vector<float>;
118                      break;
119                  case AppEventParamType::DVECTOR:
120                      new (&ds_) std::vector<double>;
121                      break;
122                  case AppEventParamType::STRVECTOR:
123                      new (&strs_) std::vector<std::string>;
124                      break;
125                  default:
126                      break;
127              }
128          }
129  
~ValueUnion()130          ~ValueUnion() {}
131      } valueUnion;
132  
133      explicit AppEventParamValue(AppEventParamType t);
134      AppEventParamValue(const AppEventParamValue& value);
135      ~AppEventParamValue();
136  };
137  using AppEventParamValue = struct AppEventParamValue;
138  
139  struct AppEventParam {
140      std::string name;
141      AppEventParamType type;
142      AppEventParamValue value;
143  
144      AppEventParam(std::string n, AppEventParamType t);
145      AppEventParam(const AppEventParam& param);
146      ~AppEventParam();
147  };
148  using AppEventParam = struct AppEventParam;
149  
150  class AppEventPack {
151  public:
152      AppEventPack() = default;
153      AppEventPack(const std::string& name, int type);
154      AppEventPack(const std::string& domain, const std::string& name, int type);
~AppEventPack()155      ~AppEventPack() {}
156  
157  public:
158      void AddParam(const std::string& key);
159      void AddParam(const std::string& key, bool b);
160      void AddParam(const std::string& key, int8_t num);
161      void AddParam(const std::string& key, char c);
162      void AddParam(const std::string& key, int16_t s);
163      void AddParam(const std::string& key, int i);
164      void AddParam(const std::string& key, int64_t ll);
165      void AddParam(const std::string& key, float f);
166      void AddParam(const std::string& key, double d);
167      void AddParam(const std::string& key, const char *s);
168      void AddParam(const std::string& key, const std::string& s);
169      void AddParam(const std::string& key, const std::vector<bool>& bs);
170      void AddParam(const std::string& key, const std::vector<int8_t>& bs);
171      void AddParam(const std::string& key, const std::vector<char>& cs);
172      void AddParam(const std::string& key, const std::vector<int16_t>& shs);
173      void AddParam(const std::string& key, const std::vector<int>& is);
174      void AddParam(const std::string& key, const std::vector<int64_t>& lls);
175      void AddParam(const std::string& key, const std::vector<float>& fs);
176      void AddParam(const std::string& key, const std::vector<double>& ds);
177      void AddParam(const std::string& key, const std::vector<const char*>& cps);
178      void AddParam(const std::string& key, const std::vector<std::string>& strs);
179  
180      int64_t GetSeq() const;
181      std::string GetDomain() const;
182      std::string GetName() const;
183      int GetType() const;
184      uint64_t GetTime() const;
185      std::string GetTimeZone() const;
186      int GetPid() const;
187      int GetTid() const;
188      int64_t GetTraceId() const;
189      int64_t GetSpanId() const;
190      int64_t GetPspanId() const;
191      int GetTraceFlag() const;
192      std::string GetEventStr() const;
193      std::string GetParamStr() const;
194  
195      void SetSeq(int64_t seq);
196      void SetDomain(const std::string& domain);
197      void SetName(const std::string& name);
198      void SetType(int type);
199      void SetTime(uint64_t time);
200      void SetTimeZone(const std::string& timeZone);
201      void SetPid(int pid);
202      void SetTid(int tid);
203      void SetTraceId(int64_t traceId);
204      void SetSpanId(int64_t spanId);
205      void SetPspanId(int64_t pspanId);
206      void SetTraceFlag(int traceFlag);
207      void SetParamStr(const std::string& paramStr);
208  
209      friend int VerifyAppEvent(std::shared_ptr<AppEventPack> appEventPack);
210  
211  private:
212      void InitTime();
213      void InitTimeZone();
214      void InitProcessInfo();
215      void InitTraceInfo();
216      void AddBaseInfoToJsonString(std::stringstream& jsonStr) const;
217      void AddTraceInfoToJsonString(std::stringstream& jsonStr) const;
218      void AddParamsInfoToJsonString(std::stringstream& jsonStr) const;
219      void AddParamsToJsonString(std::stringstream& jsonStr) const;
220  
221  private:
222      int64_t seq_ = 0;
223      std::string domain_;
224      std::string name_;
225      int type_ = 0;
226      uint64_t time_ = 0;
227      std::string timeZone_;
228      int pid_ = 0;
229      int tid_ = 0;
230      int64_t traceId_ = 0;
231      int64_t spanId_ = 0;
232      int64_t pspanId_ = 0;
233      int traceFlag_ = 0;
234      std::list<AppEventParam> baseParams_;
235      std::string paramStr_;
236  };
237  } // namespace HiviewDFX
238  } // namespace OHOS
239  #endif // HI_APP_EVENT_BASE_H
240