11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#ifndef NETSTACK_INCLUDE_HISYSEVENT_H
171e934351Sopenharmony_ci#define NETSTACK_INCLUDE_HISYSEVENT_H
181e934351Sopenharmony_ci
191e934351Sopenharmony_ci#include <string>
201e934351Sopenharmony_ci#include <map>
211e934351Sopenharmony_ci#include <mutex>
221e934351Sopenharmony_ci
231e934351Sopenharmony_ci#include "curl/curl.h"
241e934351Sopenharmony_ci
251e934351Sopenharmony_cinamespace OHOS::NetStack {
261e934351Sopenharmony_ci
271e934351Sopenharmony_cistruct EventInfo {
281e934351Sopenharmony_ci    std::string packageName;
291e934351Sopenharmony_ci    double totalTime;
301e934351Sopenharmony_ci    double totalRate;
311e934351Sopenharmony_ci    double totalDnsTime;
321e934351Sopenharmony_ci    double totalTlsTime;
331e934351Sopenharmony_ci    double totalTcpTime;
341e934351Sopenharmony_ci    double totalFirstRecvTime;
351e934351Sopenharmony_ci    uint32_t successCount;
361e934351Sopenharmony_ci    uint32_t totalCount;
371e934351Sopenharmony_ci    std::string version;
381e934351Sopenharmony_ci};
391e934351Sopenharmony_ci
401e934351Sopenharmony_cistruct HttpPerfInfo {
411e934351Sopenharmony_ci    double totalTime;
421e934351Sopenharmony_ci    double dnsTime;
431e934351Sopenharmony_ci    double tlsTime;
441e934351Sopenharmony_ci    double firstRecvTime;
451e934351Sopenharmony_ci    double tcpTime;
461e934351Sopenharmony_ci    curl_off_t size;
471e934351Sopenharmony_ci    int64_t responseCode;
481e934351Sopenharmony_ci    std::string version;
491e934351Sopenharmony_cipublic:
501e934351Sopenharmony_ci    bool IsSuccess() const;
511e934351Sopenharmony_ci};
521e934351Sopenharmony_ci
531e934351Sopenharmony_ciclass EventReport {
541e934351Sopenharmony_cipublic:
551e934351Sopenharmony_ci    void ProcessHttpPerfHiSysevent(const HttpPerfInfo &httpPerfInfo);
561e934351Sopenharmony_ci    void SendHttpPerfEvent(const EventInfo &eventInfo);
571e934351Sopenharmony_ci    static EventReport &GetInstance();
581e934351Sopenharmony_ci    bool IsValid();
591e934351Sopenharmony_ci
601e934351Sopenharmony_ciprivate:
611e934351Sopenharmony_ci    EventReport();
621e934351Sopenharmony_ci    ~EventReport() = default;
631e934351Sopenharmony_ci    EventReport(const EventReport &eventReport) = delete;
641e934351Sopenharmony_ci    const EventReport &operator=(const EventReport &eventReport) = delete;
651e934351Sopenharmony_ci    void InitPackageName();
661e934351Sopenharmony_ci    void ResetCounters();
671e934351Sopenharmony_ci    std::string GetPackageName();
681e934351Sopenharmony_ci    std::string MapToJsonString(const std::map<std::string, uint32_t> mapPara);
691e934351Sopenharmony_ci
701e934351Sopenharmony_ciprivate:
711e934351Sopenharmony_ci    time_t reportTime = 0;
721e934351Sopenharmony_ci    std::string packageName_;
731e934351Sopenharmony_ci    EventInfo eventInfo;
741e934351Sopenharmony_ci    std::map<std::string, uint32_t> versionMap;
751e934351Sopenharmony_ci    bool validFlag = true;
761e934351Sopenharmony_ci    std::recursive_mutex mutex;
771e934351Sopenharmony_ci};
781e934351Sopenharmony_ci}
791e934351Sopenharmony_ci#endif