diff --git a/src/Umbraco.Core/Constants-Telemetry.cs b/src/Umbraco.Core/Constants-Telemetry.cs
index 0fc2cb1612..64ce58b2f5 100644
--- a/src/Umbraco.Core/Constants-Telemetry.cs
+++ b/src/Umbraco.Core/Constants-Telemetry.cs
@@ -28,5 +28,6 @@ public static partial class Constants
public static string IsDebug = "IsDebug";
public static string DatabaseProvider = "DatabaseProvider";
public static string CurrentServerRole = "CurrentServerRole";
+ public static string BackofficeExternalLoginProviderCount = "BackofficeExternalLoginProviderCount";
}
}
diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
index 15382310e5..46c7dad6cd 100644
--- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
+++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
@@ -3005,7 +3005,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
We will send:
- Anonymized site ID, Umbraco version, and packages installed.
- - Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.
+ - Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, Backoffice external login providers, and Property Editors in use.
- System information: Webserver, server OS, server framework, server OS language, and database provider.
- Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.
diff --git a/src/Umbraco.Infrastructure/Telemetry/Interfaces/IDetailedTelemetryProvider.cs b/src/Umbraco.Infrastructure/Telemetry/Interfaces/IDetailedTelemetryProvider.cs
index b21b216e68..e6ce3b005f 100644
--- a/src/Umbraco.Infrastructure/Telemetry/Interfaces/IDetailedTelemetryProvider.cs
+++ b/src/Umbraco.Infrastructure/Telemetry/Interfaces/IDetailedTelemetryProvider.cs
@@ -2,7 +2,7 @@ using Umbraco.Cms.Core.Models;
namespace Umbraco.Cms.Infrastructure.Telemetry.Interfaces;
-internal interface IDetailedTelemetryProvider
+public interface IDetailedTelemetryProvider
{
IEnumerable GetInformation();
}
diff --git a/src/Umbraco.Web.BackOffice/DependencyInjection/UmbracoBuilder.BackOfficeIdentity.cs b/src/Umbraco.Web.BackOffice/DependencyInjection/UmbracoBuilder.BackOfficeIdentity.cs
index 6d3ff7edda..1844cf5885 100644
--- a/src/Umbraco.Web.BackOffice/DependencyInjection/UmbracoBuilder.BackOfficeIdentity.cs
+++ b/src/Umbraco.Web.BackOffice/DependencyInjection/UmbracoBuilder.BackOfficeIdentity.cs
@@ -11,7 +11,9 @@ using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Infrastructure.Security;
+using Umbraco.Cms.Infrastructure.Telemetry.Interfaces;
using Umbraco.Cms.Web.BackOffice.Security;
+using Umbraco.Cms.Web.BackOffice.Telemetry;
using Umbraco.Cms.Web.Common.AspNetCore;
using Umbraco.Cms.Web.Common.Security;
@@ -65,6 +67,7 @@ public static partial class UmbracoBuilderExtensions
services.TryAddScoped();
services.TryAddSingleton();
services.TryAddSingleton();
+ services.AddTransient();
return new BackOfficeIdentityBuilder(services);
}
diff --git a/src/Umbraco.Web.BackOffice/Telemetry/ExternalLoginTelemetryProvider.cs b/src/Umbraco.Web.BackOffice/Telemetry/ExternalLoginTelemetryProvider.cs
new file mode 100644
index 0000000000..21a59796b3
--- /dev/null
+++ b/src/Umbraco.Web.BackOffice/Telemetry/ExternalLoginTelemetryProvider.cs
@@ -0,0 +1,22 @@
+using Umbraco.Cms.Core;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Infrastructure.Telemetry.Interfaces;
+using Umbraco.Cms.Web.BackOffice.Security;
+
+namespace Umbraco.Cms.Web.BackOffice.Telemetry;
+
+public class ExternalLoginTelemetryProvider : IDetailedTelemetryProvider
+{
+ private readonly IBackOfficeExternalLoginProviders _externalLoginProviders;
+
+ public ExternalLoginTelemetryProvider(IBackOfficeExternalLoginProviders externalLoginProviders)
+ {
+ _externalLoginProviders = externalLoginProviders;
+ }
+
+ public IEnumerable GetInformation()
+ {
+ IEnumerable providers = _externalLoginProviders.GetBackOfficeProvidersAsync().GetAwaiter().GetResult();
+ yield return new UsageInformation(Constants.Telemetry.BackofficeExternalLoginProviderCount, providers.Count());
+ }
+}
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Core/Telemetry/TelemetryServiceTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Core/Telemetry/TelemetryServiceTests.cs
index 2acb31a5a0..4abfefc7e1 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Core/Telemetry/TelemetryServiceTests.cs
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Core/Telemetry/TelemetryServiceTests.cs
@@ -49,7 +49,8 @@ public class TelemetryServiceTests : UmbracoIntegrationTest
Constants.Telemetry.AspEnvironment,
Constants.Telemetry.IsDebug,
Constants.Telemetry.DatabaseProvider,
- Constants.Telemetry.CurrentServerRole
+ Constants.Telemetry.CurrentServerRole,
+ Constants.Telemetry.BackofficeExternalLoginProviderCount
};
MetricsConsentService.SetConsentLevel(TelemetryLevel.Detailed);