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