Search in sources :

Example 1 with DoctorEndpointRequest

use of com.facebook.buck.doctor.config.DoctorEndpointRequest in project buck by facebook.

the class DoctorCommand method runWithoutHelp.

@Override
public int runWithoutHelp(CommandRunnerParams params) throws IOException, InterruptedException {
    ProjectFilesystem filesystem = params.getCell().getFilesystem();
    BuildLogHelper buildLogHelper = new BuildLogHelper(filesystem, params.getObjectMapper());
    UserInput userInput = new UserInput(params.getConsole().getStdOut(), new BufferedReader(new InputStreamReader(params.getStdIn())));
    DoctorReportHelper helper = new DoctorReportHelper(params.getCell().getFilesystem(), userInput, params.getConsole(), params.getObjectMapper(), params.getBuckConfig().getView(DoctorConfig.class));
    Optional<BuildLogEntry> entry = helper.promptForBuild(new ArrayList<>(buildLogHelper.getBuildLogs()));
    if (!entry.isPresent()) {
        params.getConsole().getStdOut().println("No interesting commands found in buck-out/log.");
        return 0;
    }
    Optional<DefectSubmitResult> rageResult = generateRageReport(params, userInput, entry.get());
    if (!rageResult.isPresent()) {
        params.getConsole().printErrorText("Failed to generate report to send.");
        return 1;
    }
    DoctorEndpointRequest request = helper.generateEndpointRequest(entry.get(), rageResult.get());
    DoctorEndpointResponse response = helper.uploadRequest(request);
    helper.presentResponse(response);
    helper.presentRageResult(rageResult);
    return 0;
}
Also used : InputStreamReader(java.io.InputStreamReader) DoctorEndpointRequest(com.facebook.buck.doctor.config.DoctorEndpointRequest) DoctorReportHelper(com.facebook.buck.doctor.DoctorReportHelper) BuildLogHelper(com.facebook.buck.rage.BuildLogHelper) UserInput(com.facebook.buck.rage.UserInput) DoctorConfig(com.facebook.buck.doctor.config.DoctorConfig) BuildLogEntry(com.facebook.buck.rage.BuildLogEntry) DefectSubmitResult(com.facebook.buck.rage.DefectSubmitResult) BufferedReader(java.io.BufferedReader) DoctorEndpointResponse(com.facebook.buck.doctor.config.DoctorEndpointResponse) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem)

Example 2 with DoctorEndpointRequest

use of com.facebook.buck.doctor.config.DoctorEndpointRequest in project buck by facebook.

the class DoctorCommandIntegrationTest method testEndpointUrl.

@Test
public void testEndpointUrl() throws Exception {
    DoctorReportHelper helper = createDoctorHelper((new UserInputFixture("0")).getUserInput(), DoctorConfig.of(FakeBuckConfig.builder().build()));
    BuildLogHelper buildLogHelper = new BuildLogHelper(workspace.asCell().getFilesystem(), objectMapper);
    Optional<BuildLogEntry> entry = helper.promptForBuild(new ArrayList<>(buildLogHelper.getBuildLogs()));
    DoctorEndpointRequest request = helper.generateEndpointRequest(entry.get(), rageResult);
    DoctorEndpointResponse response = helper.uploadRequest(request);
    assertEquals("Please define URL", response.getErrorMessage().get(), "Doctor endpoint URL is not set. Please set [doctor] endpoint_url on your .buckconfig");
}
Also used : BuildLogEntry(com.facebook.buck.rage.BuildLogEntry) UserInputFixture(com.facebook.buck.rage.UserInputFixture) DoctorEndpointRequest(com.facebook.buck.doctor.config.DoctorEndpointRequest) BuildLogHelper(com.facebook.buck.rage.BuildLogHelper) DoctorEndpointResponse(com.facebook.buck.doctor.config.DoctorEndpointResponse) Test(org.junit.Test)

Example 3 with DoctorEndpointRequest

use of com.facebook.buck.doctor.config.DoctorEndpointRequest in project buck by facebook.

the class DoctorCommandIntegrationTest method testPromptWithoutRageReport.

@Test
public void testPromptWithoutRageReport() throws Exception {
    assumeThat(Platform.detect(), Matchers.not(Matchers.is(Platform.WINDOWS)));
    DoctorReportHelper helper = createDoctorHelper((new UserInputFixture("0")).getUserInput(), createDoctorConfig(httpd));
    BuildLogHelper buildLogHelper = new BuildLogHelper(workspace.asCell().getFilesystem(), objectMapper);
    Optional<BuildLogEntry> entry = helper.promptForBuild(new ArrayList<>(buildLogHelper.getBuildLogs()));
    DoctorEndpointRequest request = helper.generateEndpointRequest(entry.get(), rageResult);
    DoctorEndpointResponse response = helper.uploadRequest(request);
    helper.presentResponse(response);
    assertEquals(response, doctorResponse);
    assertEquals("\n:: Suggestions\n- [Error] Suggestion no1\n- [Warning][Area] Suggestion no2\n\n", ((TestConsole) helper.getConsole()).getTextWrittenToStdOut());
}
Also used : BuildLogEntry(com.facebook.buck.rage.BuildLogEntry) UserInputFixture(com.facebook.buck.rage.UserInputFixture) DoctorEndpointRequest(com.facebook.buck.doctor.config.DoctorEndpointRequest) BuildLogHelper(com.facebook.buck.rage.BuildLogHelper) DoctorEndpointResponse(com.facebook.buck.doctor.config.DoctorEndpointResponse) Test(org.junit.Test)

