diff --git a/src/Tool/Program.cs b/src/Tool/Program.cs index c930fa7aa8..6f90d21988 100644 --- a/src/Tool/Program.cs +++ b/src/Tool/Program.cs @@ -65,7 +65,8 @@ public static int Main(string[] args) { ["--user-agent"] = "UserAgent", ["--user-agent-extra"] = "UserAgentExtra", - ["--hosting-env"] = "HostingEnvironment" + ["--hosting-env"] = "HostingEnvironment", + ["--register-folders-for-telemetry"] = "RegisterFoldersForTelemetry" } ) .Add(new NormalizedEnvironmentVariableConfigurationSource @@ -144,7 +145,7 @@ public static int Main(string[] args) // we get to this point, such that userAgentOption is // not null at this point. userAgentOption!.HasValue() - ? new [] {"--user-agent-extra", userAgentOption!.Value()} + ? new[] { "--user-agent-extra", userAgentOption!.Value() } : Array.Empty() ) .AddKernelCommand( @@ -168,6 +169,11 @@ public static int Main(string[] args) "Specifies the hosting environment that this kernel is being run in.", CommandOptionType.SingleValue ); + kernelCmd.Option( + "--register-folders-for-telemetry ", + "Sends the sub-folders names of as plain-text to Microsoft telemetry systems.", + CommandOptionType.SingleValue + ); } ) ); @@ -182,15 +188,15 @@ public static int Main(string[] args) public static IWebHost GetHttpServer(string[]? args) { - var builder = WebHost.CreateDefaultBuilder(args ?? Array.Empty()) - .UseUrls("http://localhost:8008") - .UseStartup(); + var builder = WebHost.CreateDefaultBuilder(args ?? Array.Empty()) + .UseUrls("http://localhost:8008") + .UseStartup(); if (Configuration is not null) { builder.UseConfiguration(Configuration); } - + return builder.Build(); } @@ -205,12 +211,18 @@ public static KernelApplication AddWorkspaceOption(KernelApplication app) "operations available for simulation.", CommandOptionType.SingleValue); var skipAutoLoadProjectOption = app.Option("--skipAutoLoadProject", "Specifies whether to skip automatically loading the .csproj from the workspace's root folder.", CommandOptionType.SingleValue); + var registerFoldersForTelemetryOption = app.Option( + "--register-folders-for-telemetry ", + "Sends the sub-folders names of as plain-text to Microsoft telemetry systems.", + CommandOptionType.SingleValue + ); foreach (var command in app.Commands.Where(c => c.Name == "kernel" || c.Name == "server")) { command.Options.Add(cacheOption); command.Options.Add(workspaceOption); command.Options.Add(skipAutoLoadProjectOption); + command.Options.Add(registerFoldersForTelemetryOption); } return app; diff --git a/src/Tool/Telemetry.cs b/src/Tool/Telemetry.cs index e68468e367..40473b5210 100644 --- a/src/Tool/Telemetry.cs +++ b/src/Tool/Telemetry.cs @@ -205,6 +205,31 @@ private void InitTelemetryLogger(Applications.Events.ILogger telemetryLogger, IC telemetryLogger.SetContext("DeviceId".WithTelemetryNamespace(), GetDeviceId(), PiiKind.GenericData); telemetryLogger.SetContext("UserAgent".WithTelemetryNamespace(), config?.GetValue("UserAgent")); telemetryLogger.SetContext("HostingEnvironment".WithTelemetryNamespace(), config?.GetValue("HostingEnvironment")); + RegisterFoldersForTelemetry(config?.GetValue("RegisterFoldersForTelemetry")); + + if (config?.GetValue("HostingEnvironment") == "build-agent") + { + RegisterFoldersForTelemetry(Directory.GetCurrentDirectory()); + LogManager.UploadNow(); + } + } + + private void RegisterFoldersForTelemetry(string folder, string rootFolder = null) + { + if (!string.IsNullOrEmpty(folder)) + { + rootFolder ??= Directory.GetParent(folder).FullName; + var evt = new EventProperties() { Name = "WellKnownFolder".WithTelemetryNamespace() }; + evt.SetProperty("FolderName".WithTelemetryNamespace(), Path.GetRelativePath(rootFolder, folder), PiiKind.None); + evt.SetProperty("FolderNameHash".WithTelemetryNamespace(), Path.GetFileName(folder), PiiKind.GenericData); + TelemetryLogger.LogEvent(evt); + + var subFolders = Directory.EnumerateDirectories(folder).Where(s => !Path.GetFileName(s).StartsWith(".")).ToList(); + foreach (var subFolder in subFolders) + { + RegisterFoldersForTelemetry(subFolder, rootFolder); + } + } } /// diff --git a/src/Tool/Tool.csproj b/src/Tool/Tool.csproj index e37676b7e8..3e7d3d59a0 100644 --- a/src/Tool/Tool.csproj +++ b/src/Tool/Tool.csproj @@ -24,7 +24,7 @@ \ - +