12d43be4eSopenharmony_ci/*
22d43be4eSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
32d43be4eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
42d43be4eSopenharmony_ci * you may not use this file except in compliance with the License.
52d43be4eSopenharmony_ci * You may obtain a copy of the License at
62d43be4eSopenharmony_ci *
72d43be4eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
82d43be4eSopenharmony_ci *
92d43be4eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
102d43be4eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
112d43be4eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122d43be4eSopenharmony_ci * See the License for the specific language governing permissions and
132d43be4eSopenharmony_ci * limitations under the License.
142d43be4eSopenharmony_ci */
152d43be4eSopenharmony_ci
162d43be4eSopenharmony_ci#include "cellular_data_hisysevent.h"
172d43be4eSopenharmony_ci
182d43be4eSopenharmony_ci#include "chrono"
192d43be4eSopenharmony_ci#include "string"
202d43be4eSopenharmony_ci#include "type_traits"
212d43be4eSopenharmony_ci#include "apn_manager.h"
222d43be4eSopenharmony_ci#include "cellular_data_net_agent.h"
232d43be4eSopenharmony_ci
242d43be4eSopenharmony_cinamespace OHOS {
252d43be4eSopenharmony_cinamespace Telephony {
262d43be4eSopenharmony_ci// EVENT
272d43be4eSopenharmony_cistatic constexpr const char *DATA_CONNECTION_STATE_EVENT = "DATA_CONNECTION_STATE";
282d43be4eSopenharmony_cistatic constexpr const char *ROAMING_DATA_CONNECTION_STATE_EVENT = "ROAMING_DATA_CONNECTION_STATE";
292d43be4eSopenharmony_cistatic constexpr const char *DATA_ACTIVATE_FAILED_EVENT = "DATA_ACTIVATE_FAILED";
302d43be4eSopenharmony_cistatic constexpr const char *DATA_DEACTIVED_EVENT = "DATA_DEACTIVED";
312d43be4eSopenharmony_cistatic constexpr const char *CELLULAR_REQUEST_EVENT = "CELLULAR_REQUEST";
322d43be4eSopenharmony_ci
332d43be4eSopenharmony_ci// KEY
342d43be4eSopenharmony_cistatic constexpr const char *MODULE_NAME_KEY = "MODULE";
352d43be4eSopenharmony_cistatic constexpr const char *SLOT_ID_KEY = "SLOT_ID";
362d43be4eSopenharmony_cistatic constexpr const char *SUPPLIER_ID_KEY = "SUPPLIER_ID";
372d43be4eSopenharmony_cistatic constexpr const char *STATE_KEY = "STATE";
382d43be4eSopenharmony_cistatic constexpr const char *DATA_SWITCH_KEY = "DATA_SWITCH";
392d43be4eSopenharmony_cistatic constexpr const char *UPLINK_DATA_KEY = "UPLINK_DATA";
402d43be4eSopenharmony_cistatic constexpr const char *DOWNLINK_DATA_KEY = "DOWNLINK_DATA";
412d43be4eSopenharmony_cistatic constexpr const char *DATASTATE_KEY = "DATASTATE";
422d43be4eSopenharmony_cistatic constexpr const char *ERROR_TYPE_KEY = "ERROR_TYPE";
432d43be4eSopenharmony_cistatic constexpr const char *ERROR_MSG_KEY = "ERROR_MSG";
442d43be4eSopenharmony_cistatic constexpr const char *TYPE_KEY = "TYPE";
452d43be4eSopenharmony_cistatic constexpr const char *APN_TYPE_KEY = "APN_TYPE";
462d43be4eSopenharmony_cistatic constexpr const char *CALL_UID_KEY = "CALL_UID";
472d43be4eSopenharmony_cistatic constexpr const char *CALL_PID_KEY = "CALL_PID";
482d43be4eSopenharmony_cistatic constexpr const char *NAME_KEY = "NAME";
492d43be4eSopenharmony_cistatic constexpr const char *REQUEST_ID_KEY = "REQUEST_ID";
502d43be4eSopenharmony_ci
512d43be4eSopenharmony_ci// VALUE
522d43be4eSopenharmony_cistatic constexpr const char *CELLULAR_DATA_MODULE = "CELLULAR_DATA";
532d43be4eSopenharmony_cistatic constexpr int32_t NUMBER_MINUS_ONE = -1;
542d43be4eSopenharmony_ci
552d43be4eSopenharmony_civoid CellularDataHiSysEvent::WriteDataDeactiveBehaviorEvent(const int32_t slotId, const DataDisconnectCause type,
562d43be4eSopenharmony_ci    const std::string &apnType)
572d43be4eSopenharmony_ci{
582d43be4eSopenharmony_ci    int32_t bitMap = ApnManager::FindApnTypeByApnName(apnType);
592d43be4eSopenharmony_ci    HiWriteBehaviorEvent(DATA_DEACTIVED_EVENT, SLOT_ID_KEY, slotId, APN_TYPE_KEY, bitMap,
602d43be4eSopenharmony_ci        TYPE_KEY, static_cast<int32_t>(type));
612d43be4eSopenharmony_ci}
622d43be4eSopenharmony_ci
632d43be4eSopenharmony_civoid CellularDataHiSysEvent::WriteDataConnectStateBehaviorEvent(const int32_t slotId, const std::string &apnType,
642d43be4eSopenharmony_ci    const uint64_t capability, const int32_t state)
652d43be4eSopenharmony_ci{
662d43be4eSopenharmony_ci    int32_t bitMap = ApnManager::FindApnTypeByApnName(apnType);
672d43be4eSopenharmony_ci    CellularDataNetAgent &netAgent = CellularDataNetAgent::GetInstance();
682d43be4eSopenharmony_ci    int32_t supplierId = netAgent.GetSupplierId(slotId, capability);
692d43be4eSopenharmony_ci    HiWriteBehaviorEvent(DATA_CONNECTION_STATE_EVENT, SLOT_ID_KEY, slotId, APN_TYPE_KEY, bitMap,
702d43be4eSopenharmony_ci        SUPPLIER_ID_KEY, supplierId, STATE_KEY, state);
712d43be4eSopenharmony_ci}
722d43be4eSopenharmony_ci
732d43be4eSopenharmony_civoid CellularDataHiSysEvent::WriteRoamingConnectStateBehaviorEvent(const int32_t state)
742d43be4eSopenharmony_ci{
752d43be4eSopenharmony_ci    HiWriteBehaviorEvent(ROAMING_DATA_CONNECTION_STATE_EVENT, STATE_KEY, state);
762d43be4eSopenharmony_ci}
772d43be4eSopenharmony_ci
782d43be4eSopenharmony_civoid CellularDataHiSysEvent::WriteCellularRequestBehaviorEvent(
792d43be4eSopenharmony_ci    const uint32_t uid, const std::string name, const uint64_t type, const int32_t state)
802d43be4eSopenharmony_ci{
812d43be4eSopenharmony_ci    HiWriteBehaviorEvent(CELLULAR_REQUEST_EVENT, CALL_UID_KEY, static_cast<int32_t>(uid),
822d43be4eSopenharmony_ci        CALL_PID_KEY, NUMBER_MINUS_ONE, NAME_KEY, name, REQUEST_ID_KEY, NUMBER_MINUS_ONE,
832d43be4eSopenharmony_ci        TYPE_KEY, static_cast<int32_t>(type), STATE_KEY, state);
842d43be4eSopenharmony_ci}
852d43be4eSopenharmony_ci
862d43be4eSopenharmony_civoid CellularDataHiSysEvent::WriteDataActivateFaultEvent(
872d43be4eSopenharmony_ci    const int32_t slotId, const int32_t switchState, const CellularDataErrorCode errorType, const std::string &errorMsg)
882d43be4eSopenharmony_ci{
892d43be4eSopenharmony_ci    HiWriteFaultEvent(DATA_ACTIVATE_FAILED_EVENT, MODULE_NAME_KEY, CELLULAR_DATA_MODULE, SLOT_ID_KEY, slotId,
902d43be4eSopenharmony_ci        DATA_SWITCH_KEY, switchState, UPLINK_DATA_KEY, INVALID_PARAMETER, DOWNLINK_DATA_KEY, INVALID_PARAMETER,
912d43be4eSopenharmony_ci        DATASTATE_KEY, INVALID_PARAMETER, ERROR_TYPE_KEY, static_cast<int32_t>(errorType), ERROR_MSG_KEY, errorMsg);
922d43be4eSopenharmony_ci}
932d43be4eSopenharmony_ci
942d43be4eSopenharmony_civoid CellularDataHiSysEvent::SetCellularDataActivateStartTime()
952d43be4eSopenharmony_ci{
962d43be4eSopenharmony_ci    dataActivateStartTime_ =
972d43be4eSopenharmony_ci        std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
982d43be4eSopenharmony_ci            .count();
992d43be4eSopenharmony_ci}
1002d43be4eSopenharmony_ci
1012d43be4eSopenharmony_civoid CellularDataHiSysEvent::JudgingDataActivateTimeOut(const int32_t slotId, const int32_t switchState)
1022d43be4eSopenharmony_ci{
1032d43be4eSopenharmony_ci    int64_t dataActivateEndTime =
1042d43be4eSopenharmony_ci        std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
1052d43be4eSopenharmony_ci            .count();
1062d43be4eSopenharmony_ci    if (dataActivateEndTime - dataActivateStartTime_ > DATA_ACTIVATE_TIME) {
1072d43be4eSopenharmony_ci        WriteDataActivateFaultEvent(slotId, switchState, CellularDataErrorCode::DATA_ERROR_DATA_ACTIVATE_TIME_OUT,
1082d43be4eSopenharmony_ci            "data activate time out " + std::to_string(dataActivateEndTime - dataActivateStartTime_));
1092d43be4eSopenharmony_ci    }
1102d43be4eSopenharmony_ci}
1112d43be4eSopenharmony_ci} // namespace Telephony
1122d43be4eSopenharmony_ci} // namespace OHOS
113