Add more BackupManagerMonitor events to PerformUnifiedRestoreTask.
In particular
add events to cover
-If this is KV or Full restore
-For each package, when the restore started and when it ended
-When a restore operation starts, if it is system restore or restore at install
-Any errors
Test: manual testing. Run `adb shell bmgr restore 1` and verify that the
new restore events are added to the dumpsys
atest CtsBackupHostTestCases, GtsBackupHostTestCases
atest BackupManagerMonitorDumpsysUtilsTest,
BackupManagerMonitorEventSenderTest, UserBackupManagerServiceTest,
PerformUnifiedRestoreTaskTest, BmgrTest
Bug: 290747920
Change-Id: I0d221f10932fea3e8fb90a1827c7f1b5bf21d25d
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index b6dc32a..0883727 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -1246,6 +1246,40 @@
return "TRANSPORT_IS_NULL";
case BackupManagerMonitor.LOG_EVENT_ID_AGENT_LOGGING_RESULTS:
return "AGENT_LOGGING_RESULTS";
+ case BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE:
+ return "START_SYSTEM_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL:
+ return "START_RESTORE_AT_INSTALL";
+ case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE:
+ return "TRANSPORT_ERROR_DURING_START_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME:
+ return "CANNOT_GET_NEXT_PKG_NAME";
+ case BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE:
+ return "UNKNOWN_RESTORE_TYPE";
+ case BackupManagerMonitor.LOG_EVENT_ID_KV_RESTORE:
+ return "KV_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE:
+ return "FULL_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET:
+ return "NO_NEXT_RESTORE_TARGET";
+ case BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR:
+ return "KV_AGENT_ERROR";
+ case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED:
+ return "PACKAGE_RESTORE_FINISHED";
+ case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE:
+ return "TRANSPORT_ERROR_KV_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_NO_FEEDER_THREAD:
+ return "NO_FEEDER_THREAD";
+ case BackupManagerMonitor.LOG_EVENT_ID_FULL_AGENT_ERROR:
+ return "FULL_AGENT_ERROR";
+ case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE:
+ return "TRANSPORT_ERROR_FULL_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_COMPLETE:
+ return "RESTORE_COMPLETE";
+ case BackupManagerMonitor.LOG_EVENT_ID_START_PACKAGE_RESTORE:
+ return "START_PACKAGE_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE:
+ return "AGENT_FAILURE";
default:
return "UNKNOWN_ID";
}
diff --git a/core/java/android/app/backup/BackupManagerMonitor.java b/core/java/android/app/backup/BackupManagerMonitor.java
index f73366b..812bf8e 100644
--- a/core/java/android/app/backup/BackupManagerMonitor.java
+++ b/core/java/android/app/backup/BackupManagerMonitor.java
@@ -18,6 +18,7 @@
import android.annotation.SystemApi;
import android.app.backup.BackupAnnotations.OperationType;
+import android.content.pm.PackageInfo;
import android.os.Bundle;
/**
@@ -190,6 +191,56 @@
public static final int LOG_EVENT_ID_TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED = 51;
public static final int LOG_EVENT_ID_AGENT_LOGGING_RESULTS = 52;
+ /** @hide */
+ public static final int LOG_EVENT_ID_START_SYSTEM_RESTORE = 53;
+ /** @hide */
+ public static final int LOG_EVENT_ID_START_RESTORE_AT_INSTALL = 54;
+ /** A transport error happened during {@link PerformUnifiedRestoreTask#startRestore()}
+ @hide */
+ public static final int LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE = 55;
+ /** Unable to get the name of the next package in the queue during a restore operation
+ @hide */
+ public static final int LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME = 56;
+ /** Attempting a restore operation that is neither KV nor full
+ @hide */
+ public static final int LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE = 57;
+ /** The package is part of KeyValue restore
+ @hide */
+ public static final int LOG_EVENT_ID_KV_RESTORE = 58;
+ /** The package is part of Full restore
+ @hide */
+ public static final int LOG_EVENT_ID_FULL_RESTORE = 59;
+ /** Unable to fetch the nest restore target in the queue
+ @hide */
+ public static final int LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET = 60;
+ /** An error occurred while attempting KeyValueRestore
+ @hide */
+ public static final int LOG_EVENT_ID_KV_AGENT_ERROR = 61;
+ /** Restore operation finished for the given package
+ @hide */
+ public static final int LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED= 62;
+ /** A transport error happened during
+ * {@link PerformUnifiedRestoreTask#initiateOneRestore(PackageInfo, long)}
+ @hide */
+ public static final int LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE = 63;
+ /** Unable to instantiate the feeder thread in full restore
+ @hide */
+ public static final int LOG_EVENT_ID_NO_FEEDER_THREAD = 64;
+ /** An error occurred while attempting Full restore
+ @hide */
+ public static final int LOG_EVENT_ID_FULL_AGENT_ERROR = 65;
+ /** A transport error happened during a full restore
+ @hide */
+ public static final int LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE = 66;
+ /** Start restore operation for a given package
+ @hide */
+ public static final int LOG_EVENT_ID_START_PACKAGE_RESTORE = 67;
+ /** Whole restore operation is complete
+ @hide */
+ public static final int LOG_EVENT_ID_RESTORE_COMPLETE = 68;
+ /** Agent error during {@link PerformUnifiedRestoreTask#restoreFinished()}
+ @hide */
+ public static final int LOG_EVENT_ID_AGENT_FAILURE = 69;
/**
* This method will be called each time something important happens on BackupManager.
diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
index e04bf11..bbec79d 100644
--- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
+++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
@@ -394,6 +394,20 @@
// If we're starting a full-system restore, set up to begin widget ID remapping
if (mIsSystemRestore) {
AppWidgetBackupBridge.systemRestoreStarting(mUserId);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE,
+ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
+ } else {
+ //We are either performing RestoreAtInstall or Bmgr.
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL,
+ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
}
try {
@@ -421,6 +435,12 @@
mStatus = transport.startRestore(mToken, packages);
if (mStatus != BackupTransport.TRANSPORT_OK) {
Slog.e(TAG, "Transport error " + mStatus + "; no restore possible");
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
+ monitoringExtras);
mStatus = BackupTransport.TRANSPORT_ERROR;
executeNextState(UnifiedRestoreState.FINAL);
return;
@@ -528,6 +548,12 @@
final String pkgName = (mRestoreDescription != null)
? mRestoreDescription.getPackageName() : null;
if (pkgName == null) {
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME,
+ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
+ monitoringExtras);
Slog.e(TAG, "Failure getting next package name");
EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
nextState = UnifiedRestoreState.FINAL;
@@ -550,6 +576,14 @@
Metadata metaInfo = mPmAgent.getRestoredMetadata(pkgName);
if (metaInfo == null) {
+ PackageInfo pkgInfo = new PackageInfo();
+ pkgInfo.packageName = pkgName;
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_PM_AGENT_HAS_NO_METADATA,
+ pkgInfo,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
Slog.e(TAG, "No metadata for " + pkgName);
EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE, pkgName,
"Package metadata missing");
@@ -560,6 +594,13 @@
try {
mCurrentPackage = backupManagerService.getPackageManager().getPackageInfoAsUser(
pkgName, PackageManager.GET_SIGNING_CERTIFICATES, mUserId);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_START_PACKAGE_RESTORE,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
+
} catch (NameNotFoundException e) {
// Whoops, we thought we could restore this package but it
// turns out not to be present. Skip it.
@@ -641,12 +682,24 @@
} else {
// Unknown restore type; ignore this package and move on
Slog.e(TAG, "Unrecognized restore type " + type);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);;
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
nextState = UnifiedRestoreState.RUNNING_QUEUE;
return;
}
} catch (Exception e) {
Slog.e(TAG, "Can't get next restore target from transport; halting: "
+ e.getMessage());
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);;
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
nextState = UnifiedRestoreState.FINAL;
return;
@@ -663,6 +716,10 @@
final String packageName = mCurrentPackage.packageName;
// Validate some semantic requirements that apply in this way
// only to the key/value restore API flow
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_KV_RESTORE, mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ /*monitoringExtras*/ addRestoreOperationTypeToEvent(/*extras*/null));
if (mCurrentPackage.applicationInfo.backupAgentName == null
|| "".equals(mCurrentPackage.applicationInfo.backupAgentName)) {
if (MORE_DEBUG) {
@@ -721,6 +778,11 @@
++mCount;
} catch (Exception e) {
Slog.e(TAG, "Error when attempting restore: " + e.toString());
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR, mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT,
+ monitoringExtras);
keyValueAgentErrorCleanup(false);
executeNextState(UnifiedRestoreState.RUNNING_QUEUE);
}
@@ -759,6 +821,12 @@
// Transport-level failure. This failure could be specific to package currently in
// restore.
Slog.e(TAG, "Error getting restore data for " + packageName);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
+ monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
stage.close();
downloadFile.delete();
@@ -815,6 +883,11 @@
new ArrayList<>(getExcludedKeysForPackage(packageName)));
} catch (Exception e) {
Slog.e(TAG, "Unable to call app for restore: " + packageName, e);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR, mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT,
+ monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE,
packageName, e.toString());
// Clears any pending timeout messages as well.
@@ -888,6 +961,10 @@
//
// When finished, StreamFeederThread executes next state as appropriate on the
// backup looper, and the overall unified restore task resumes
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE, mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ /*monitoringExtras*/ addRestoreOperationTypeToEvent(/*extras*/null));
try {
StreamFeederThread feeder = new StreamFeederThread();
if (MORE_DEBUG) {
@@ -903,6 +980,11 @@
// current target. We haven't asked the transport for data yet, though,
// so we can do that simply by going back to running the restore queue.
Slog.e(TAG, "Unable to construct pipes for stream restore!");
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_NO_FEEDER_THREAD, mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
executeNextState(UnifiedRestoreState.RUNNING_QUEUE);
}
}
@@ -927,6 +1009,10 @@
} catch (Exception e) {
final String packageName = mCurrentPackage.packageName;
Slog.e(TAG, "Unable to finalize restore of " + packageName);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE, mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE,
packageName, e.toString());
keyValueAgentErrorCleanup(true);
@@ -1020,6 +1106,12 @@
// handling will deal properly with that.
Slog.e(TAG, "Error " + result + " streaming restore for "
+ mCurrentPackage.packageName);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
+ monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
status = result;
}
@@ -1032,6 +1124,12 @@
// but potentially recoverable; abandon this package's restore but
// carry on with the next restore target.
Slog.e(TAG, "Unable to route data for restore");
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_FULL_AGENT_ERROR,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT,
+ monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE,
mCurrentPackage.packageName, "I/O error on pipes");
status = BackupTransport.AGENT_ERROR;
@@ -1040,6 +1138,12 @@
// the sockets will wake up the engine and it will then tidy up the
// remote end.
Slog.e(TAG, "Transport failed during restore: " + e.getMessage());
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE,
+ mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
+ monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
status = BackupTransport.TRANSPORT_ERROR;
} finally {
@@ -1213,6 +1317,13 @@
}
Slog.i(TAG, "Restore complete.");
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_RESTORE_COMPLETE,
+ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
+
mListener.onFinished(callerLogString);
}
@@ -1313,6 +1424,7 @@
@Override
public void operationComplete(long unusedResult) {
mOperationStorage.removeOperation(mEphemeralOpToken);
+
if (MORE_DEBUG) {
Slog.i(TAG, "operationComplete() during restore: target="
+ mCurrentPackage.packageName
@@ -1341,6 +1453,11 @@
// Okay, we're done with this package. Tidy up and go on to the next
// app in the queue.
int size = (int) mBackupDataName.length();
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED, mCurrentPackage,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_PACKAGE,
mCurrentPackage.packageName, size);
diff --git a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java
index bc2326d..16da846 100644
--- a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java
+++ b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java
@@ -272,6 +272,32 @@
case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED ->
"Transport non-incremental backup required";
case BackupManagerMonitor.LOG_EVENT_ID_AGENT_LOGGING_RESULTS -> "Agent logging results";
+ case BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE -> "Start system restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL ->
+ "Start restore at install";
+ case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE ->
+ "Transport error during start restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME ->
+ "Cannot get next package name";
+ case BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE -> "Unknown restore type";
+ case BackupManagerMonitor.LOG_EVENT_ID_KV_RESTORE -> "KV restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE -> "Full restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET ->
+ "No next restore target";
+ case BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR -> "KV agent error";
+ case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED ->
+ "Package restore finished";
+ case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE ->
+ "Transport error KV restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_NO_FEEDER_THREAD -> "No feeder thread";
+ case BackupManagerMonitor.LOG_EVENT_ID_FULL_AGENT_ERROR -> "Full agent error";
+ case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE ->
+ "Transport error full restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_COMPLETE -> "Restore complete";
+ case BackupManagerMonitor.LOG_EVENT_ID_START_PACKAGE_RESTORE ->
+ "Start package restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE ->
+ "Agent failure";
default -> "Unknown log event ID: " + code;
};
return id;