1/* 2 * Copyright (C) 2022 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#include "cellular_data_hisysevent.h" 17 18#include "chrono" 19#include "string" 20#include "type_traits" 21#include "apn_manager.h" 22#include "cellular_data_net_agent.h" 23 24namespace OHOS { 25namespace Telephony { 26// EVENT 27static constexpr const char *DATA_CONNECTION_STATE_EVENT = "DATA_CONNECTION_STATE"; 28static constexpr const char *ROAMING_DATA_CONNECTION_STATE_EVENT = "ROAMING_DATA_CONNECTION_STATE"; 29static constexpr const char *DATA_ACTIVATE_FAILED_EVENT = "DATA_ACTIVATE_FAILED"; 30static constexpr const char *DATA_DEACTIVED_EVENT = "DATA_DEACTIVED"; 31static constexpr const char *CELLULAR_REQUEST_EVENT = "CELLULAR_REQUEST"; 32 33// KEY 34static constexpr const char *MODULE_NAME_KEY = "MODULE"; 35static constexpr const char *SLOT_ID_KEY = "SLOT_ID"; 36static constexpr const char *SUPPLIER_ID_KEY = "SUPPLIER_ID"; 37static constexpr const char *STATE_KEY = "STATE"; 38static constexpr const char *DATA_SWITCH_KEY = "DATA_SWITCH"; 39static constexpr const char *UPLINK_DATA_KEY = "UPLINK_DATA"; 40static constexpr const char *DOWNLINK_DATA_KEY = "DOWNLINK_DATA"; 41static constexpr const char *DATASTATE_KEY = "DATASTATE"; 42static constexpr const char *ERROR_TYPE_KEY = "ERROR_TYPE"; 43static constexpr const char *ERROR_MSG_KEY = "ERROR_MSG"; 44static constexpr const char *TYPE_KEY = "TYPE"; 45static constexpr const char *APN_TYPE_KEY = "APN_TYPE"; 46static constexpr const char *CALL_UID_KEY = "CALL_UID"; 47static constexpr const char *CALL_PID_KEY = "CALL_PID"; 48static constexpr const char *NAME_KEY = "NAME"; 49static constexpr const char *REQUEST_ID_KEY = "REQUEST_ID"; 50 51// VALUE 52static constexpr const char *CELLULAR_DATA_MODULE = "CELLULAR_DATA"; 53static constexpr int32_t NUMBER_MINUS_ONE = -1; 54 55void CellularDataHiSysEvent::WriteDataDeactiveBehaviorEvent(const int32_t slotId, const DataDisconnectCause type, 56 const std::string &apnType) 57{ 58 int32_t bitMap = ApnManager::FindApnTypeByApnName(apnType); 59 HiWriteBehaviorEvent(DATA_DEACTIVED_EVENT, SLOT_ID_KEY, slotId, APN_TYPE_KEY, bitMap, 60 TYPE_KEY, static_cast<int32_t>(type)); 61} 62 63void CellularDataHiSysEvent::WriteDataConnectStateBehaviorEvent(const int32_t slotId, const std::string &apnType, 64 const uint64_t capability, const int32_t state) 65{ 66 int32_t bitMap = ApnManager::FindApnTypeByApnName(apnType); 67 CellularDataNetAgent &netAgent = CellularDataNetAgent::GetInstance(); 68 int32_t supplierId = netAgent.GetSupplierId(slotId, capability); 69 HiWriteBehaviorEvent(DATA_CONNECTION_STATE_EVENT, SLOT_ID_KEY, slotId, APN_TYPE_KEY, bitMap, 70 SUPPLIER_ID_KEY, supplierId, STATE_KEY, state); 71} 72 73void CellularDataHiSysEvent::WriteRoamingConnectStateBehaviorEvent(const int32_t state) 74{ 75 HiWriteBehaviorEvent(ROAMING_DATA_CONNECTION_STATE_EVENT, STATE_KEY, state); 76} 77 78void CellularDataHiSysEvent::WriteCellularRequestBehaviorEvent( 79 const uint32_t uid, const std::string name, const uint64_t type, const int32_t state) 80{ 81 HiWriteBehaviorEvent(CELLULAR_REQUEST_EVENT, CALL_UID_KEY, static_cast<int32_t>(uid), 82 CALL_PID_KEY, NUMBER_MINUS_ONE, NAME_KEY, name, REQUEST_ID_KEY, NUMBER_MINUS_ONE, 83 TYPE_KEY, static_cast<int32_t>(type), STATE_KEY, state); 84} 85 86void CellularDataHiSysEvent::WriteDataActivateFaultEvent( 87 const int32_t slotId, const int32_t switchState, const CellularDataErrorCode errorType, const std::string &errorMsg) 88{ 89 HiWriteFaultEvent(DATA_ACTIVATE_FAILED_EVENT, MODULE_NAME_KEY, CELLULAR_DATA_MODULE, SLOT_ID_KEY, slotId, 90 DATA_SWITCH_KEY, switchState, UPLINK_DATA_KEY, INVALID_PARAMETER, DOWNLINK_DATA_KEY, INVALID_PARAMETER, 91 DATASTATE_KEY, INVALID_PARAMETER, ERROR_TYPE_KEY, static_cast<int32_t>(errorType), ERROR_MSG_KEY, errorMsg); 92} 93 94void CellularDataHiSysEvent::SetCellularDataActivateStartTime() 95{ 96 dataActivateStartTime_ = 97 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()) 98 .count(); 99} 100 101void CellularDataHiSysEvent::JudgingDataActivateTimeOut(const int32_t slotId, const int32_t switchState) 102{ 103 int64_t dataActivateEndTime = 104 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()) 105 .count(); 106 if (dataActivateEndTime - dataActivateStartTime_ > DATA_ACTIVATE_TIME) { 107 WriteDataActivateFaultEvent(slotId, switchState, CellularDataErrorCode::DATA_ERROR_DATA_ACTIVATE_TIME_OUT, 108 "data activate time out " + std::to_string(dataActivateEndTime - dataActivateStartTime_)); 109 } 110} 111} // namespace Telephony 112} // namespace OHOS 113