diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BUILD b/src/main/java/com/google/devtools/build/lib/buildeventservice/BUILD
index 3eb1748..cb0ba3e 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BUILD
@@ -11,6 +11,16 @@
 )
 
 java_library(
+    name = "BuildEventServiceAvailabilityEvent",
+    srcs = ["BuildEventServiceAvailabilityEvent.java"],
+    deps = [
+        "//src/main/java/com/google/devtools/build/lib/util:exit_code",
+        "//src/main/protobuf:failure_details_java_proto",
+        "//third_party:jsr305",
+    ],
+)
+
+java_library(
     name = "buildeventservice-options",
     srcs = ["BuildEventServiceOptions.java"],
     deps = [
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceAvailabilityEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceAvailabilityEvent.java
new file mode 100644
index 0000000..f9d66d8
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceAvailabilityEvent.java
@@ -0,0 +1,54 @@
+// Copyright 2020 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.buildeventservice;
+
+import com.google.devtools.build.lib.server.FailureDetails.BuildProgress;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.util.ExitCode;
+import javax.annotation.Nullable;
+
+/** Event fired from {@link BuildEventServiceUploader}. */
+public class BuildEventServiceAvailabilityEvent {
+  private final ExitCode exitCode;
+  @Nullable private final FailureDetail failureDetail;
+
+  public BuildEventServiceAvailabilityEvent(
+      ExitCode exitCode, @Nullable FailureDetail failureDetail) {
+    this.exitCode = exitCode;
+    this.failureDetail = failureDetail;
+  }
+
+  public static BuildEventServiceAvailabilityEvent ofSuccess() {
+    return new BuildEventServiceAvailabilityEvent(ExitCode.SUCCESS, null);
+  }
+
+  /**
+   * Returns {@link ExitCode.SUCCESS} if the build event upload was a success, otherwise, return an
+   * exit code that corresponds to the error that occurred during the build event upload.
+   */
+  public ExitCode getExitCode() {
+    return exitCode;
+  }
+
+  /**
+   * Returns a failure detail containing the status of the build event that was uploaded to the
+   * build event service. This returns null if the upload completed successfully, otherwise, the
+   * contents will contain an {@link ExitCode} and a {@link BuildProgress.Code}.
+   */
+  @Nullable
+  public FailureDetail getFailureDetail() {
+    return failureDetail;
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java
index 4c830e3..ee2edba 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java
@@ -272,7 +272,7 @@
     return halfCloseFuture;
   }
 
-  private void logAndExitAbruptly(
+  private DetailedExitCode logAndSetException(
       String message, ExitCode exitCode, BuildProgress.Code bpCode, Throwable cause) {
     checkState(!exitCode.equals(ExitCode.SUCCESS));
     logger.atSevere().log(message);
@@ -284,6 +284,7 @@
                 .setBuildProgress(BuildProgress.newBuilder().setCode(bpCode).build())
                 .build());
     closeFuture.setException(new AbruptExitException(detailedExitCode, cause));
+    return detailedExitCode;
   }
 
   @Override
@@ -306,27 +307,34 @@
           publishLifecycleEvent(besProtoUtil.buildFinished(currentTime(), buildStatus));
         }
       }
+      eventBus.post(BuildEventServiceAvailabilityEvent.ofSuccess());
     } catch (InterruptedException e) {
-      logger.atInfo().log("Aborting the BES upload due to having received an interrupt");
       synchronized (lock) {
         Preconditions.checkState(
             interruptCausedByCancel, "Unexpected interrupt on BES uploader thread");
       }
     } catch (DetailedStatusException e) {
-      logAndExitAbruptly(
-          e.extendedMessage,
-          shouldRetryStatus(e.getStatus())
+      boolean isTransient = shouldRetryStatus(e.getStatus());
+      ExitCode exitCode =
+          isTransient
               ? ExitCode.TRANSIENT_BUILD_EVENT_SERVICE_UPLOAD_ERROR
-              : ExitCode.PERSISTENT_BUILD_EVENT_SERVICE_UPLOAD_ERROR,
-          e.bpCode,
-          e);
+              : ExitCode.PERSISTENT_BUILD_EVENT_SERVICE_UPLOAD_ERROR;
+      DetailedExitCode detailedExitCode =
+          logAndSetException(e.extendedMessage, exitCode, e.bpCode, e);
+      eventBus.post(
+          new BuildEventServiceAvailabilityEvent(exitCode, detailedExitCode.getFailureDetail()));
     } catch (LocalFileUploadException e) {
       Throwables.throwIfUnchecked(e.getCause());
-      logAndExitAbruptly(
-          "The Build Event Protocol local file upload failed:",
-          ExitCode.TRANSIENT_BUILD_EVENT_SERVICE_UPLOAD_ERROR,
-          BuildProgress.Code.BES_UPLOAD_LOCAL_FILE_ERROR,
-          e.getCause());
+      DetailedExitCode detailedExitCode =
+          logAndSetException(
+              "The Build Event Protocol local file upload failed:",
+              ExitCode.TRANSIENT_BUILD_EVENT_SERVICE_UPLOAD_ERROR,
+              BuildProgress.Code.BES_UPLOAD_LOCAL_FILE_ERROR,
+              e.getCause());
+      eventBus.post(
+          new BuildEventServiceAvailabilityEvent(
+              ExitCode.TRANSIENT_BUILD_EVENT_SERVICE_UPLOAD_ERROR,
+              detailedExitCode.getFailureDetail()));
     } catch (Throwable e) {
       closeFuture.setException(e);
       logger.atSevere().log("BES upload failed due to a RuntimeException / Error. This is a bug.");
