Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 598aa6f

Browse files
Merge pull request #806 from github-for-unity/fixes/metrics-shouldnt-be-null
Usage tracker should never be null
2 parents bafbf17 + 4a32215 commit 598aa6f

File tree

5 files changed

+55
-46
lines changed

5 files changed

+55
-46
lines changed

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ protected void Initialize()
4747
ApplicationConfiguration.WebTimeout = UserSettings.Get(Constants.WebTimeoutKey, ApplicationConfiguration.WebTimeout);
4848
Platform.Initialize(ProcessManager, TaskManager);
4949
progress.OnProgress += progressReporter.UpdateProgress;
50+
UsageTracker = new UsageTracker(UserSettings, Environment, InstanceId.ToString());
51+
52+
#if ENABLE_METRICS
53+
var metricsService = new MetricsService(ProcessManager,
54+
TaskManager,
55+
Environment.FileSystem,
56+
Environment.NodeJsExecutablePath,
57+
Environment.OctorunScriptPath);
58+
UsageTracker.MetricsService = metricsService;
59+
#endif
5060
}
5161

5262
public void Run()
@@ -59,8 +69,7 @@ public void Run()
5969
GitInstallationState state = new GitInstallationState();
6070
try
6171
{
62-
SetupMetrics(Environment.UnityVersion);
63-
72+
SetupMetrics();
6473
if (Environment.IsMac)
6574
{
6675
var getEnvPath = new SimpleProcessTask(TaskManager.Token, "bash".ToNPath(), "-c \"/usr/libexec/path_helper\"")
@@ -301,35 +310,14 @@ public void RestartRepository()
301310
Logger.Trace($"Got a repository? {(Environment.Repository != null ? Environment.Repository.LocalPath : "null")}");
302311
}
303312

304-
protected void SetupMetrics(string unityVersion)
313+
protected void SetupMetrics()
305314
{
306-
string userId = null;
307-
if (UserSettings.Exists(Constants.GuidKey))
308-
{
309-
userId = UserSettings.Get(Constants.GuidKey);
310-
}
311-
312-
if (String.IsNullOrEmpty(userId))
313-
{
314-
userId = Guid.NewGuid().ToString();
315-
UserSettings.Set(Constants.GuidKey, userId);
316-
}
317-
318-
#if ENABLE_METRICS
319-
var metricsService = new MetricsService(ProcessManager,
320-
TaskManager,
321-
Environment.FileSystem,
322-
Environment.NodeJsExecutablePath,
323-
Environment.OctorunScriptPath);
324-
325-
UsageTracker = new UsageTracker(metricsService, UserSettings, Environment, userId, unityVersion, InstanceId.ToString());
326-
327315
if (firstRun)
328316
{
329317
UsageTracker.IncrementNumberOfStartups();
330318
}
331-
#endif
332319
}
320+
333321
protected abstract void InitializeUI();
334322
protected abstract void InitializationComplete();
335323

src/GitHub.Api/Metrics/IMetricsService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace GitHub.Unity
55
{
6-
interface IMetricsService
6+
public interface IMetricsService
77
{
88
/// <summary>
99
/// Posts the provided usage model.

src/GitHub.Api/Metrics/IUsageTracker.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
public interface IUsageTracker
44
{
55
bool Enabled { get; set; }
6+
IMetricsService MetricsService { get; set; }
67
void IncrementNumberOfStartups();
78
void IncrementChangesViewButtonCommit();
89
void IncrementHistoryViewToolbarFetch();

src/GitHub.Api/Metrics/UsageTracker.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,43 @@ class UsageTracker : IUsageTracker
1414

1515
private readonly ISettings userSettings;
1616
private readonly IUsageLoader usageLoader;
17-
private readonly IMetricsService metricsService;
1817
private readonly string userId;
1918
private readonly string appVersion;
2019
private readonly string unityVersion;
2120
private readonly string instanceId;
2221
private Timer timer;
2322

24-
public UsageTracker(IMetricsService metricsService, ISettings userSettings,
25-
IEnvironment environment, string userId, string unityVersion, string instanceId)
26-
: this(metricsService, userSettings,
27-
new UsageLoader(environment.UserCachePath.Combine(Constants.UsageFile)),
28-
userId, unityVersion, instanceId)
23+
public IMetricsService MetricsService { get; set; }
24+
25+
public UsageTracker(ISettings userSettings,
26+
IEnvironment environment, string instanceId)
27+
: this(userSettings,
28+
new UsageLoader(environment.UserCachePath.Combine(Constants.UsageFile)),
29+
environment.UnityVersion, instanceId)
2930
{
3031
}
3132

32-
public UsageTracker(IMetricsService metricsService, ISettings userSettings,
33+
public UsageTracker(ISettings userSettings,
3334
IUsageLoader usageLoader,
34-
string userId, string unityVersion, string instanceId)
35+
string unityVersion, string instanceId)
3536
{
3637
this.userSettings = userSettings;
3738
this.usageLoader = usageLoader;
38-
this.metricsService = metricsService;
39-
this.userId = userId;
4039
this.appVersion = ApplicationInfo.Version;
4140
this.unityVersion = unityVersion;
4241
this.instanceId = instanceId;
4342

43+
if (userSettings.Exists(Constants.GuidKey))
44+
{
45+
userId = userSettings.Get(Constants.GuidKey);
46+
}
47+
48+
if (String.IsNullOrEmpty(userId))
49+
{
50+
userId = Guid.NewGuid().ToString();
51+
userSettings.Set(Constants.GuidKey, userId);
52+
}
53+
4454
Logger.Trace("userId:{0} instanceId:{1}", userId, instanceId);
4555
if (Enabled)
4656
RunTimer(3*60);
@@ -61,14 +71,14 @@ private void RunTimer(int seconds)
6171

6272
private async Task SendUsage()
6373
{
64-
var usageStore = usageLoader.Load(userId);
65-
66-
if (metricsService == null)
74+
if (MetricsService == null)
6775
{
6876
Logger.Warning("No service, not sending usage");
6977
return;
7078
}
7179

80+
var usageStore = usageLoader.Load(userId);
81+
7282
if (usageStore.LastUpdated.Date != DateTimeOffset.UtcNow.Date)
7383
{
7484
var currentTimeOffset = DateTimeOffset.UtcNow;
@@ -90,7 +100,7 @@ private async Task SendUsage()
90100

91101
try
92102
{
93-
await metricsService.PostUsage(extractReports);
103+
await MetricsService.PostUsage(extractReports);
94104
success = true;
95105
}
96106
catch (Exception ex)

src/tests/IntegrationTests/Metrics/MetricsTests.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,14 @@ public void IncrementMetricsWorks(string measureName)
3434
var instanceId = Guid.NewGuid().ToString();
3535
var usageLoader = Substitute.For<IUsageLoader>();
3636
var usageStore = new UsageStore();
37+
var settings = Substitute.For<ISettings>();
38+
settings.Exists(Arg.Is<string>(Constants.GuidKey)).Returns(true);
39+
settings.Get(Arg.Is<string>(Constants.GuidKey)).Returns(userId);
40+
3741
usageStore.Model.Guid = userId;
3842
usageLoader.Load(Arg.Is<string>(userId)).Returns(usageStore);
3943

40-
var usageTracker = new UsageTracker(Substitute.For<IMetricsService>(), Substitute.For<ISettings>(),
41-
usageLoader, userId, unityVersion, instanceId);
44+
var usageTracker = new UsageTracker(settings, usageLoader, unityVersion, instanceId);
4245

4346
var currentUsage = usageStore.GetCurrentMeasures(appVersion, unityVersion, instanceId);
4447
var prop = currentUsage.GetType().GetProperty(measureName);
@@ -59,14 +62,21 @@ public void LoadingWorks()
5962
var instanceId = Guid.NewGuid().ToString();
6063
var usageStore = new UsageStore();
6164
usageStore.Model.Guid = userId;
62-
var usageTracker = new UsageTracker(Substitute.For<IMetricsService>(), Substitute.For<ISettings>(),
63-
Environment, userId, unityVersion, instanceId);
64-
usageTracker.IncrementNumberOfStartups();
6565
var storePath = Environment.UserCachePath.Combine(Constants.UsageFile);
66+
var usageLoader = new UsageLoader(storePath);
67+
68+
var settings = Substitute.For<ISettings>();
69+
settings.Exists(Arg.Is<string>(Constants.GuidKey)).Returns(true);
70+
settings.Get(Arg.Is<string>(Constants.GuidKey)).Returns(userId);
71+
var usageTracker = new UsageTracker(settings, usageLoader, unityVersion, instanceId);
72+
73+
usageTracker.IncrementNumberOfStartups();
74+
usageTracker.IncrementNumberOfStartups();
75+
6676
Assert.IsTrue(storePath.FileExists());
6777
var json = storePath.ReadAllText(Encoding.UTF8);
6878
var savedStore = json.FromJson<UsageStore>(lowerCase: true);
69-
Assert.AreEqual(1, savedStore.GetCurrentMeasures(appVersion, unityVersion, instanceId).NumberOfStartups);
79+
Assert.AreEqual(2, savedStore.GetCurrentMeasures(appVersion, unityVersion, instanceId).NumberOfStartups);
7080
}
7181
}
7282
}

0 commit comments

Comments
 (0)