• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.server.healthconnect.logging;
18 
19 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_EXPORT_INVOKED;
20 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_LOST_FILE_ACCESS;
21 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_NONE;
22 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_UNKNOWN;
23 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_STARTED;
24 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_IMPORT_INVOKED;
25 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_NONE;
26 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_UNKNOWN;
27 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_VERSION_MISMATCH;
28 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_WRONG_FILE;
29 import static android.health.HealthFitnessStatsLog.HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_STARTED;
30 import static android.health.connect.exportimport.ImportStatus.DATA_IMPORT_ERROR_NONE;
31 import static android.health.connect.exportimport.ImportStatus.DATA_IMPORT_ERROR_UNKNOWN;
32 import static android.health.connect.exportimport.ImportStatus.DATA_IMPORT_ERROR_VERSION_MISMATCH;
33 import static android.health.connect.exportimport.ImportStatus.DATA_IMPORT_ERROR_WRONG_FILE;
34 import static android.health.connect.exportimport.ImportStatus.DATA_IMPORT_STARTED;
35 import static android.health.connect.exportimport.ScheduledExportStatus.DATA_EXPORT_ERROR_NONE;
36 import static android.health.connect.exportimport.ScheduledExportStatus.DATA_EXPORT_ERROR_UNKNOWN;
37 import static android.health.connect.exportimport.ScheduledExportStatus.DATA_EXPORT_LOST_FILE_ACCESS;
38 import static android.health.connect.exportimport.ScheduledExportStatus.DATA_EXPORT_STARTED;
39 
40 import android.health.HealthFitnessStatsLog;
41 import android.util.SparseIntArray;
42 
43 /**
44  * Class to log metrics for Export Import
45  *
46  * @hide
47  */
48 public class ExportImportLogger {
49 
50     // Proto values are set to 0 by default, log -1 to distinguish fields that no value was logged
51     // for from real zero values.
52     public static final int NO_VALUE_RECORDED = -1;
53 
54     public static final SparseIntArray EXPORT_STATUS_LOG_TAGS;
55 
56     static {
57         EXPORT_STATUS_LOG_TAGS = new SparseIntArray();
EXPORT_STATUS_LOG_TAGS.put( DATA_EXPORT_ERROR_NONE, HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_NONE)58         EXPORT_STATUS_LOG_TAGS.put(
59                 DATA_EXPORT_ERROR_NONE,
60                 HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_NONE);
EXPORT_STATUS_LOG_TAGS.put( DATA_EXPORT_ERROR_UNKNOWN, HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_UNKNOWN)61         EXPORT_STATUS_LOG_TAGS.put(
62                 DATA_EXPORT_ERROR_UNKNOWN,
63                 HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_UNKNOWN);
EXPORT_STATUS_LOG_TAGS.put( DATA_EXPORT_LOST_FILE_ACCESS, HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_LOST_FILE_ACCESS)64         EXPORT_STATUS_LOG_TAGS.put(
65                 DATA_EXPORT_LOST_FILE_ACCESS,
66                 HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_ERROR_LOST_FILE_ACCESS);
EXPORT_STATUS_LOG_TAGS.put( DATA_EXPORT_STARTED, HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_STARTED)67         EXPORT_STATUS_LOG_TAGS.put(
68                 DATA_EXPORT_STARTED, HEALTH_CONNECT_EXPORT_INVOKED__STATUS__EXPORT_STATUS_STARTED);
69     }
70 
71     private static final SparseIntArray IMPORT_STATUS_LOG_TAGS;
72 
73     static {
74         IMPORT_STATUS_LOG_TAGS = new SparseIntArray();
IMPORT_STATUS_LOG_TAGS.put( DATA_IMPORT_ERROR_NONE, HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_NONE)75         IMPORT_STATUS_LOG_TAGS.put(
76                 DATA_IMPORT_ERROR_NONE,
77                 HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_NONE);
IMPORT_STATUS_LOG_TAGS.put( DATA_IMPORT_ERROR_UNKNOWN, HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_UNKNOWN)78         IMPORT_STATUS_LOG_TAGS.put(
79                 DATA_IMPORT_ERROR_UNKNOWN,
80                 HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_UNKNOWN);
IMPORT_STATUS_LOG_TAGS.put( DATA_IMPORT_ERROR_WRONG_FILE, HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_WRONG_FILE)81         IMPORT_STATUS_LOG_TAGS.put(
82                 DATA_IMPORT_ERROR_WRONG_FILE,
83                 HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_WRONG_FILE);
IMPORT_STATUS_LOG_TAGS.put( DATA_IMPORT_ERROR_VERSION_MISMATCH, HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_VERSION_MISMATCH)84         IMPORT_STATUS_LOG_TAGS.put(
85                 DATA_IMPORT_ERROR_VERSION_MISMATCH,
86                 HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_ERROR_VERSION_MISMATCH);
IMPORT_STATUS_LOG_TAGS.put( DATA_IMPORT_STARTED, HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_STARTED)87         IMPORT_STATUS_LOG_TAGS.put(
88                 DATA_IMPORT_STARTED, HEALTH_CONNECT_IMPORT_INVOKED__STATUS__IMPORT_STATUS_STARTED);
89     }
90 
91     private final HealthFitnessStatsLog mStatsLog;
92 
ExportImportLogger(HealthFitnessStatsLog statsLog)93     public ExportImportLogger(HealthFitnessStatsLog statsLog) {
94         mStatsLog = statsLog;
95     }
96 
97     /**
98      * Log Export metrics.
99      *
100      * @param exportStatus The status of the Export as defined by the status codes in
101      *     ExportStatus.java
102      * @param timeToSucceedOrFailMillis Time between starting the export and recording success/error
103      * @param originalDataSizeKb Size of the data that is being exported, before compression
104      * @param compressedDataSizeKb Size of the data that is being exported, after compression
105      */
logExportStatus( int exportStatus, int timeToSucceedOrFailMillis, int originalDataSizeKb, int compressedDataSizeKb)106     public void logExportStatus(
107             int exportStatus,
108             int timeToSucceedOrFailMillis,
109             int originalDataSizeKb,
110             int compressedDataSizeKb) {
111         mStatsLog.write(
112                 HEALTH_CONNECT_EXPORT_INVOKED,
113                 ExportImportLogger.EXPORT_STATUS_LOG_TAGS.get(exportStatus),
114                 timeToSucceedOrFailMillis,
115                 originalDataSizeKb,
116                 compressedDataSizeKb);
117     }
118 
119     /**
120      * Log Import metrics.
121      *
122      * @param importStatus The status of the Import as defined by the status codes in
123      *     ImportStatus.java
124      * @param timeToSucceedOrFailMillis Time between starting the import and recording success/error
125      * @param originalDataSizeKb Size of the data that is being imported, after decompression
126      * @param compressedDataSizeKb Size of the data that is being imported, before decompression
127      */
logImportStatus( int importStatus, int timeToSucceedOrFailMillis, int originalDataSizeKb, int compressedDataSizeKb)128     public void logImportStatus(
129             int importStatus,
130             int timeToSucceedOrFailMillis,
131             int originalDataSizeKb,
132             int compressedDataSizeKb) {
133         mStatsLog.write(
134                 HEALTH_CONNECT_IMPORT_INVOKED,
135                 IMPORT_STATUS_LOG_TAGS.get(importStatus),
136                 timeToSucceedOrFailMillis,
137                 originalDataSizeKb,
138                 compressedDataSizeKb);
139     }
140 }
141