/* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.iwlan.proto; import android.net.ipsec.ike.exceptions.IkeIOException; import android.net.ipsec.ike.exceptions.IkeInternalException; import com.google.android.iwlan.IwlanError; import com.google.android.iwlan.IwlanStatsLog; public class MetricsAtom { private int mMessageId; private int mApnType; private boolean mIsHandover; private String mEpdgServerAddress; private int mSourceRat; private boolean mIsCellularRoaming; private boolean mIsNetworkConnected; private int mTransportType; private int mSetupRequestResult; private int mIwlanError; private int mDataCallFailCause; private int mProcessingDurationMillis; private int mEpdgServerSelectionDurationMillis; private int mIkeTunnelEstablishmentDurationMillis; private int mTunnelState; private int mHandoverFailureMode; private int mRetryDurationMillis; private int mWifiSignalValue; private String mIwlanErrorWrappedClassname; private String mIwlanErrorWrappedStackFirstFrame; public void setMessageId(int messageId) { this.mMessageId = messageId; } public void setApnType(int apnType) { this.mApnType = apnType; } public void setIsHandover(boolean isHandover) { this.mIsHandover = isHandover; } public void setEpdgServerAddress(String epdgServerAddress) { this.mEpdgServerAddress = epdgServerAddress; } public void setSourceRat(int sourceRat) { this.mSourceRat = sourceRat; } public void setIsCellularRoaming(boolean isCellularRoaming) { this.mIsCellularRoaming = isCellularRoaming; } public void setIsNetworkConnected(boolean isNetworkConnected) { this.mIsNetworkConnected = isNetworkConnected; } public void setTransportType(int transportType) { this.mTransportType = transportType; } public void setSetupRequestResult(int setupRequestResult) { this.mSetupRequestResult = setupRequestResult; } public void setIwlanError(int iwlanError) { this.mIwlanError = iwlanError; } public void setDataCallFailCause(int dataCallFailCause) { this.mDataCallFailCause = dataCallFailCause; } public void setProcessingDurationMillis(int processingDurationMillis) { this.mProcessingDurationMillis = processingDurationMillis; } public void setEpdgServerSelectionDurationMillis(int epdgServerSelectionDurationMillis) { this.mEpdgServerSelectionDurationMillis = epdgServerSelectionDurationMillis; } public void setIkeTunnelEstablishmentDurationMillis(int ikeTunnelEstablishmentDurationMillis) { this.mIkeTunnelEstablishmentDurationMillis = ikeTunnelEstablishmentDurationMillis; } public void setTunnelState(int tunnelState) { this.mTunnelState = tunnelState; } public void setHandoverFailureMode(int handoverFailureMode) { this.mHandoverFailureMode = handoverFailureMode; } public void setRetryDurationMillis(int retryDurationMillis) { this.mRetryDurationMillis = retryDurationMillis; } public void setWifiSignalValue(int wifiSignalValue) { this.mWifiSignalValue = wifiSignalValue; } public void setIwlanErrorWrappedClassnameAndStack(IwlanError iwlanError) { Throwable iwlanErrorWrapped = iwlanError.getException(); if (iwlanErrorWrapped instanceof IkeInternalException || iwlanErrorWrapped instanceof IkeIOException) { iwlanErrorWrapped = iwlanErrorWrapped.getCause(); } if (iwlanErrorWrapped == null) { this.mIwlanErrorWrappedClassname = null; this.mIwlanErrorWrappedStackFirstFrame = null; return; } this.mIwlanErrorWrappedClassname = iwlanErrorWrapped.getClass().getCanonicalName(); StackTraceElement[] iwlanErrorWrappedStackTraceElements = iwlanErrorWrapped.getStackTrace(); this.mIwlanErrorWrappedStackFirstFrame = iwlanErrorWrappedStackTraceElements.length != 0 ? iwlanErrorWrappedStackTraceElements[0].toString() : null; } public String getIwlanErrorWrappedClassname() { return mIwlanErrorWrappedClassname; } public String getIwlanErrorWrappedStackFirstFrame() { return mIwlanErrorWrappedStackFirstFrame; } public void sendMetricsData() { if (mMessageId == IwlanStatsLog.IWLAN_SETUP_DATA_CALL_RESULT_REPORTED) { IwlanStatsLog.write( mMessageId, mApnType, mIsHandover, mEpdgServerAddress, mSourceRat, mIsCellularRoaming, mIsNetworkConnected, mTransportType, mSetupRequestResult, mIwlanError, mDataCallFailCause, mProcessingDurationMillis, mEpdgServerSelectionDurationMillis, mIkeTunnelEstablishmentDurationMillis, mTunnelState, mHandoverFailureMode, mRetryDurationMillis, mIwlanErrorWrappedClassname, mIwlanErrorWrappedStackFirstFrame); return; } else if (mMessageId == IwlanStatsLog.IWLAN_PDN_DISCONNECTED_REASON_REPORTED) { IwlanStatsLog.write( mMessageId, mDataCallFailCause, mIsNetworkConnected, mTransportType, mWifiSignalValue); return; } } }