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

Commit 3093492

Browse files
Revert "Making UsageModel a flat object again"
This reverts commit 5f27039. # Conflicts: # src/GitHub.Exports/Models/UsageModel.cs # src/GitHub.VisualStudio/Services/UsageTracker.cs # test/UnitTests/GitHub.VisualStudio/Services/UsageTrackerTests.cs
1 parent 4bc3c69 commit 3093492

File tree

5 files changed

+71
-57
lines changed

5 files changed

+71
-57
lines changed

src/GitHub.Exports/Models/UsageModel.cs

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,66 @@ namespace GitHub.Models
55
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Justification = "It'll use reflection by default and we're fine with that")]
66
public struct UsageModel
77
{
8-
public Guid Guid { get; set; }
9-
public DateTimeOffset Date { get; set; }
10-
public bool IsGitHubUser { get; set; }
11-
public bool IsEnterpriseUser { get; set; }
12-
public string AppVersion { get; set; }
13-
public string VSVersion { get; set; }
14-
public string Lang { get; set; }
15-
public string CurrentLang { get; set; }
16-
public int NumberOfStartups { get; set; }
17-
public int NumberOfUpstreamPullRequests { get; set; }
18-
public int NumberOfClones { get; set; }
19-
public int NumberOfReposCreated { get; set; }
20-
public int NumberOfReposPublished { get; set; }
21-
public int NumberOfGists { get; set; }
22-
public int NumberOfOpenInGitHub { get; set; }
23-
public int NumberOfLinkToGitHub { get; set; }
24-
public int NumberOfLogins { get; set; }
25-
public int NumberOfOAuthLogins { get; set; }
26-
public int NumberOfTokenLogins { get; set; }
27-
public int NumberOfPullRequestsOpened { get; set; }
28-
public int NumberOfLocalPullRequestsCheckedOut { get; set; }
29-
public int NumberOfLocalPullRequestPulls { get; set; }
30-
public int NumberOfLocalPullRequestPushes { get; set; }
31-
public int NumberOfForkPullRequestsCheckedOut { get; set; }
32-
public int NumberOfForkPullRequestPulls { get; set; }
33-
public int NumberOfForkPullRequestPushes { get; set; }
34-
public int NumberOfSyncSubmodules { get; set; }
35-
public int NumberOfWelcomeDocsClicks { get; set; }
36-
public int NumberOfWelcomeTrainingClicks { get; set; }
37-
public int NumberOfGitHubPaneHelpClicks { get; set; }
38-
public int NumberOfPRDetailsViewChanges { get; set; }
39-
public int NumberOfPRDetailsViewFile { get; set; }
40-
public int NumberOfPRDetailsCompareWithSolution { get; set; }
41-
public int NumberOfPRDetailsOpenFileInSolution { get; set; }
42-
public int NumberOfPRDetailsNavigateToEditor { get; set; }
43-
public int NumberOfPRReviewDiffViewInlineCommentOpen { get; set; }
44-
public int NumberOfPRReviewDiffViewInlineCommentPost { get; set; }
45-
public int NumberOfShowCurrentPullRequest { get; set; }
8+
public DimensionsModel Dimensions { get; set; }
9+
public MeasuresModel Measures { get; set; }
4610

4711
public static UsageModel Create(Guid guid)
4812
{
4913
return new UsageModel
5014
{
51-
Guid = guid,
52-
Date = DateTime.Now,
15+
Dimensions = new DimensionsModel
16+
{
17+
Guid = guid,
18+
Date = DateTime.Now,
19+
},
20+
Measures = new MeasuresModel(),
5321
};
5422
}
23+
24+
public class DimensionsModel
25+
{
26+
public Guid Guid { get; set; }
27+
public DateTimeOffset Date { get; set; }
28+
public bool IsGitHubUser { get; set; }
29+
public bool IsEnterpriseUser { get; set; }
30+
public string AppVersion { get; set; }
31+
public string VSVersion { get; set; }
32+
public string Lang { get; set; }
33+
public string CurrentLang { get; set; }
34+
}
35+
36+
public class MeasuresModel
37+
{
38+
public int NumberOfStartups { get; set; }
39+
public int NumberOfUpstreamPullRequests { get; set; }
40+
public int NumberOfClones { get; set; }
41+
public int NumberOfReposCreated { get; set; }
42+
public int NumberOfReposPublished { get; set; }
43+
public int NumberOfGists { get; set; }
44+
public int NumberOfOpenInGitHub { get; set; }
45+
public int NumberOfLinkToGitHub { get; set; }
46+
public int NumberOfLogins { get; set; }
47+
public int NumberOfOAuthLogins { get; set; }
48+
public int NumberOfTokenLogins { get; set; }
49+
public int NumberOfPullRequestsOpened { get; set; }
50+
public int NumberOfLocalPullRequestsCheckedOut { get; set; }
51+
public int NumberOfLocalPullRequestPulls { get; set; }
52+
public int NumberOfLocalPullRequestPushes { get; set; }
53+
public int NumberOfForkPullRequestsCheckedOut { get; set; }
54+
public int NumberOfForkPullRequestPulls { get; set; }
55+
public int NumberOfForkPullRequestPushes { get; set; }
56+
public int NumberOfSyncSubmodules { get; set; }
57+
public int NumberOfWelcomeDocsClicks { get; set; }
58+
public int NumberOfWelcomeTrainingClicks { get; set; }
59+
public int NumberOfGitHubPaneHelpClicks { get; set; }
60+
public int NumberOfPRDetailsViewChanges { get; set; }
61+
public int NumberOfPRDetailsViewFile { get; set; }
62+
public int NumberOfPRDetailsCompareWithSolution { get; set; }
63+
public int NumberOfPRDetailsOpenFileInSolution { get; set; }
64+
public int NumberOfPRDetailsNavigateToEditor { get; set; }
65+
public int NumberOfPRReviewDiffViewInlineCommentOpen { get; set; }
66+
public int NumberOfPRReviewDiffViewInlineCommentPost { get; set; }
67+
public int NumberOfShowCurrentPullRequest { get; set; }
68+
}
5569
}
5670
}

