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

Commit a376d78

Browse files
authored
Merge pull request #794 from github-for-unity/features/metrics-repo-size
Adding git repo size and lfs disk usage to metrics
2 parents 042c21a + 05bc1bf commit a376d78

28 files changed

+506
-61
lines changed

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ 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());
50+
UsageTracker = new UsageTracker(TaskManager, UserSettings, Environment, InstanceId.ToString());
5151

5252
#if ENABLE_METRICS
5353
var metricsService = new MetricsService(ProcessManager,
@@ -64,12 +64,16 @@ public void Run()
6464
isBusy = true;
6565
progress.UpdateProgress(0, 100, "Initializing...");
6666

67+
if (firstRun)
68+
{
69+
UsageTracker.IncrementNumberOfStartups();
70+
}
71+
6772
var thread = new Thread(() =>
6873
{
6974
GitInstallationState state = new GitInstallationState();
7075
try
7176
{
72-
SetupMetrics();
7377
if (Environment.IsMac)
7478
{
7579
var getEnvPath = new SimpleProcessTask(TaskManager.Token, "bash".ToNPath(), "-c \"/usr/libexec/path_helper\"")
@@ -187,6 +191,7 @@ public void SetupGit(GitInstaller.GitInstallationState state)
187191
if (Environment.RepositoryPath.IsInitialized)
188192
{
189193
ConfigureMergeSettings();
194+
CaptureRepoSize();
190195

191196
GitClient.LfsInstall()
192197
.Catch(e =>
@@ -255,7 +260,6 @@ public void InitializeRepository()
255260
GitClient.Commit("Initial commit", null).RunWithReturn(true);
256261
progress.UpdateProgress(70, 100, "Initializing...");
257262
Environment.InitializeRepository();
258-
UsageTracker.IncrementProjectsInitialized();
259263
}
260264
catch (Exception ex)
261265
{
@@ -269,6 +273,7 @@ public void InitializeRepository()
269273
progress.UpdateProgress(90, 100, "Initializing...");
270274
RestartRepository();
271275
TaskManager.RunInUI(InitializeUI);
276+
UsageTracker.IncrementProjectsInitialized();
272277
progress.UpdateProgress(100, 100, "Initialized");
273278
}
274279
isBusy = false;
@@ -295,6 +300,37 @@ private void ConfigureMergeSettings()
295300
}).RunWithReturn(true);
296301
}
297302

303+
private void CaptureRepoSize()
304+
{
305+
GitClient.CountObjects()
306+
.Finally((success, gitObjects) =>
307+
{
308+
if (success)
309+
{
310+
UsageTracker.UpdateRepoSize(gitObjects.kilobytes);
311+
}
312+
})
313+
.Start();
314+
315+
var gitLfsDataPath = Environment.RepositoryPath.Combine(".git", "lfs");
316+
if (gitLfsDataPath.Exists())
317+
{
318+
var diskUsageTask = Environment.IsWindows
319+
? (IProcessTask<int>)new WindowsDiskUsageTask(gitLfsDataPath, TaskManager.Token)
320+
: new LinuxDiskUsageTask(gitLfsDataPath, TaskManager.Token);
321+
322+
diskUsageTask
323+
.Configure(ProcessManager)
324+
.Finally((success, kilobytes) =>
325+
{
326+
if (success)
327+
{
328+
UsageTracker.UpdateLfsDiskUsage(kilobytes);
329+
}
330+
}).Start();
331+
}
332+
}
333+
298334
public void RestartRepository()
299335
{
300336
if (!Environment.RepositoryPath.IsInitialized)
@@ -310,14 +346,6 @@ public void RestartRepository()
310346
Logger.Trace($"Got a repository? {(Environment.Repository != null ? Environment.Repository.LocalPath : "null")}");
311347
}
312348

313-
protected void SetupMetrics()
314-
{
315-
if (firstRun)
316-
{
317-
UsageTracker.IncrementNumberOfStartups();
318-
}
319-
}
320-
321349
protected abstract void InitializeUI();
322350
protected abstract void InitializationComplete();
323351

src/GitHub.Api/Git/GitClient.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public interface IGitClient
3838
ITask<List<GitLogEntry>> Log(BaseOutputListProcessor<GitLogEntry> processor = null);
3939
ITask<TheVersion> Version(IOutputProcessor<TheVersion> processor = null);
4040
ITask<TheVersion> LfsVersion(IOutputProcessor<TheVersion> processor = null);
41+
ITask<GitCountObjects> CountObjects(IOutputProcessor<GitCountObjects> processor = null);
4142
ITask<GitUser> SetConfigNameAndEmail(string username, string email);
4243
}
4344

@@ -98,6 +99,12 @@ public ITask<TheVersion> LfsVersion(IOutputProcessor<TheVersion> processor = nul
9899
.Configure(processManager);
99100
}
100101

102+
public ITask<GitCountObjects> CountObjects(IOutputProcessor<GitCountObjects> processor = null)
103+
{
104+
return new GitCountObjectsTask(cancellationToken, processor)
105+
.Configure(processManager);
106+
}
107+
101108
public ITask<string> GetConfig(string key, GitConfigSource configSource, IOutputProcessor<string> processor = null)
102109
{
103110
return new GitConfigGetTask(key, configSource, cancellationToken, processor)

src/GitHub.Api/Git/GitCountObjects.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
3+
namespace GitHub.Unity
4+
{
5+
[Serializable]
6+
public struct GitCountObjects
7+
{
8+
public static GitCountObjects Default = new GitCountObjects();
9+
10+
public int objects;
11+
public int kilobytes;
12+
13+
public GitCountObjects(int objects, int kilobytes)
14+
{
15+
this.objects = objects;
16+
this.kilobytes = kilobytes;
17+
}
18+
19+
public int Objects => objects;
20+
21+
public int Kilobytes => kilobytes;
22+
}
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Threading;
2+
3+
namespace GitHub.Unity
4+
{
5+
class GitCountObjectsTask : ProcessTask<GitCountObjects>
6+
{
7+
private const string TaskName = "git count-objects";
8+
9+
public GitCountObjectsTask(CancellationToken token, IOutputProcessor<GitCountObjects> processor = null)
10+
: base(token, processor ?? new GitCountObjectsProcessor())
11+
{
12+
Name = TaskName;
13+
}
14+
15+
public override string ProcessArguments
16+
{
17+
get { return "count-objects"; }
18+
}
19+
public override TaskAffinity Affinity { get { return TaskAffinity.Exclusive; } }
20+
public override string Message { get; set; } = "Counting git objects...";
21+
}
22+
}

src/GitHub.Api/GitHub.Api.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@
9595
<Compile Include="Cache\CachingClasses.cs" />
9696
<Compile Include="Extensions\ActionExtensions.cs" />
9797
<Compile Include="Extensions\ListExtensions.cs" />
98+
<Compile Include="Git\GitCountObjects.cs" />
9899
<Compile Include="Git\Tasks\GitCheckoutTask.cs" />
99100
<Compile Include="Git\GitAheadBehindStatus.cs" />
100101
<Compile Include="Git\Tasks\GitAheadBehindStatusTask.cs" />
102+
<Compile Include="Git\Tasks\GitCountObjectsTask.cs" />
101103
<Compile Include="Git\Tasks\GitLfsVersionTask.cs" />
102104
<Compile Include="Git\Tasks\GitVersionTask.cs" />
103105
<Compile Include="Git\TreeData.cs" />
@@ -116,9 +118,12 @@
116118
<Compile Include="IO\FileSystem.cs" />
117119
<Compile Include="Managers\Downloader.cs" />
118120
<Compile Include="OutputProcessors\GitAheadBehindStatusOutputProcessor.cs" />
121+
<Compile Include="OutputProcessors\GitCountObjectsProcessor.cs" />
119122
<Compile Include="OutputProcessors\LfsVersionOutputProcessor.cs" />
123+
<Compile Include="OutputProcessors\LinuxDiskUsageOutputProcessor.cs" />
120124
<Compile Include="OutputProcessors\VersionOutputProcessor.cs" />
121125
<Compile Include="Helpers\TaskHelpers.cs" />
126+
<Compile Include="OutputProcessors\WindowsDiskUsageOutputProcessor.cs" />
122127
<Compile Include="Platform\DefaultEnvironment.cs" />
123128
<Compile Include="Extensions\EnvironmentExtensions.cs" />
124129
<Compile Include="Extensions\FileEventExtensions.cs" />
@@ -132,6 +137,8 @@
132137
<Compile Include="Git\IGitObjectFactory.cs" />
133138
<Compile Include="Git\Tasks\GitRevertTask.cs" />
134139
<Compile Include="Application\IApplicationManager.cs" />
140+
<Compile Include="Platform\LinuxDiskUsageTask.cs" />
141+
<Compile Include="Platform\WindowsDiskUsageTask.cs" />
135142
<Compile Include="Primitives\Package.cs" />
136143
<Compile Include="Primitives\TheVersion.cs" />
137144
<Compile Include="Tasks\ActionTask.cs" />

src/GitHub.Api/Metrics/IUsageTracker.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ public interface IUsageTracker
2020
void IncrementUnityProjectViewContextLfsUnlock();
2121
void IncrementPublishViewButtonPublish();
2222
void IncrementApplicationMenuMenuItemCommandLine();
23+
void UpdateRepoSize(int kilobytes);
24+
void UpdateLfsDiskUsage(int kilobytes);
2325
}
2426
}

src/GitHub.Api/Metrics/UsageModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class Measures
4242
public int UnityProjectViewContextLfsUnlock { get; set; }
4343
public int PublishViewButtonPublish { get; set; }
4444
public int ApplicationMenuMenuItemCommandLine { get; set; }
45+
public int GitRepoSize { get; set; }
46+
public int LfsDiskUsage { get; set; }
4547
}
4648

4749
class UsageModel

0 commit comments

Comments
 (0)