• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.android.internal.telephony.satellite.metrics;
18 
19 import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID;
20 
21 import android.annotation.NonNull;
22 import android.telephony.satellite.SatelliteManager;
23 import android.util.Log;
24 
25 import com.android.internal.telephony.metrics.SatelliteStats;
26 
27 /**
28  * Stats to log to satellite metrics
29  */
30 public class ProvisionMetricsStats {
31     private static final String TAG = ProvisionMetricsStats.class.getSimpleName();
32 
33     private static ProvisionMetricsStats sInstance = null;
34 
35     public static final int INVALID_TIME = -1;
36 
37     private int mResultCode;
38     private int mProvisioningStartTimeSec;
39     private boolean mIsProvisionRequest;
40     private boolean mIsCanceled;
41     private int mCarrierId;
42     private boolean mIsNtnOnlyCarrier;
43 
ProvisionMetricsStats()44     private ProvisionMetricsStats() {
45         initializeProvisionParams();
46     }
47 
48     /**
49      * Returns the Singleton instance of ProvisionMetricsStats class.
50      * If an instance of the Singleton class has not been created,
51      * it creates a new instance and returns it. Otherwise, it returns
52      * the existing instance.
53      * @return the Singleton instance of ProvisionMetricsStats
54      */
getOrCreateInstance()55     public static ProvisionMetricsStats getOrCreateInstance() {
56         if (sInstance == null) {
57             logd("Create new ProvisionMetricsStats.");
58             sInstance = new ProvisionMetricsStats();
59         }
60         return sInstance;
61     }
62 
63     /** Sets the resultCode for provision metrics */
setResultCode(@atelliteManager.SatelliteResult int error)64     public ProvisionMetricsStats setResultCode(@SatelliteManager.SatelliteResult int error) {
65         mResultCode = error;
66         return this;
67     }
68 
69     /** Sets the start time of provisioning */
setProvisioningStartTime()70     public void setProvisioningStartTime() {
71         mProvisioningStartTimeSec = (int) (System.currentTimeMillis() / 1000);
72     }
73 
74     /** Sets the isProvisionRequest to indicate whether provision or de-provision */
setIsProvisionRequest(boolean isProvisionRequest)75     public ProvisionMetricsStats setIsProvisionRequest(boolean isProvisionRequest) {
76         mIsProvisionRequest = isProvisionRequest;
77         return this;
78     }
79 
80     /** Sets the isCanceled to know whether the provision is canceled */
setIsCanceled(boolean isCanceled)81     public ProvisionMetricsStats setIsCanceled(boolean isCanceled) {
82         mIsCanceled = isCanceled;
83         return this;
84     }
85 
86     /** Sets the Carrier of NTN satellite */
setCarrierId(int carrierId)87     public ProvisionMetricsStats setCarrierId(int carrierId) {
88         mCarrierId = carrierId;
89         return this;
90     }
91 
92     /** Capture the latest provisioned state for satellite service */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)93     public ProvisionMetricsStats setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
94         mIsNtnOnlyCarrier = isNtnOnlyCarrier;
95         return this;
96     }
97 
98     /** Report the provision metrics atoms to PersistAtomsStorage in telephony */
reportProvisionMetrics()99     public void reportProvisionMetrics() {
100         SatelliteStats.SatelliteProvisionParams provisionParams =
101                 new SatelliteStats.SatelliteProvisionParams.Builder()
102                         .setResultCode(mResultCode)
103                         .setProvisioningTimeSec((int)
104                                 (System.currentTimeMillis() / 1000) - mProvisioningStartTimeSec)
105                         .setIsProvisionRequest(mIsProvisionRequest)
106                         .setIsCanceled(mIsCanceled)
107                         .setCarrierId(mCarrierId)
108                         .setIsNtnOnlyCarrier(mIsNtnOnlyCarrier)
109                         .build();
110         SatelliteStats.getInstance().onSatelliteProvisionMetrics(provisionParams);
111         logd("reportProvisionMetrics: " + provisionParams);
112         initializeProvisionParams();
113     }
114 
initializeProvisionParams()115     private void initializeProvisionParams() {
116         mResultCode = -1;
117         mProvisioningStartTimeSec = INVALID_TIME;
118         mIsProvisionRequest = false;
119         mIsCanceled = false;
120         mCarrierId = UNKNOWN_CARRIER_ID;
121         mIsNtnOnlyCarrier = false;
122     }
123 
logd(@onNull String log)124     private static void logd(@NonNull String log) {
125         Log.d(TAG, log);
126     }
127 }
128