diff --git a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/XMLLanguageServer.java b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/XMLLanguageServer.java index d1c2a5eafa..7ba9db4594 100644 --- a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/XMLLanguageServer.java +++ b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/XMLLanguageServer.java @@ -32,6 +32,8 @@ import org.eclipse.lsp4j.services.WorkspaceService; import org.eclipse.lsp4xml.commons.ModelTextDocument; import org.eclipse.lsp4xml.commons.ParentProcessWatcher.ProcessLanguageServer; +import org.eclipse.lsp4xml.commons.telemetry.TelemetryData; +import org.eclipse.lsp4xml.commons.telemetry.TelemetryManager; import org.eclipse.lsp4xml.customservice.AutoCloseTagResponse; import org.eclipse.lsp4xml.customservice.XMLCustomService; import org.eclipse.lsp4xml.dom.DOMDocument; @@ -55,6 +57,7 @@ import org.eclipse.lsp4xml.settings.capabilities.ServerCapabilitiesInitializer; import org.eclipse.lsp4xml.settings.capabilities.XMLCapabilityManager; import org.eclipse.lsp4xml.utils.FilesUtils; +import org.eclipse.lsp4xml.utils.VersionHelper; /** * XML language server. @@ -72,7 +75,8 @@ public class XMLLanguageServer private final ScheduledExecutorService delayer; private Integer parentProcessId; public XMLCapabilityManager capabilityManager; - + private TelemetryManager telemetryManager; + public XMLLanguageServer() { xmlLanguageService = new XMLLanguageService(); xmlLanguageService.setDocumentProvider(this); @@ -83,20 +87,34 @@ public XMLLanguageServer() { @Override public CompletableFuture initialize(InitializeParams params) { + long s = System.currentTimeMillis(); + try { LOGGER.info("Initializing LSP4XML server " + getVersion() + " with " + System.getProperty("java.home")); this.parentProcessId = params.getProcessId(); + long start = System.currentTimeMillis(); // Update XML language service extensions with InitializeParams xmlLanguageService.initializeParams(params); + + System.err.println("initializeParams ->" + (start - System.currentTimeMillis())); + start = System.currentTimeMillis(); capabilityManager.setClientCapabilities(params.getCapabilities()); updateSettings(InitializationOptionsSettings.getSettings(params)); + System.err.println("updateSettings ->" + (start - System.currentTimeMillis())); + start = System.currentTimeMillis(); xmlTextDocumentService.updateClientCapabilities(capabilityManager.getClientCapabilities().capabilities); ServerCapabilities nonDynamicServerCapabilities = ServerCapabilitiesInitializer.getNonDynamicServerCapabilities( capabilityManager.getClientCapabilities(), xmlTextDocumentService.isIncrementalSupport()); + System.err.println("updateClientCapabilities ->" + (start - System.currentTimeMillis())); + + return CompletableFuture.completedFuture(new InitializeResult(nonDynamicServerCapabilities)); + }finally { + System.err.println("FINAL->" + (s - System.currentTimeMillis())); + } } /* @@ -110,7 +128,12 @@ public CompletableFuture initialize(InitializeParams params) { */ @Override public void initialized(InitializedParams params) { + long start = System.currentTimeMillis(); capabilityManager.initializeCapabilities(); + TelemetryData data = new TelemetryData(); + data.setServerVersion(VersionHelper.getVersion()); + telemetryManager.telemetryEvent(data); + System.err.println("initializeCapabilities ->" + (start - System.currentTimeMillis())); } /** @@ -207,6 +230,7 @@ public WorkspaceService getWorkspaceService() { public void setClient(LanguageClient languageClient) { this.languageClient = languageClient; capabilityManager = new XMLCapabilityManager(this.languageClient, xmlTextDocumentService); + telemetryManager = new TelemetryManager(languageClient); } public LanguageClient getLanguageClient() { diff --git a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/commons/telemetry/TelemetryData.java b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/commons/telemetry/TelemetryData.java new file mode 100644 index 0000000000..e81753a312 --- /dev/null +++ b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/commons/telemetry/TelemetryData.java @@ -0,0 +1,56 @@ +/******************************************************************************* +* Copyright (c) 2019 Red Hat Inc. and others. +* All rights reserved. This program and the accompanying materials +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v20.html +* +* Contributors: +* Red Hat Inc. - initial API and implementation +*******************************************************************************/ +package org.eclipse.lsp4xml.commons.telemetry; + +/** + * Telemetry data to collect. + * + * + * + * @author Angelo ZERR + * + */ +public class TelemetryData { + + private String serverVersion; + + private String jvmVersion; + + private String memory; + + public String getServerVersion() { + return serverVersion; + } + + public void setServerVersion(String serverVersion) { + this.serverVersion = serverVersion; + } + + public String getJvmVersion() { + return jvmVersion; + } + + public void setJvmVersion(String jvmVersion) { + this.jvmVersion = jvmVersion; + } + + public String getMemory() { + return memory; + } + + public void setMemory(String memory) { + this.memory = memory; + } + +} diff --git a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/commons/telemetry/TelemetryManager.java b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/commons/telemetry/TelemetryManager.java new file mode 100644 index 0000000000..3f68ff67e8 --- /dev/null +++ b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/commons/telemetry/TelemetryManager.java @@ -0,0 +1,16 @@ +package org.eclipse.lsp4xml.commons.telemetry; + +import org.eclipse.lsp4j.services.LanguageClient; + +public class TelemetryManager { + + private final LanguageClient languageClient; + + public TelemetryManager(LanguageClient languageClient) { + this.languageClient = languageClient; + } + + public void telemetryEvent(Object object) { + languageClient.telemetryEvent(object); + } +}