From c362799798d3afa86c4a6a46af2cef4e6a3825bd Mon Sep 17 00:00:00 2001 From: Arpan Kaphle Date: Thu, 4 May 2023 22:22:53 +0000 Subject: [PATCH] Emit Simple Metrics for Set/GetCredProvider APIs This adds our 'quick metric' to check the status of our other API methods. Final changes to come soon. Bug: 271135048 Test: Build Test Change-Id: I52efc7fdceb03df1e57d494c516425cd77679703 --- .../credentials/CredentialManagerService.java | 30 +++++++++++++++++-- .../server/credentials/metrics/ApiName.java | 17 +++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java index 86dbe11d5ddce..cadee6f06aad9 100644 --- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java +++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java @@ -706,11 +706,18 @@ public final class CredentialManagerService public void setEnabledProviders( List primaryProviders, List providers, int userId, ISetEnabledProvidersCallback callback) { + final int callingUid = Binder.getCallingUid(); if (!hasWriteSecureSettingsPermission()) { try { + MetricUtilities.logApiCalledSimpleV2( + ApiName.SET_ENABLED_PROVIDERS, + ApiStatus.FAILURE, callingUid); callback.onError( PERMISSION_DENIED_ERROR, PERMISSION_DENIED_WRITE_SECURE_SETTINGS_ERROR); } catch (RemoteException e) { + MetricUtilities.logApiCalledSimpleV2( + ApiName.SET_ENABLED_PROVIDERS, + ApiStatus.FAILURE, callingUid); Slog.e(TAG, "Issue with invoking response: ", e); } return; @@ -744,10 +751,16 @@ public final class CredentialManagerService if (!writeEnabledStatus || !writePrimaryStatus) { Slog.e(TAG, "Failed to store setting containing enabled or primary providers"); try { + MetricUtilities.logApiCalledSimpleV2( + ApiName.SET_ENABLED_PROVIDERS, + ApiStatus.FAILURE, callingUid); callback.onError( "failed_setting_store", "Failed to store setting containing enabled or primary providers"); } catch (RemoteException e) { + MetricUtilities.logApiCalledSimpleV2( + ApiName.SET_ENABLED_PROVIDERS, + ApiStatus.FAILURE, callingUid); Slog.e(TAG, "Issue with invoking error response: ", e); return; } @@ -755,8 +768,14 @@ public final class CredentialManagerService // Call the callback. try { + MetricUtilities.logApiCalledSimpleV2( + ApiName.SET_ENABLED_PROVIDERS, + ApiStatus.SUCCESS, callingUid); callback.onResponse(); } catch (RemoteException e) { + MetricUtilities.logApiCalledSimpleV2( + ApiName.SET_ENABLED_PROVIDERS, + ApiStatus.FAILURE, callingUid); Slog.e(TAG, "Issue with invoking response: ", e); // TODO: Propagate failure } @@ -805,10 +824,15 @@ public final class CredentialManagerService public List getCredentialProviderServices( int userId, int providerFilter) { verifyGetProvidersPermission(); + final int callingUid = Binder.getCallingUid(); + MetricUtilities.logApiCalledSimpleV2( + ApiName.GET_CREDENTIAL_PROVIDER_SERVICES, + ApiStatus.SUCCESS, callingUid); + return CredentialProviderInfoFactory + .getCredentialProviderServices( + mContext, userId, providerFilter, getEnabledProvidersForUser(userId), + getPrimaryProvidersForUserId(mContext, userId)); - return CredentialProviderInfoFactory.getCredentialProviderServices( - mContext, userId, providerFilter, getEnabledProvidersForUser(userId), - getPrimaryProvidersForUserId(mContext, userId)); } @Override diff --git a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java index fd497965b5b1c..cb6a5d06e35f5 100644 --- a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java +++ b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java @@ -24,8 +24,11 @@ import static android.credentials.ui.RequestInfo.TYPE_UNDEFINED; import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CLEAR_CREDENTIAL; import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CREATE_CREDENTIAL; import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL; +import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL_PROVIDER_SERVICES; import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL_VIA_REGISTRY; import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_IS_ENABLED_CREDENTIAL_PROVIDER_SERVICE; +import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_REGISTER_CREDENTIAL_DESCRIPTION; +import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_SET_ENABLED_PROVIDERS; import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_UNKNOWN; import android.credentials.ui.RequestInfo; @@ -45,6 +48,20 @@ CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL_VIA CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CLEAR_CREDENTIAL), IS_ENABLED_CREDENTIAL_PROVIDER_SERVICE( CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_IS_ENABLED_CREDENTIAL_PROVIDER_SERVICE + ), + + SET_ENABLED_PROVIDERS( + CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_SET_ENABLED_PROVIDERS), + + GET_CREDENTIAL_PROVIDER_SERVICES( + CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL_PROVIDER_SERVICES), + + REGISTER_CREDENTIAL_DESCRIPTION( + CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_REGISTER_CREDENTIAL_DESCRIPTION + ), + + UNREGISTER_CREDENTIAL_DESCRIPTION( + CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_REGISTER_CREDENTIAL_DESCRIPTION ); private static final String TAG = "ApiName";