Search in sources :

Example 1 with Debuggee

use of com.google.api.services.clouddebugger.v2.model.Debuggee in project google-cloud-intellij by GoogleCloudPlatform.

the class ProjectRepositoryValidator method checkSyncStashState.

/**
 * Compares the current source tree with the state described by the Cloud Debugger api. Only local
 * and cloud repo Git repositories are supported.
 */
@NotNull
@Transient
public SyncResult checkSyncStashState() {
    if (processState.getProject() == null) {
        return new SyncResult(/*isInvalid*/
        true, /*needsStash*/
        false, /*needsSync*/
        false, /*target SHA*/
        null, /*target repo*/
        null, /* cloud repo */
        false, /* repoType */
        null);
    }
    GitRepositoryManager manager = GitUtil.getRepositoryManager(processState.getProject());
    List<GitRepository> repositories = manager.getRepositories();
    CloudRepoSourceContext cloudRepo = null;
    GerritSourceContext gerritRepo = null;
    GitSourceContext otherGitRepo = null;
    String repoType = null;
    boolean foundDebuggee = false;
    if (getCloudDebuggerClient() != null && !com.google.common.base.Strings.isNullOrEmpty(processState.getProjectNumber())) {
        ListDebuggeesResponse debuggees;
        try {
            debuggees = getCloudDebuggerClient().debuggees().list().setProject(processState.getProjectNumber()).setClientVersion(ServiceManager.getService(PluginInfoService.class).getClientVersionForCloudDebugger()).execute();
            for (Debuggee debuggee : debuggees.getDebuggees()) {
                if (processState.getDebuggeeId() != null && processState.getDebuggeeId().equals(debuggee.getId())) {
                    // implicit assumption this doesn't happen more than once
                    foundDebuggee = true;
                    List<SourceContext> contexts = debuggee.getSourceContexts();
                    if (contexts != null) {
                        for (SourceContext sourceContext : contexts) {
                            cloudRepo = sourceContext.getCloudRepo();
                            gerritRepo = sourceContext.getGerrit();
                            otherGitRepo = sourceContext.getGit();
                            if (cloudRepo != null) {
                                // shouldn't be more than one repo but if there is, we'll prefer cloud repos
                                break;
                            } else if (sourceContext.getCloudWorkspace() != null) {
                                repoType = GctBundle.getString("clouddebug.workspace");
                            }
                        }
                    }
                }
            }
        } catch (IOException ex) {
            LOG.warn("Error detecting server side source context", ex);
        }
    }
    if (!foundDebuggee) {
        return new SyncResult(/*isinvalid*/
        true, /*needsstash*/
        false, /*needssync*/
        false, /*target SHA*/
        null, /*target repo*/
        null, /* hasCloudRepository */
        false, /* repoType */
        GctBundle.getString("clouddebug.unknown.repository.type"));
    }
    GitRepository targetLocalRepo = null;
    String revisionId = null;
    // shouldn't be more than one repo but if there is, we pick cloud repos
    if (cloudRepo != null) {
        revisionId = cloudRepo.getRevisionId();
        repoType = GctBundle.getString("clouddebug.cloud.repository");
    } else if (gerritRepo != null) {
        revisionId = gerritRepo.getRevisionId();
        repoType = GctBundle.getString("clouddebug.gerrit");
    } else if (otherGitRepo != null) {
        revisionId = otherGitRepo.getRevisionId();
        repoType = GctBundle.getString("clouddebug.nongoogle.git");
    }
    if (revisionId != null) {
        for (GitRepository repository : repositories) {
            try {
                GitChangeUtils.resolveReference(processState.getProject(), repository.getRoot(), revisionId);
                targetLocalRepo = repository;
                break;
            } catch (VcsException ex) {
                LOG.warn("cloud revision not found in local repo.  continuing search...");
            }
        }
    }
    boolean needsStash = false;
    boolean needsSync = false;
    String syncSha = null;
    if (targetLocalRepo != null) {
        // check for local changes.
        try {
            if (GitUtil.hasLocalChanges(true, processState.getProject(), targetLocalRepo.getRoot()) || GitUtil.hasLocalChanges(false, processState.getProject(), targetLocalRepo.getRoot())) {
                needsStash = true;
            }
            if (!Strings.isNullOrEmpty(targetLocalRepo.getCurrentRevision()) && !Strings.isNullOrEmpty(revisionId) && targetLocalRepo.getCurrentRevision() != null && !targetLocalRepo.getCurrentRevision().equals(revisionId)) {
                syncSha = revisionId;
                needsSync = true;
            }
        } catch (VcsException vcsException) {
            LOG.error("Error detecting local changes during attach", vcsException);
        }
    }
    boolean hasRemoteRepository = cloudRepo != null || gerritRepo != null || otherGitRepo != null;
    return new SyncResult(/*isinvalid*/
    false, needsStash, needsSync, syncSha, targetLocalRepo, hasRemoteRepository, repoType);
}
Also used : ListDebuggeesResponse(com.google.api.services.clouddebugger.v2.model.ListDebuggeesResponse) GitRepositoryManager(git4idea.repo.GitRepositoryManager) GitSourceContext(com.google.api.services.clouddebugger.v2.model.GitSourceContext) CloudRepoSourceContext(com.google.api.services.clouddebugger.v2.model.CloudRepoSourceContext) GerritSourceContext(com.google.api.services.clouddebugger.v2.model.GerritSourceContext) IOException(java.io.IOException) GerritSourceContext(com.google.api.services.clouddebugger.v2.model.GerritSourceContext) CloudRepoSourceContext(com.google.api.services.clouddebugger.v2.model.CloudRepoSourceContext) GitSourceContext(com.google.api.services.clouddebugger.v2.model.GitSourceContext) SourceContext(com.google.api.services.clouddebugger.v2.model.SourceContext) GitRepository(git4idea.repo.GitRepository) Debuggee(com.google.api.services.clouddebugger.v2.model.Debuggee) VcsException(com.intellij.openapi.vcs.VcsException) Transient(com.intellij.util.xmlb.annotations.Transient) NotNull(org.jetbrains.annotations.NotNull)

