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

Commit 43321e9

Browse files
authored
Merge branch 'master' into more-serialization-magic
2 parents c25f6e9 + 9cd216c commit 43321e9

File tree

17 files changed

+292
-95
lines changed

17 files changed

+292
-95
lines changed

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,11 @@ public ITask InitializeRepository()
166166
Environment.InitializeRepository();
167167
RestartRepository();
168168
})
169-
.ThenInUI(InitializeUI);
169+
.ThenInUI(() =>
170+
{
171+
TaskManager.Run(UsageTracker.IncrementNumberOfProjectsInitialized);
172+
InitializeUI();
173+
});
170174
return task;
171175
}
172176

@@ -183,22 +187,22 @@ public void RestartRepository()
183187
}
184188
}
185189

186-
protected void SetupMetrics(string unityVersion, bool firstRun)
190+
protected void SetupMetrics(string unityVersion, bool firstRun, Guid instanceId)
187191
{
188192
//Logger.Trace("Setup metrics");
189193

190194
var usagePath = Environment.UserCachePath.Combine(Constants.UsageFile);
191195

192-
string id = null;
196+
string userId = null;
193197
if (UserSettings.Exists(Constants.GuidKey))
194198
{
195-
id = UserSettings.Get(Constants.GuidKey);
199+
userId = UserSettings.Get(Constants.GuidKey);
196200
}
197201

198-
if (String.IsNullOrEmpty(id))
202+
if (String.IsNullOrEmpty(userId))
199203
{
200-
id = Guid.NewGuid().ToString();
201-
UserSettings.Set(Constants.GuidKey, id);
204+
userId = Guid.NewGuid().ToString();
205+
UserSettings.Set(Constants.GuidKey, userId);
202206
}
203207

204208
#if ENABLE_METRICS
@@ -208,11 +212,11 @@ protected void SetupMetrics(string unityVersion, bool firstRun)
208212
Environment.NodeJsExecutablePath,
209213
Environment.OctorunScriptPath);
210214

211-
UsageTracker = new UsageTracker(metricsService, UserSettings, usagePath, id, unityVersion);
215+
UsageTracker = new UsageTracker(metricsService, UserSettings, usagePath, userId, unityVersion, instanceId.ToString());
212216

213217
if (firstRun)
214218
{
215-
UsageTracker.IncrementLaunchCount();
219+
TaskManager.Run(UsageTracker.IncrementNumberOfStartups);
216220
}
217221
#endif
218222
}

src/GitHub.Api/Helpers/Constants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ static class Constants
66
{
77
public const string GuidKey = "Guid";
88
public const string MetricsKey = "MetricsEnabled";
9-
public const string UsageFile = "usage.json";
9+
public const string UsageFile = "metrics.json";
1010
public const string GitInstallPathKey = "GitInstallPath";
1111
public const string TraceLoggingKey = "EnableTraceLogging";
1212
public const string WebTimeoutKey = "WebTimeout";

src/GitHub.Api/Metrics/IUsageTracker.cs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,33 @@
33
public interface IUsageTracker
44
{
55
bool Enabled { get; set; }
6-
void IncrementLaunchCount();
6+
void IncrementNumberOfStartups();
7+
void IncrementNumberOfCommits();
8+
void IncrementNumberOfFetches();
9+
void IncrementNumberOfPushes();
10+
void IncrementNumberOfPulls();
11+
void IncrementNumberOfAuthentications();
12+
void IncrementNumberOfProjectsInitialized();
13+
void IncrementNumberOfLocalBranchCreations();
14+
void IncrementNumberOfLocalBranchDeletions();
15+
void IncrementNumberOfLocalBranchCheckouts();
16+
void IncrementNumberOfRemoteBranchCheckouts();
717
}
818

919
class NullUsageTracker : IUsageTracker
1020
{
1121
public bool Enabled { get; set; }
12-
13-
public void IncrementLaunchCount(){ }
14-
public void SetMetricsService(IMetricsService instance)
15-
{ }
22+
public void IncrementNumberOfStartups() { }
23+
public void IncrementNumberOfCommits() { }
24+
public void IncrementNumberOfFetches() { }
25+
public void IncrementNumberOfPushes() { }
26+
public void IncrementNumberOfPulls() { }
27+
public void IncrementNumberOfAuthentications() { }
28+
public void IncrementNumberOfProjectsInitialized() { }
29+
public void IncrementNumberOfLocalBranchCreations() { }
30+
public void IncrementNumberOfLocalBranchDeletions() { }
31+
public void IncrementNumberOfLocalBranchCheckouts() { }
32+
public void IncrementNumberOfRemoteBranchCheckouts() { }
33+
public void SetMetricsService(IMetricsService instance) { }
1634
}
1735
}

