mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-12 02:58:35 -05:00
Formatter and PeekDefinition Telemetry (#245)
- Add telemetry point for format requests - Update PeekDefinition telemetry so that it captures whether the attempt succeeded and if it was connected. This will help us understand whether our current behavior of just notifying success/failure to the output window was useful or not. It will also help us understand whether we're doing a good job implementing this / if we need to improve reliability and preformance.
This commit is contained in:
@@ -52,8 +52,49 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices.Contracts
|
||||
public const string IntellisenseQuantile = "IntellisenseQuantile";
|
||||
|
||||
/// <summary>
|
||||
/// telemetry even name for when definition is requested
|
||||
/// telemetry event name for when definition is requested
|
||||
/// </summary>
|
||||
public const string PeekDefinitionRequested = "PeekDefinitionRequested";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// telemetry event name for when definition is requested
|
||||
/// </summary>
|
||||
public const string FormatCode = "FormatCode";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of properties used in telemetry events
|
||||
/// </summary>
|
||||
public static class TelemetryPropertyNames
|
||||
{
|
||||
/// <summary>
|
||||
/// Is a connection to an Azure database or not
|
||||
/// </summary>
|
||||
public const string IsAzure = "IsAzure";
|
||||
|
||||
/// <summary>
|
||||
/// Did an event succeed or not
|
||||
/// </summary>
|
||||
public const string Succeeded = "Succeeded";
|
||||
|
||||
/// <summary>
|
||||
/// Was the action against a connected file or similar resource, or not
|
||||
/// </summary>
|
||||
public const string Connected = "Connected";
|
||||
|
||||
/// <summary>
|
||||
/// Format type property - should be one of <see cref="DocumentFormatType"/> or <see cref="RangeFormatType"/>
|
||||
/// </summary>
|
||||
public const string FormatType = "FormatType";
|
||||
|
||||
/// <summary>
|
||||
/// A full document format
|
||||
/// </summary>
|
||||
public const string DocumentFormatType = "Document";
|
||||
|
||||
/// <summary>
|
||||
/// A document range format
|
||||
/// </summary>
|
||||
public const string RangeFormatType = "Range";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
//
|
||||
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.SqlTools.ServiceLayer.Hosting;
|
||||
using Microsoft.SqlTools.ServiceLayer.Hosting.Protocol;
|
||||
using Microsoft.SqlTools.ServiceLayer.LanguageServices.Contracts;
|
||||
using Microsoft.SqlTools.ServiceLayer.Utility;
|
||||
using Microsoft.SqlTools.ServiceLayer.Workspace.Contracts;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
|
||||
@@ -43,6 +43,8 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
|
||||
/// </summary>
|
||||
public static void SendTelemetryEvent<T>(RequestContext<T> requestContext, string telemetryEvent)
|
||||
{
|
||||
Validate.IsNotNull(nameof(requestContext), requestContext);
|
||||
Validate.IsNotNullOrWhitespaceString(nameof(telemetryEvent), telemetryEvent);
|
||||
Task.Factory.StartNew(async () =>
|
||||
{
|
||||
await requestContext.SendEvent(TelemetryNotification.Type, new TelemetryParams()
|
||||
@@ -54,5 +56,22 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends a telemetry event for specific document using the existing request context
|
||||
/// </summary>
|
||||
public static void SendTelemetryEvent<T>(RequestContext<T> requestContext, TelemetryProperties telemetryProps)
|
||||
{
|
||||
Validate.IsNotNull(nameof(requestContext), requestContext);
|
||||
Validate.IsNotNull(nameof(telemetryProps), telemetryProps);
|
||||
Validate.IsNotNullOrWhitespaceString("telemetryProps.EventName", telemetryProps.EventName);
|
||||
Task.Factory.StartNew(async () =>
|
||||
{
|
||||
await requestContext.SendEvent(TelemetryNotification.Type, new TelemetryParams()
|
||||
{
|
||||
Params = telemetryProps
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -312,7 +312,6 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
|
||||
EventName = TelemetryEventNames.PeekDefinitionRequested
|
||||
}
|
||||
});
|
||||
DocumentStatusHelper.SendTelemetryEvent(requestContext, TelemetryEventNames.PeekDefinitionRequested);
|
||||
DocumentStatusHelper.SendStatusChange(requestContext, textDocumentPosition, DocumentStatusHelper.DefinitionRequested);
|
||||
|
||||
if (WorkspaceService<SqlToolsSettings>.Instance.CurrentSettings.IsIntelliSenseEnabled)
|
||||
@@ -320,7 +319,8 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
|
||||
// Retrieve document and connection
|
||||
ConnectionInfo connInfo;
|
||||
var scriptFile = LanguageService.WorkspaceServiceInstance.Workspace.GetFile(textDocumentPosition.TextDocument.Uri);
|
||||
LanguageService.ConnectionServiceInstance.TryFindConnection(scriptFile.ClientFilePath, out connInfo);
|
||||
bool isConnected = LanguageService.ConnectionServiceInstance.TryFindConnection(scriptFile.ClientFilePath, out connInfo);
|
||||
bool succeeded = false;
|
||||
DefinitionResult definitionResult = LanguageService.Instance.GetDefinition(textDocumentPosition, scriptFile, connInfo);
|
||||
if (definitionResult != null)
|
||||
{
|
||||
@@ -331,12 +331,29 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
|
||||
else
|
||||
{
|
||||
await requestContext.SendResult(definitionResult.Locations);
|
||||
succeeded = true;
|
||||
}
|
||||
}
|
||||
|
||||
DocumentStatusHelper.SendTelemetryEvent(requestContext, CreatePeekTelemetryProps(succeeded, isConnected));
|
||||
}
|
||||
|
||||
DocumentStatusHelper.SendStatusChange(requestContext, textDocumentPosition, DocumentStatusHelper.DefinitionRequestCompleted);
|
||||
}
|
||||
|
||||
private static TelemetryProperties CreatePeekTelemetryProps(bool succeeded, bool connected)
|
||||
{
|
||||
return new TelemetryProperties
|
||||
{
|
||||
Properties = new Dictionary<string, string>
|
||||
{
|
||||
{ TelemetryPropertyNames.Succeeded, succeeded.ToOneOrZeroString() },
|
||||
{ TelemetryPropertyNames.Connected, connected.ToOneOrZeroString() }
|
||||
},
|
||||
EventName = TelemetryEventNames.PeekDefinitionRequested
|
||||
};
|
||||
}
|
||||
|
||||
// turn off this code until needed (10/28/2016)
|
||||
#if false
|
||||
private static async Task HandleReferencesRequest(
|
||||
|
||||
Reference in New Issue
Block a user