src/GitHub.Exports/Services/IUsageTracker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ namespace GitHub.Services
1010
[Guid(Guids.UsageTrackerId)]
1111
public interface IUsageTracker
1212
{
13-
Task IncrementCounter(Expression<Func<UsageModel, int>> counter);
13+
Task IncrementCounter(Expression<Func<UsageModel.MeasuresModel, int>> counter);
1414
}
1515
}

src/GitHub.VisualStudio/Services/UsageTracker.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ public void Dispose()
4343
timer?.Dispose();
4444
}
4545

46-
public async Task IncrementCounter(Expression<Func<UsageModel, int>> counter)
46+
public async Task IncrementCounter(Expression<Func<UsageModel.MeasuresModel, int>> counter)
4747
{
4848
await Initialize();
4949
var data = await service.ReadLocalData();
5050
var usage = await GetCurrentReport(data);
5151
var property = (MemberExpression)counter.Body;
5252
var propertyInfo = (PropertyInfo)property.Member;
5353
log.Verbose("Increment counter {Name}", propertyInfo.Name);
54-
var value = (int)propertyInfo.GetValue(usage);
55-
propertyInfo.SetValue(usage, value + 1);
54+
var value = (int)propertyInfo.GetValue(usage.Measures);
55+
propertyInfo.SetValue(usage.Measures, value + 1);
5656
await service.WriteLocalData(data);
5757
}
5858

@@ -94,14 +94,14 @@ async Task TimerTick()
9494
if (firstTick)
9595
{
9696
var current = await GetCurrentReport(data);
97-
current.NumberOfStartups++;
97+
current.Measures.NumberOfStartups++;
9898
changed = true;
9999
firstTick = false;
100100
}
101101

102102
for (var i = data.Reports.Count - 1; i >= 0; --i)
103103
{
104-
if (data.Reports[i].Date.Date != DateTimeOffset.Now.Date)
104+
if (data.Reports[i].Dimensions.Date.Date != DateTimeOffset.Now.Date)
105105
{
106106
try
107107
{
@@ -124,28 +124,28 @@ async Task TimerTick()
124124

125125
async Task<UsageModel> GetCurrentReport(UsageData data)
126126
{
127-
var current = data.Reports.FirstOrDefault(x => x.Date.Date == DateTimeOffset.Now.Date);
127+
var current = data.Reports.FirstOrDefault(x => x.Dimensions.Date.Date == DateTimeOffset.Now.Date);
128128

129-
if (Guid.Empty.Equals(current.Guid))
129+
if (Guid.Empty.Equals(current.Dimensions.Guid))
130130
{
131131
var guid = await service.GetUserGuid();
132132
current = UsageModel.Create(guid);
133133
data.Reports.Add(current);
134134
}
135135

136-
current.Lang = CultureInfo.InstalledUICulture.IetfLanguageTag;
137-
current.CurrentLang = CultureInfo.CurrentCulture.IetfLanguageTag;
138-
current.AppVersion = AssemblyVersionInformation.Version;
139-
current.VSVersion = vsservices.VSVersion;
136+
current.Dimensions.Lang = CultureInfo.InstalledUICulture.IetfLanguageTag;
137+
current.Dimensions.CurrentLang = CultureInfo.CurrentCulture.IetfLanguageTag;
138+
current.Dimensions.AppVersion = AssemblyVersionInformation.Version;
139+
current.Dimensions.VSVersion = vsservices.VSVersion;
140140

141141
if (connectionManager.Connections.Any(x => x.HostAddress.IsGitHubDotCom()))
142142
{
143-
current.IsGitHubUser = true;
143+
current.Dimensions.IsGitHubUser |= true;
144144
}
145145

146146
if (connectionManager.Connections.Any(x => !x.HostAddress.IsGitHubDotCom()))
147147
{
148-
current.IsEnterpriseUser = true;
148+
current.Dimensions.IsEnterpriseUser |= true;
149149
}
150150

151151
return current;

src/GitHub.VisualStudio/Services/UsageTrackerDispatcher.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ public UsageTrackerDispatcher([Import(typeof(SVsServiceProvider))] IServiceProvi
2121
inner = serviceProvider.GetService(typeof(IUsageTracker)) as IUsageTracker;
2222
}
2323

24-
public Task IncrementCounter(Expression<Func<UsageModel, int>> counter) => inner.IncrementCounter(counter);
24+
public Task IncrementCounter(Expression<Func<UsageModel.MeasuresModel, int>> counter) => inner.IncrementCounter(counter);
2525
}
2626
}

test/UnitTests/GitHub.App/Services/RepositoryCloneServiceTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public async Task UpdatesMetricsWhenRepositoryCloned()
3939
var model = new UsageModel();
4040

4141
await usageTracker.Received().IncrementCounter(
42-
Arg.Is<Expression<Func<UsageModel, int>>>(x =>
43-
((MemberExpression)x.Body).Member.Name == nameof(model.NumberOfClones)));
42+
Arg.Is<Expression<Func<UsageModel.MeasuresModel, int>>>(x =>
43+
((MemberExpression)x.Body).Member.Name == nameof(model.Measures.NumberOfClones)));
4444
}
4545
}
4646
}

0 commit comments

Comments
 (0)