src/GitHub.Api/Metrics/UsageModel.cs

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,40 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Globalization;
34
using System.Linq;
45

56
namespace GitHub.Unity
67
{
78
public class Usage
9+
{
10+
public string InstanceId { get; set; }
11+
public Dimensions Dimensions { get; set; } = new Dimensions();
12+
public Measures Measures { get; set; } = new Measures();
13+
}
14+
15+
public class Dimensions
816
{
917
public string Guid { get; set; }
1018
public DateTime Date { get; set; }
1119
public string AppVersion { get; set; }
1220
public string UnityVersion { get; set; }
1321
public string Lang { get; set; }
22+
public string CurrentLang { get; set; }
23+
}
24+
25+
public class Measures
26+
{
1427
public int NumberOfStartups { get; set; }
28+
public int Commits { get; set; }
29+
public int Fetches { get; set; }
30+
public int Pushes { get; set; }
31+
public int Pulls { get; set; }
32+
public int ProjectsInitialized { get; set; }
33+
public int Authentications { get; set; }
34+
public int LocalBranchCreations { get; set; }
35+
public int LocalBranchDeletion { get; set; }
36+
public int LocalBranchCheckouts { get; set; }
37+
public int RemoteBranchCheckouts { get; set; }
1538
}
1639

1740
class UsageModel
@@ -21,23 +44,32 @@ class UsageModel
2144

2245
private Usage currentUsage;
2346

24-
public Usage GetCurrentUsage()
47+
public Usage GetCurrentUsage(string appVersion, string unityVersion, string instanceId)
2548
{
49+
Guard.ArgumentNotNullOrWhiteSpace(appVersion, "appVersion");
50+
Guard.ArgumentNotNullOrWhiteSpace(unityVersion, "unityVersion");
51+
2652
var date = DateTime.UtcNow.Date;
2753
if (currentUsage == null)
2854
{
29-
currentUsage = Reports.FirstOrDefault(usage => usage.Date == date);
55+
currentUsage = Reports
56+
.FirstOrDefault(usage => usage.InstanceId == instanceId);
3057
}
3158

32-
if (currentUsage?.Date == date)
33-
{
34-
// update any fields that might be missing, if we've changed the format
35-
if (currentUsage.Guid != Guid)
36-
currentUsage.Guid = Guid;
37-
}
38-
else
59+
if (currentUsage == null)
3960
{
40-
currentUsage = new Usage { Date = date, Guid = Guid };
61+
currentUsage = new Usage
62+
{
63+
InstanceId = instanceId,
64+
Dimensions = {
65+
Date = date,
66+
Guid = Guid,
67+
AppVersion = appVersion,
68+
UnityVersion = unityVersion,
69+
Lang = CultureInfo.InstalledUICulture.IetfLanguageTag,
70+
CurrentLang = CultureInfo.CurrentCulture.IetfLanguageTag
71+
}
72+
};
4173
Reports.Add(currentUsage);
4274
}
4375

@@ -46,12 +78,12 @@ public Usage GetCurrentUsage()
4678

4779
public List<Usage> SelectReports(DateTime beforeDate)
4880
{
49-
return Reports.Where(usage => usage.Date.Date != beforeDate.Date).ToList();
81+
return Reports.Where(usage => usage.Dimensions.Date.Date != beforeDate.Date).ToList();
5082
}
5183

5284
public void RemoveReports(DateTime beforeDate)
5385
{
54-
Reports.RemoveAll(usage => usage.Date.Date != beforeDate.Date);
86+
Reports.RemoveAll(usage => usage.Dimensions.Date.Date != beforeDate.Date);
5587
}
5688
}
5789

0 commit comments

Comments
 (0)