/* * Copyright 2016-present Facebook, Inc. * * 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.facebook.buck.rage; import com.facebook.buck.model.BuildId; import com.facebook.buck.util.environment.BuildEnvironmentDescription; import com.facebook.buck.util.immutables.BuckStyleImmutable; import com.google.common.collect.ImmutableSet; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; import org.immutables.value.Value; /** Interface around the 'backend' of submitting a defect report. */ public interface DefectReporter { DefectSubmitResult submitReport(DefectReport defectReport) throws IOException; @Value.Immutable @BuckStyleImmutable interface AbstractDefectSubmitResult { /** * If value is empty then no request was made and report was saved locally. * * @return if request was successful. */ Optional<Boolean> getIsRequestSuccessful(); /** * Returns the protocol version of the request based on {@link * AbstractRageConfig.RageProtocolVersion}. */ AbstractRageConfig.RageProtocolVersion getRequestProtocol(); /** @return The location where the report was saved, it can be a remote link or a local path */ Optional<String> getReportSubmitLocation(); /** @return the content of the response. */ Optional<String> getReportSubmitMessage(); /** @return if an error occurred it will have the error. */ Optional<String> getReportSubmitErrorMessage(); } /** Information helpful when diagnosing 'buck is not picking up changes' reports. */ @Value.Immutable @BuckStyleImmutable interface AbstractFileChangesIgnoredReport { Optional<Path> getWatchmanDiagReport(); } @Value.Immutable @BuckStyleImmutable interface AbstractDefectReport { Optional<UserReport> getUserReport(); ImmutableSet<BuildId> getHighlightedBuildIds(); ImmutableSet<Path> getIncludedPaths(); BuildEnvironmentDescription getBuildEnvironmentDescription(); Optional<SourceControlInfo> getSourceControlInfo(); Optional<String> getExtraInfo(); Optional<FileChangesIgnoredReport> getFileChangesIgnoredReport(); UserLocalConfiguration getUserLocalConfiguration(); } }