Example 2 with Debuggee

use of com.google.api.services.clouddebugger.v2.model.Debuggee in project google-cloud-intellij by GoogleCloudPlatform.

the class CloudDebugGlobalPoller method pollForChanges.

/**
 * pollForChanges sends a synchronous, hanging query to the server and compares the result to see
 * if there are changes from the current state. Explanation of <a
 * href="https://en.wikipedia.org/wiki/Push_technology#Long_polling">hanging query (a.k.a. long
 * poll)</a>
 *
 * @param state represents the target debuggee to query
 */
void pollForChanges(@NotNull final CloudDebugProcessState state) {
    final Debugger client = CloudDebuggerClient.getShortTimeoutClient(state);
    if (client == null) {
        if (state.isListenInBackground()) {
            // state is supposed to listen, but does not have access to the backend
            LOG.warn("CloudDebugProcessState is listening in the background but no debugger client " + "could be retrieved => stop listening");
            handleBreakpointQueryError(state, GctBundle.message("clouddebug.background.listener.access.error.message", state.getProject().getName()));
            return;
        } else {
            // We should poll only states that listen in the background, reaching this branch is
            // unexpected
            LOG.error("Polling changes for a debug state that is not set to listen in the background");
            return;
        }
    }
    boolean changed = false;
    try {
        String oldToken = state.getWaitToken();
        queryServerForBreakpoints(state, client);
        String responseWaitToken = state.getWaitToken();
        if (!Strings.isNullOrEmpty(responseWaitToken)) {
            changed = oldToken == null || !responseWaitToken.equals(oldToken);
        } else {
            changed = !Strings.isNullOrEmpty(oldToken);
        }
    } catch (SocketTimeoutException ex) {
    // noop, this is expected behavior.
    } catch (GoogleJsonResponseException ex) {
        // a result is available (which will be retrieved via the subsequent query)
        if (ex.getStatusCode() != HttpURLConnection.HTTP_CONFLICT) {
            handleBreakpointQueryError(state, ex);
        }
    } catch (IOException ex) {
        LOG.warn("exception listing breakpoints", ex);
        handleBreakpointQueryError(state, ex);
        return;
    } catch (Exception ex) {
        LOG.error("exception listing breakpoints", ex);
        handleBreakpointQueryError(state, ex);
        return;
    }
    if (changed) {
        fireBreakpointsChanged(state);
    }
}
Also used : Debugger(com.google.api.services.clouddebugger.v2.Clouddebugger.Debugger) GoogleJsonResponseException(com.google.api.client.googleapis.json.GoogleJsonResponseException) SocketTimeoutException(java.net.SocketTimeoutException) IOException(java.io.IOException) GoogleJsonResponseException(com.google.api.client.googleapis.json.GoogleJsonResponseException) SocketTimeoutException(java.net.SocketTimeoutException) IOException(java.io.IOException)

Example 3 with Debuggee

use of com.google.api.services.clouddebugger.v2.model.Debuggee in project google-cloud-intellij by GoogleCloudPlatform.

the class DebugTargetTest method createDebuggee.