Example 4 with DoctorEndpointRequest

use of com.facebook.buck.doctor.config.DoctorEndpointRequest in project buck by facebook.

the class DoctorReportHelper method uploadRequest.

public DoctorEndpointResponse uploadRequest(DoctorEndpointRequest request) {
    if (!doctorConfig.getEndpointUrl().isPresent()) {
        String errorMsg = String.format("Doctor endpoint URL is not set. Please set [%s] %s on your .buckconfig", DoctorConfig.DOCTOR_SECTION, DoctorConfig.URL_FIELD);
        return createErrorDoctorEndpointResponse(errorMsg);
    }
    byte[] requestJson;
    try {
        requestJson = objectMapper.writeValueAsBytes(request);
    } catch (JsonProcessingException e) {
        return createErrorDoctorEndpointResponse("Failed to encode request to JSON. " + "Reason: " + e.getMessage());
    }
    OkHttpClient httpClient = new OkHttpClient.Builder().connectTimeout(doctorConfig.getHttpTimeoutMs(), TimeUnit.MILLISECONDS).readTimeout(doctorConfig.getHttpTimeoutMs(), TimeUnit.MILLISECONDS).writeTimeout(doctorConfig.getHttpTimeoutMs(), TimeUnit.MILLISECONDS).build();
    Response httpResponse;
    try {
        RequestBody requestBody;
        ImmutableMap<String, String> extraArgs = doctorConfig.getExtraRequestArgs();
        if (extraArgs.isEmpty()) {
            requestBody = RequestBody.create(JSON, requestJson);
        } else {
            FormBody.Builder formBody = new FormBody.Builder();
            formBody.add("data", new String(requestJson));
            for (Map.Entry<String, String> entry : extraArgs.entrySet()) {
                formBody.add(entry.getKey(), entry.getValue());
            }
            requestBody = formBody.build();
        }
        Request httpRequest = new Request.Builder().url(doctorConfig.getEndpointUrl().get()).post(requestBody).build();
        httpResponse = httpClient.newCall(httpRequest).execute();
    } catch (IOException e) {
        return createErrorDoctorEndpointResponse("Failed to perform the request to " + doctorConfig.getEndpointUrl().get() + ". Reason: " + e.getMessage());
    }
    try {
        if (httpResponse.isSuccessful()) {
            String body = new String(httpResponse.body().bytes(), Charsets.UTF_8);
            return objectMapper.readValue(body, DoctorEndpointResponse.class);
        }
        return createErrorDoctorEndpointResponse("Request was not successful.");
    } catch (JsonProcessingException e) {
        return createErrorDoctorEndpointResponse(String.format(DECODE_FAIL_TEMPLATE, e.getMessage()));
    } catch (IOException e) {
        return createErrorDoctorEndpointResponse(String.format(DECODE_FAIL_TEMPLATE, e.getMessage()));
    }
}
Also used : OkHttpClient(okhttp3.OkHttpClient) FormBody(okhttp3.FormBody) DoctorEndpointRequest(com.facebook.buck.doctor.config.DoctorEndpointRequest) Request(okhttp3.Request) IOException(java.io.IOException) Response(okhttp3.Response) DoctorEndpointResponse(com.facebook.buck.doctor.config.DoctorEndpointResponse) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) RequestBody(okhttp3.RequestBody)

Aggregations

DoctorEndpointRequest (com.facebook.buck.doctor.config.DoctorEndpointRequest)4 DoctorEndpointResponse (com.facebook.buck.doctor.config.DoctorEndpointResponse)4 BuildLogEntry (com.facebook.buck.rage.BuildLogEntry)3 BuildLogHelper (com.facebook.buck.rage.BuildLogHelper)3 UserInputFixture (com.facebook.buck.rage.UserInputFixture)2 Test (org.junit.Test)2 DoctorReportHelper (com.facebook.buck.doctor.DoctorReportHelper)1 DoctorConfig (com.facebook.buck.doctor.config.DoctorConfig)1 ProjectFilesystem (com.facebook.buck.io.ProjectFilesystem)1 DefectSubmitResult (com.facebook.buck.rage.DefectSubmitResult)1 UserInput (com.facebook.buck.rage.UserInput)1 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 BufferedReader (java.io.BufferedReader)1 IOException (java.io.IOException)1 InputStreamReader (java.io.InputStreamReader)1 Map (java.util.Map)1 FormBody (okhttp3.FormBody)1 OkHttpClient (okhttp3.OkHttpClient)1 Request (okhttp3.Request)1