Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 607bec2

Browse files
committed
Add option to enable VS Telemetry on UsageTracker
Make GitHubPackage responsible for enabling VS Telemetry on VS 2017 and above.
1 parent 40c2635 commit 607bec2

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

src/GitHub.VisualStudio.16/CompositionServices.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ internal static IUsageTracker CreateUsageTracker(CompositionContainer compositio
8282
var gitHubServiceProvider = compositionContainer.GetExportedValue<IGitHubServiceProvider>();
8383
var usageService = compositionContainer.GetExportedValue<IUsageService>();
8484
var joinableTaskContext = compositionContainer.GetExportedValue<JoinableTaskContext>();
85-
return new UsageTracker(gitHubServiceProvider, usageService, packageSettings, joinableTaskContext);
85+
return new UsageTracker(gitHubServiceProvider, usageService, packageSettings, joinableTaskContext, vsTelemetry: true);
8686
}
8787
}
8888

src/GitHub.VisualStudio/GitHubPackage.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,13 @@ async Task<object> CreateService(IAsyncServiceContainer container, CancellationT
393393
Assumes.Present(serviceProvider);
394394
Assumes.Present(settings);
395395

396-
return new UsageTracker(serviceProvider, usageService, settings, ThreadHelper.JoinableTaskContext);
396+
// Only use Visual Studio Telemetry on VS 2017 and above
397+
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
398+
var dte = await GetServiceAsync(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
399+
Assumes.Present(dte);
400+
var vsTelemetry = new Version(dte.Version) >= new Version(15, 0);
401+
402+
return new UsageTracker(serviceProvider, usageService, settings, ThreadHelper.JoinableTaskContext, vsTelemetry);
397403
}
398404
else if (serviceType == typeof(IVSGitExt))
399405
{

src/GitHub.VisualStudio/Services/UsageTracker.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public sealed class UsageTracker : IUsageTracker, IDisposable
2323
readonly IUsageService service;
2424
IConnectionManager connectionManager;
2525
readonly IPackageSettings userSettings;
26+
readonly bool vsTelemetry;
2627
IVSServices vsservices;
2728
IUsageTracker visualStudioUsageTracker;
2829
IDisposable timer;
@@ -32,12 +33,15 @@ public UsageTracker(
3233
IGitHubServiceProvider gitHubServiceProvider,
3334
IUsageService service,
3435
IPackageSettings settings,
35-
JoinableTaskContext joinableTaskContext)
36+
JoinableTaskContext joinableTaskContext,
37+
bool vsTelemetry)
3638
{
3739
this.gitHubServiceProvider = gitHubServiceProvider;
3840
this.service = service;
3941
this.userSettings = settings;
4042
JoinableTaskContext = joinableTaskContext;
43+
this.vsTelemetry = vsTelemetry;
44+
4145
timer = StartTimer();
4246
}
4347

@@ -101,9 +105,7 @@ async Task Initialize()
101105
connectionManager = gitHubServiceProvider.GetService<IConnectionManager>();
102106
vsservices = gitHubServiceProvider.GetService<IVSServices>();
103107

104-
// Only create VisualStudioUsageTracker on Visual Studio 2017 and above
105-
var dte = gitHubServiceProvider.GetService<EnvDTE.DTE>();
106-
if (new Version(dte.Version) >= new Version(15, 0))
108+
if (vsTelemetry)
107109
{
108110
log.Verbose("Creating VisualStudioUsageTracker");
109111
visualStudioUsageTracker = new VisualStudioUsageTracker(connectionManager);

test/GitHub.VisualStudio.UnitTests/Services/MetricsTests.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class UsageTrackerTests : TestBaseClass
2424
public void ShouldStartTimer()
2525
{
2626
var service = Substitute.For<IUsageService>();
27-
var target = new UsageTracker(CreateServiceProvider(), service, CreatePackageSettings(), new JoinableTaskContext());
27+
var target = new UsageTracker(CreateServiceProvider(), service, CreatePackageSettings(), new JoinableTaskContext(), vsTelemetry: false);
2828

2929
service.Received(1).StartTimer(Arg.Any<Func<Task>>(), TimeSpan.FromMinutes(3), TimeSpan.FromDays(1));
3030
}
@@ -111,7 +111,8 @@ public async Task ShouldIncrementCounter()
111111
CreateServiceProvider(),
112112
usageService,
113113
CreatePackageSettings(),
114-
new JoinableTaskContext());
114+
new JoinableTaskContext(),
115+
vsTelemetry: false);
115116

116117
await target.IncrementCounter(x => x.NumberOfClones);
117118
UsageData result = usageService.ReceivedCalls().First(x => x.GetMethodInfo().Name == "WriteLocalData").GetArguments()[0] as UsageData;
@@ -128,7 +129,8 @@ public async Task ShouldWriteData()
128129
CreateServiceProvider(),
129130
service,
130131
CreatePackageSettings(),
131-
new JoinableTaskContext());
132+
new JoinableTaskContext(),
133+
vsTelemetry: false);
132134

133135
await target.IncrementCounter(x => x.NumberOfClones);
134136
await service.Received(1).WriteLocalData(Arg.Is<UsageData>(data =>
@@ -155,7 +157,8 @@ public async Task ShouldWriteUpdatedData()
155157
CreateServiceProvider(),
156158
service,
157159
CreatePackageSettings(),
158-
new JoinableTaskContext());
160+
new JoinableTaskContext(),
161+
vsTelemetry: false);
159162

160163
await target.IncrementCounter(x => x.NumberOfClones);
161164
await service.Received(1).WriteLocalData(Arg.Is<UsageData>(data =>
@@ -177,7 +180,7 @@ static Tuple<UsageTracker, Func<Task>> CreateTargetAndGetTick(
177180
service.WhenForAnyArgs(x => x.StartTimer(null, new TimeSpan(), new TimeSpan()))
178181
.Do(x => tick = x.ArgAt<Func<Task>>(0));
179182

180-
var target = new UsageTracker(serviceProvider, service, CreatePackageSettings(), new JoinableTaskContext());
183+
var target = new UsageTracker(serviceProvider, service, CreatePackageSettings(), new JoinableTaskContext(), vsTelemetry: false);
181184

182185
return Tuple.Create(target, tick);
183186
}

0 commit comments

Comments
 (0)