private Debuggee createDebuggee(String module, String version) {
    Debuggee defaultDebuggee = new Debuggee();
    Map<String, String> labels = new HashMap<String, String>();
    if (module != null) {
        labels.put(MODULE, module);
    }
    labels.put(VERSION, version);
    defaultDebuggee.setLabels(labels);
    return defaultDebuggee;
}
Also used : Debuggee(com.google.api.services.clouddebugger.v2.model.Debuggee) HashMap(java.util.HashMap)

Example 4 with Debuggee

use of com.google.api.services.clouddebugger.v2.model.Debuggee in project beam by apache.

the class DataflowRunner method maybeRegisterDebuggee.

private void maybeRegisterDebuggee(DataflowPipelineOptions options, String uniquifier) {
    if (!options.getEnableCloudDebugger()) {
        return;
    }
    if (options.getDebuggee() != null) {
        throw new RuntimeException("Should not specify the debuggee");
    }
    Clouddebugger debuggerClient = DataflowTransport.newClouddebuggerClient(options).build();
    Debuggee debuggee = registerDebuggee(debuggerClient, uniquifier);
    options.setDebuggee(debuggee);
    System.out.println(debuggerMessage(options.getProject(), debuggee.getUniquifier()));
}
Also used : Debuggee(com.google.api.services.clouddebugger.v2.model.Debuggee) Clouddebugger(com.google.api.services.clouddebugger.v2.Clouddebugger)

Example 5 with Debuggee

use of com.google.api.services.clouddebugger.v2.model.Debuggee in project beam by apache.

the class DataflowRunner method registerDebuggee.

private Debuggee registerDebuggee(Clouddebugger debuggerClient, String uniquifier) {
    RegisterDebuggeeRequest registerReq = new RegisterDebuggeeRequest();
    registerReq.setDebuggee(new Debuggee().setProject(options.getProject()).setUniquifier(uniquifier).setDescription(uniquifier).setAgentVersion("google.com/cloud-dataflow-java/v1"));
    try {
        RegisterDebuggeeResponse registerResponse = debuggerClient.controller().debuggees().register(registerReq).execute();
        Debuggee debuggee = registerResponse.getDebuggee();
        if (debuggee.getStatus() != null && debuggee.getStatus().getIsError()) {
            throw new RuntimeException("Unable to register with the debugger: " + debuggee.getStatus().getDescription().getFormat());
        }
        return debuggee;
    } catch (IOException e) {
        throw new RuntimeException("Unable to register with the debugger: ", e);
    }
}
Also used : RegisterDebuggeeResponse(com.google.api.services.clouddebugger.v2.model.RegisterDebuggeeResponse) Debuggee(com.google.api.services.clouddebugger.v2.model.Debuggee) RegisterDebuggeeRequest(com.google.api.services.clouddebugger.v2.model.RegisterDebuggeeRequest) IOException(java.io.IOException)

Aggregations

Debuggee (com.google.api.services.clouddebugger.v2.model.Debuggee)6 IOException (java.io.IOException)4 ListDebuggeesResponse (com.google.api.services.clouddebugger.v2.model.ListDebuggeesResponse)2 GoogleJsonResponseException (com.google.api.client.googleapis.json.GoogleJsonResponseException)1 Clouddebugger (com.google.api.services.clouddebugger.v2.Clouddebugger)1 Debugger (com.google.api.services.clouddebugger.v2.Clouddebugger.Debugger)1 CloudRepoSourceContext (com.google.api.services.clouddebugger.v2.model.CloudRepoSourceContext)1 GerritSourceContext (com.google.api.services.clouddebugger.v2.model.GerritSourceContext)1 GitSourceContext (com.google.api.services.clouddebugger.v2.model.GitSourceContext)1 RegisterDebuggeeRequest (com.google.api.services.clouddebugger.v2.model.RegisterDebuggeeRequest)1 RegisterDebuggeeResponse (com.google.api.services.clouddebugger.v2.model.RegisterDebuggeeResponse)1 SourceContext (com.google.api.services.clouddebugger.v2.model.SourceContext)1 PluginInfoService (com.google.cloud.tools.intellij.service.PluginInfoService)1 VcsException (com.intellij.openapi.vcs.VcsException)1 HashMap (com.intellij.util.containers.HashMap)1 Transient (com.intellij.util.xmlb.annotations.Transient)1 GitRepository (git4idea.repo.GitRepository)1 GitRepositoryManager (git4idea.repo.GitRepositoryManager)1 SocketTimeoutException (java.net.SocketTimeoutException)1 HashMap (java.util.HashMap)1