• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.android.iwlan.proto;
18 
19 import android.net.ipsec.ike.exceptions.IkeIOException;
20 import android.net.ipsec.ike.exceptions.IkeInternalException;
21 import android.util.Log;
22 
23 import com.google.android.iwlan.IwlanError;
24 import com.google.android.iwlan.IwlanStatsLog;
25 
26 public class MetricsAtom {
27     public static int INVALID_MESSAGE_ID = -1;
28     private static final String TAG = "IwlanMetrics";
29 
30     public static final int NETWORK_VALIDATION_TRANSPORT_TYPE_UNSPECIFIED = 0;
31     public static final int NETWORK_VALIDATION_TRANSPORT_TYPE_CELLULAR = 1;
32     public static final int NETWORK_VALIDATION_TRANSPORT_TYPE_WIFI = 2;
33 
34     public static final int NETWORK_VALIDATION_EVENT_UNSPECIFIED = 0;
35     public static final int NETWORK_VALIDATION_EVENT_MAKING_CALL = 1;
36     public static final int NETWORK_VALIDATION_EVENT_SCREEN_ON = 2;
37     public static final int NETWORK_VALIDATION_EVENT_NO_RESPONSE = 3;
38 
39     public static final int NETWORK_VALIDATION_RESULT_UNSPECIFIED = 0;
40     public static final int NETWORK_VALIDATION_RESULT_INVALID = 1;
41     public static final int NETWORK_VALIDATION_RESULT_VALID = 2;
42     public static final int NETWORK_VALIDATION_RESULT_PARTIALLY_VALID = 3;
43     public static final int NETWORK_VALIDATION_RESULT_SKIPPED = 4;
44 
45     private int mMessageId;
46     private int mApnType;
47     private boolean mIsHandover;
48     private String mEpdgServerAddress;
49     private int mSourceRat;
50     private boolean mIsCellularRoaming;
51     private boolean mIsNetworkConnected;
52     private int mTransportType;
53     private int mSetupRequestResult;
54     private int mIwlanError;
55     private int mDataCallFailCause;
56     private int mProcessingDurationMillis;
57     private int mEpdgServerSelectionDurationMillis;
58     private int mIkeTunnelEstablishmentDurationMillis;
59     private int mTunnelState;
60     private int mHandoverFailureMode;
61     private int mRetryDurationMillis;
62     private int mWifiSignalValue;
63     private String mIwlanErrorWrappedClassname;
64     private String mIwlanErrorWrappedStackFirstFrame;
65     private int mErrorCountOfSameCause;
66     private boolean mIsNetworkValidated;
67     private int mTriggerReason;
68     private int mValidationResult;
69     private int mValidationTransportType;
70     private int mValidationDurationMills;
71     private long mValidationStartTimeMills;
72     private boolean mValidationTriggered;
73 
setMessageId(int messageId)74     public void setMessageId(int messageId) {
75         this.mMessageId = messageId;
76     }
77 
getMessageId()78     public int getMessageId() {
79         return mMessageId;
80     }
81 
setApnType(int apnType)82     public void setApnType(int apnType) {
83         this.mApnType = apnType;
84     }
85 
setIsHandover(boolean isHandover)86     public void setIsHandover(boolean isHandover) {
87         this.mIsHandover = isHandover;
88     }
89 
setEpdgServerAddress(String epdgServerAddress)90     public void setEpdgServerAddress(String epdgServerAddress) {
91         this.mEpdgServerAddress = epdgServerAddress;
92     }
93 
setSourceRat(int sourceRat)94     public void setSourceRat(int sourceRat) {
95         this.mSourceRat = sourceRat;
96     }
97 
setIsCellularRoaming(boolean isCellularRoaming)98     public void setIsCellularRoaming(boolean isCellularRoaming) {
99         this.mIsCellularRoaming = isCellularRoaming;
100     }
101 
setIsNetworkConnected(boolean isNetworkConnected)102     public void setIsNetworkConnected(boolean isNetworkConnected) {
103         this.mIsNetworkConnected = isNetworkConnected;
104     }
105 
setTransportType(int transportType)106     public void setTransportType(int transportType) {
107         this.mTransportType = transportType;
108     }
109 
setSetupRequestResult(int setupRequestResult)110     public void setSetupRequestResult(int setupRequestResult) {
111         this.mSetupRequestResult = setupRequestResult;
112     }
113 
setIwlanError(int iwlanError)114     public void setIwlanError(int iwlanError) {
115         this.mIwlanError = iwlanError;
116     }
117 
setDataCallFailCause(int dataCallFailCause)118     public void setDataCallFailCause(int dataCallFailCause) {
119         this.mDataCallFailCause = dataCallFailCause;
120     }
121 
setProcessingDurationMillis(int processingDurationMillis)122     public void setProcessingDurationMillis(int processingDurationMillis) {
123         this.mProcessingDurationMillis = processingDurationMillis;
124     }
125 
setEpdgServerSelectionDurationMillis(int epdgServerSelectionDurationMillis)126     public void setEpdgServerSelectionDurationMillis(int epdgServerSelectionDurationMillis) {
127         this.mEpdgServerSelectionDurationMillis = epdgServerSelectionDurationMillis;
128     }
129 
setIkeTunnelEstablishmentDurationMillis(int ikeTunnelEstablishmentDurationMillis)130     public void setIkeTunnelEstablishmentDurationMillis(int ikeTunnelEstablishmentDurationMillis) {
131         this.mIkeTunnelEstablishmentDurationMillis = ikeTunnelEstablishmentDurationMillis;
132     }
133 
setTunnelState(int tunnelState)134     public void setTunnelState(int tunnelState) {
135         this.mTunnelState = tunnelState;
136     }
137 
setHandoverFailureMode(int handoverFailureMode)138     public void setHandoverFailureMode(int handoverFailureMode) {
139         this.mHandoverFailureMode = handoverFailureMode;
140     }
141 
setRetryDurationMillis(int retryDurationMillis)142     public void setRetryDurationMillis(int retryDurationMillis) {
143         this.mRetryDurationMillis = retryDurationMillis;
144     }
145 
setWifiSignalValue(int wifiSignalValue)146     public void setWifiSignalValue(int wifiSignalValue) {
147         this.mWifiSignalValue = wifiSignalValue;
148     }
149 
setIwlanErrorWrappedClassnameAndStack(IwlanError iwlanError)150     public void setIwlanErrorWrappedClassnameAndStack(IwlanError iwlanError) {
151         Throwable iwlanErrorWrapped = iwlanError.getException();
152         if (iwlanErrorWrapped instanceof IkeInternalException
153                 || iwlanErrorWrapped instanceof IkeIOException) {
154             iwlanErrorWrapped = iwlanErrorWrapped.getCause();
155         }
156 
157         if (iwlanErrorWrapped == null) {
158             this.mIwlanErrorWrappedClassname = null;
159             this.mIwlanErrorWrappedStackFirstFrame = null;
160             return;
161         }
162 
163         this.mIwlanErrorWrappedClassname = iwlanErrorWrapped.getClass().getCanonicalName();
164 
165         StackTraceElement[] iwlanErrorWrappedStackTraceElements = iwlanErrorWrapped.getStackTrace();
166         this.mIwlanErrorWrappedStackFirstFrame =
167                 iwlanErrorWrappedStackTraceElements.length != 0
168                         ? iwlanErrorWrappedStackTraceElements[0].toString()
169                         : null;
170     }
171 
getIwlanErrorWrappedClassname()172     public String getIwlanErrorWrappedClassname() {
173         return mIwlanErrorWrappedClassname;
174     }
175 
getIwlanErrorWrappedStackFirstFrame()176     public String getIwlanErrorWrappedStackFirstFrame() {
177         return mIwlanErrorWrappedStackFirstFrame;
178     }
179 
setErrorCountOfSameCause(int errorCount)180     public void setErrorCountOfSameCause(int errorCount) {
181         mErrorCountOfSameCause = errorCount;
182     }
183 
getErrorCountOfSameCause()184     public int getErrorCountOfSameCause() {
185         return mErrorCountOfSameCause;
186     }
187 
setIsNetworkValidated(boolean isNetworkValidated)188     public void setIsNetworkValidated(boolean isNetworkValidated) {
189         mIsNetworkValidated = isNetworkValidated;
190     }
191 
setTriggerReason(int reason)192     public void setTriggerReason(int reason) {
193         mTriggerReason = reason;
194     }
195 
getTriggerReason()196     public int getTriggerReason() {
197         return mTriggerReason;
198     }
199 
setValidationResult(int validationResult)200     public void setValidationResult(int validationResult) {
201         mValidationResult = validationResult;
202     }
203 
getValidationResult()204     public int getValidationResult() {
205         return mValidationResult;
206     }
207 
setValidationTransportType(int transportType)208     public void setValidationTransportType(int transportType) {
209         mValidationTransportType = transportType;
210     }
211 
getValidationTransportType()212     public int getValidationTransportType() {
213         return mValidationTransportType;
214     }
215 
setValidationDurationMills(int validationDurationMills)216     public void setValidationDurationMills(int validationDurationMills) {
217         mValidationDurationMills = validationDurationMills;
218     }
219 
getValidationDurationMills()220     public int getValidationDurationMills() {
221         return mValidationDurationMills;
222     }
223 
setValidationStartTimeMills(long validationStartTimeMills)224     public void setValidationStartTimeMills(long validationStartTimeMills) {
225         mValidationStartTimeMills = validationStartTimeMills;
226     }
227 
getValidationStartTimeMills()228     public long getValidationStartTimeMills() {
229         return mValidationStartTimeMills;
230     }
231 
getValidationTriggered()232     public boolean getValidationTriggered() {
233         return mValidationTriggered;
234     }
235 
setValidationTriggered(boolean validationTriggered)236     public void setValidationTriggered(boolean validationTriggered) {
237         mValidationTriggered = validationTriggered;
238     }
239 
sendMetricsData()240     public void sendMetricsData() {
241         if (mMessageId == IwlanStatsLog.IWLAN_SETUP_DATA_CALL_RESULT_REPORTED) {
242             Log.d(TAG, "Send metrics data IWLAN_SETUP_DATA_CALL_RESULT_REPORTED");
243             IwlanStatsLog.write(
244                     mMessageId,
245                     mApnType,
246                     mIsHandover,
247                     mEpdgServerAddress,
248                     mSourceRat,
249                     mIsCellularRoaming,
250                     mIsNetworkConnected,
251                     mTransportType,
252                     mSetupRequestResult,
253                     mIwlanError,
254                     mDataCallFailCause,
255                     mProcessingDurationMillis,
256                     mEpdgServerSelectionDurationMillis,
257                     mIkeTunnelEstablishmentDurationMillis,
258                     mTunnelState,
259                     mHandoverFailureMode,
260                     mRetryDurationMillis,
261                     mIwlanErrorWrappedClassname,
262                     mIwlanErrorWrappedStackFirstFrame,
263                     mErrorCountOfSameCause,
264                     mIsNetworkValidated);
265         } else if (mMessageId == IwlanStatsLog.IWLAN_PDN_DISCONNECTED_REASON_REPORTED) {
266             Log.d(TAG, "Send metrics data IWLAN_PDN_DISCONNECTED_REASON_REPORTED");
267             IwlanStatsLog.write(
268                     mMessageId,
269                     mDataCallFailCause,
270                     mIsNetworkConnected,
271                     mTransportType,
272                     mWifiSignalValue);
273         } else if (mMessageId
274                 == IwlanStatsLog.IWLAN_UNDERLYING_NETWORK_VALIDATION_RESULT_REPORTED) {
275             Log.d(TAG, "Send metrics data IWLAN_UNDERLYING_NETWORK_VALIDATION_RESULT_REPORTED");
276             IwlanStatsLog.write(
277                     mMessageId,
278                     mTriggerReason,
279                     mValidationResult,
280                     mValidationTransportType,
281                     mValidationDurationMills,
282                     mValidationTriggered);
283         } else {
284             Log.d("IwlanMetrics", "Invalid Message ID: " + mMessageId);
285         }
286     }
287 }
288