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