diff --git a/src/Umbraco.Infrastructure/Configuration/Extensions/HealthCheckSettingsExtensions.cs b/src/Umbraco.Core/Configuration/Extensions/HealthCheckSettingsExtensions.cs
similarity index 90%
rename from src/Umbraco.Infrastructure/Configuration/Extensions/HealthCheckSettingsExtensions.cs
rename to src/Umbraco.Core/Configuration/Extensions/HealthCheckSettingsExtensions.cs
index 92c3608ac1..ae842cb040 100644
--- a/src/Umbraco.Infrastructure/Configuration/Extensions/HealthCheckSettingsExtensions.cs
+++ b/src/Umbraco.Core/Configuration/Extensions/HealthCheckSettingsExtensions.cs
@@ -1,9 +1,7 @@
using System;
-using NCrontab;
-using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
-namespace Umbraco.Infrastructure.Configuration.Extensions
+namespace Umbraco.Core.Configuration.Extensions
{
public static class HealthCheckSettingsExtensions
{
diff --git a/src/Umbraco.Infrastructure/Diagnostics/IMarchal.cs b/src/Umbraco.Core/Diagnostics/IMarchal.cs
similarity index 58%
rename from src/Umbraco.Infrastructure/Diagnostics/IMarchal.cs
rename to src/Umbraco.Core/Diagnostics/IMarchal.cs
index 30e6a9e619..cde4592b1b 100644
--- a/src/Umbraco.Infrastructure/Diagnostics/IMarchal.cs
+++ b/src/Umbraco.Core/Diagnostics/IMarchal.cs
@@ -7,6 +7,10 @@ namespace Umbraco.Core.Diagnostics
///
public interface IMarchal
{
+ ///
+ /// Retrieves a computer-independent description of an exception, and information about the state that existed for the thread when the exception occurred.
+ ///
+ /// A pointer to an EXCEPTION_POINTERS structure.
IntPtr GetExceptionPointers();
}
}
diff --git a/src/Umbraco.Infrastructure/Diagnostics/MiniDump.cs b/src/Umbraco.Core/Diagnostics/MiniDump.cs
similarity index 98%
rename from src/Umbraco.Infrastructure/Diagnostics/MiniDump.cs
rename to src/Umbraco.Core/Diagnostics/MiniDump.cs
index 57e9b5204b..56635c6b46 100644
--- a/src/Umbraco.Infrastructure/Diagnostics/MiniDump.cs
+++ b/src/Umbraco.Core/Diagnostics/MiniDump.cs
@@ -2,9 +2,7 @@
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
-using Umbraco.Core.Composing;
using Umbraco.Core.Hosting;
-using Umbraco.Core.IO;
namespace Umbraco.Core.Diagnostics
{
@@ -12,7 +10,7 @@ namespace Umbraco.Core.Diagnostics
// and https://blogs.msdn.microsoft.com/dondu/2010/10/31/writing-minidumps-from-exceptions-in-c/
// which itself got it from http://blog.kalmbach-software.de/2008/12/13/writing-minidumps-in-c/
- internal static class MiniDump
+ public static class MiniDump
{
private static readonly object LockO = new object();
@@ -92,7 +90,9 @@ namespace Umbraco.Core.Diagnostics
exp.ExceptionPointers = IntPtr.Zero;
if (withException)
+ {
exp.ExceptionPointers = marchal.GetExceptionPointers();
+ }
var bRet = exp.ExceptionPointers == IntPtr.Zero
? MiniDumpWriteDump(currentProcessHandle, currentProcessId, fileHandle, (uint) options, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero)
diff --git a/src/Umbraco.Infrastructure/Dictionary/UmbracoCultureDictionary.cs b/src/Umbraco.Core/Dictionary/UmbracoCultureDictionary.cs
similarity index 98%
rename from src/Umbraco.Infrastructure/Dictionary/UmbracoCultureDictionary.cs
rename to src/Umbraco.Core/Dictionary/UmbracoCultureDictionary.cs
index b0690c944b..1f23ec645c 100644
--- a/src/Umbraco.Infrastructure/Dictionary/UmbracoCultureDictionary.cs
+++ b/src/Umbraco.Core/Dictionary/UmbracoCultureDictionary.cs
@@ -17,7 +17,7 @@ namespace Umbraco.Core.Dictionary
/// The ILocalizationService is the service used for interacting with this data from the database which isn't all that fast
/// (even though there is caching involved, if there's lots of dictionary items the caching is not great)
///
- public class DefaultCultureDictionary : ICultureDictionary
+ internal class DefaultCultureDictionary : ICultureDictionary
{
private readonly ILocalizationService _localizationService;
private readonly IAppCache _requestCache;
diff --git a/src/Umbraco.Infrastructure/Dictionary/UmbracoCultureDictionaryFactory.cs b/src/Umbraco.Core/Dictionary/UmbracoCultureDictionaryFactory.cs
similarity index 92%
rename from src/Umbraco.Infrastructure/Dictionary/UmbracoCultureDictionaryFactory.cs
rename to src/Umbraco.Core/Dictionary/UmbracoCultureDictionaryFactory.cs
index a2d1fa12d3..e2e30f3d76 100644
--- a/src/Umbraco.Infrastructure/Dictionary/UmbracoCultureDictionaryFactory.cs
+++ b/src/Umbraco.Core/Dictionary/UmbracoCultureDictionaryFactory.cs
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Dictionary
///
/// In the future this will allow use to potentially store dictionary items elsewhere and allows for maximum flexibility.
///
- internal class DefaultCultureDictionaryFactory : ICultureDictionaryFactory
+ public class DefaultCultureDictionaryFactory : ICultureDictionaryFactory
{
private readonly ILocalizationService _localizationService;
private readonly AppCaches _appCaches;
diff --git a/src/Umbraco.Infrastructure/Editors/UserEditorAuthorizationHelper.cs b/src/Umbraco.Core/Editors/UserEditorAuthorizationHelper.cs
similarity index 100%
rename from src/Umbraco.Infrastructure/Editors/UserEditorAuthorizationHelper.cs
rename to src/Umbraco.Core/Editors/UserEditorAuthorizationHelper.cs
diff --git a/src/Umbraco.Infrastructure/HealthCheck/HealthCheckNotificationMethodCollection.cs b/src/Umbraco.Core/HealthCheck/HealthCheckNotificationMethodCollection.cs
similarity index 100%
rename from src/Umbraco.Infrastructure/HealthCheck/HealthCheckNotificationMethodCollection.cs
rename to src/Umbraco.Core/HealthCheck/HealthCheckNotificationMethodCollection.cs
diff --git a/src/Umbraco.Infrastructure/HealthCheck/HealthCheckNotificationMethodCollectionBuilder.cs b/src/Umbraco.Core/HealthCheck/HealthCheckNotificationMethodCollectionBuilder.cs
similarity index 100%
rename from src/Umbraco.Infrastructure/HealthCheck/HealthCheckNotificationMethodCollectionBuilder.cs
rename to src/Umbraco.Core/HealthCheck/HealthCheckNotificationMethodCollectionBuilder.cs
diff --git a/src/Umbraco.Infrastructure/HealthCheck/HealthCheckResults.cs b/src/Umbraco.Core/HealthCheck/HealthCheckResults.cs
similarity index 85%
rename from src/Umbraco.Infrastructure/HealthCheck/HealthCheckResults.cs
rename to src/Umbraco.Core/HealthCheck/HealthCheckResults.cs
index 37159b4a49..44955bfaae 100644
--- a/src/Umbraco.Infrastructure/HealthCheck/HealthCheckResults.cs
+++ b/src/Umbraco.Core/HealthCheck/HealthCheckResults.cs
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
-using HeyRed.MarkdownSharp;
using Microsoft.Extensions.Logging;
using Umbraco.Core;
using Umbraco.Core.HealthCheck;
@@ -120,33 +119,9 @@ namespace Umbraco.Infrastructure.HealthCheck
return sb.ToString();
}
- public string ResultsAsHtml(HealthCheckNotificationVerbosity verbosity)
- {
- var mark = new Markdown();
- var html = mark.Transform(ResultsAsMarkDown(verbosity));
- html = ApplyHtmlHighlighting(html);
- return html;
- }
internal Dictionary> ResultsAsDictionary => _results;
- private string ApplyHtmlHighlighting(string html)
- {
- const string SuccessHexColor = "5cb85c";
- const string WarningHexColor = "f0ad4e";
- const string ErrorHexColor = "d9534f";
-
- html = ApplyHtmlHighlightingForStatus(html, StatusResultType.Success, SuccessHexColor);
- html = ApplyHtmlHighlightingForStatus(html, StatusResultType.Warning, WarningHexColor);
- return ApplyHtmlHighlightingForStatus(html, StatusResultType.Error, ErrorHexColor);
- }
-
- private string ApplyHtmlHighlightingForStatus(string html, StatusResultType status, string color)
- {
- return html
- .Replace("Result: '" + status + "'", "Result: " + status + "");
- }
-
private string SimpleHtmlToMarkDown(string html)
{
return html.Replace("", "**")
diff --git a/src/Umbraco.Infrastructure/HealthCheck/NotificationMethods/EmailNotificationMethod.cs b/src/Umbraco.Core/HealthCheck/NotificationMethods/EmailNotificationMethod.cs
similarity index 90%
rename from src/Umbraco.Infrastructure/HealthCheck/NotificationMethods/EmailNotificationMethod.cs
rename to src/Umbraco.Core/HealthCheck/NotificationMethods/EmailNotificationMethod.cs
index 4d7444447f..d29f3ccb0b 100644
--- a/src/Umbraco.Infrastructure/HealthCheck/NotificationMethods/EmailNotificationMethod.cs
+++ b/src/Umbraco.Core/HealthCheck/NotificationMethods/EmailNotificationMethod.cs
@@ -17,6 +17,7 @@ namespace Umbraco.Web.HealthCheck.NotificationMethods
private readonly ILocalizedTextService _textService;
private readonly IRequestAccessor _requestAccessor;
private readonly IEmailSender _emailSender;
+ private readonly IMarkdownToHtmlConverter _markdownToHtmlConverter;
private readonly ContentSettings _contentSettings;
@@ -25,7 +26,8 @@ namespace Umbraco.Web.HealthCheck.NotificationMethods
IRequestAccessor requestAccessor,
IEmailSender emailSender,
IOptions healthChecksSettings,
- IOptions contentSettings)
+ IOptions contentSettings,
+ IMarkdownToHtmlConverter markdownToHtmlConverter)
: base(healthChecksSettings)
{
var recipientEmail = Settings?["RecipientEmail"];
@@ -40,6 +42,7 @@ namespace Umbraco.Web.HealthCheck.NotificationMethods
_textService = textService ?? throw new ArgumentNullException(nameof(textService));
_requestAccessor = requestAccessor;
_emailSender = emailSender;
+ _markdownToHtmlConverter = markdownToHtmlConverter;
_contentSettings = contentSettings.Value ?? throw new ArgumentNullException(nameof(contentSettings));
}
@@ -61,7 +64,7 @@ namespace Umbraco.Web.HealthCheck.NotificationMethods
{
DateTime.Now.ToShortDateString(),
DateTime.Now.ToShortTimeString(),
- results.ResultsAsHtml(Verbosity)
+ _markdownToHtmlConverter.ToHtml(results, Verbosity)
});
// Include the umbraco Application URL host in the message subject so that
diff --git a/src/Umbraco.Infrastructure/HealthCheck/NotificationMethods/IHealthCheckNotificationMethod.cs b/src/Umbraco.Core/HealthCheck/NotificationMethods/IHealthCheckNotificationMethod.cs
similarity index 100%
rename from src/Umbraco.Infrastructure/HealthCheck/NotificationMethods/IHealthCheckNotificationMethod.cs
rename to src/Umbraco.Core/HealthCheck/NotificationMethods/IHealthCheckNotificationMethod.cs
diff --git a/src/Umbraco.Core/HealthCheck/NotificationMethods/IMarkdownToHtmlConverter.cs b/src/Umbraco.Core/HealthCheck/NotificationMethods/IMarkdownToHtmlConverter.cs
new file mode 100644
index 0000000000..20d8f0f07e
--- /dev/null
+++ b/src/Umbraco.Core/HealthCheck/NotificationMethods/IMarkdownToHtmlConverter.cs
@@ -0,0 +1,10 @@
+using Umbraco.Core.HealthCheck;
+using Umbraco.Infrastructure.HealthCheck;
+
+namespace Umbraco.Web.HealthCheck.NotificationMethods
+{
+ public interface IMarkdownToHtmlConverter
+ {
+ string ToHtml(HealthCheckResults results, HealthCheckNotificationVerbosity verbosity);
+ }
+}
diff --git a/src/Umbraco.Infrastructure/HealthCheck/NotificationMethods/NotificationMethodBase.cs b/src/Umbraco.Core/HealthCheck/NotificationMethods/NotificationMethodBase.cs
similarity index 100%
rename from src/Umbraco.Infrastructure/HealthCheck/NotificationMethods/NotificationMethodBase.cs
rename to src/Umbraco.Core/HealthCheck/NotificationMethods/NotificationMethodBase.cs
diff --git a/src/Umbraco.Infrastructure/HealthCheck/MarkdownToHtmlConverter.cs b/src/Umbraco.Infrastructure/HealthCheck/MarkdownToHtmlConverter.cs
new file mode 100644
index 0000000000..39c5fe0bf2
--- /dev/null
+++ b/src/Umbraco.Infrastructure/HealthCheck/MarkdownToHtmlConverter.cs
@@ -0,0 +1,35 @@
+using HeyRed.MarkdownSharp;
+using Umbraco.Core.HealthCheck;
+using Umbraco.Infrastructure.HealthCheck;
+using Umbraco.Web.HealthCheck.NotificationMethods;
+
+namespace Umbraco.Web.HealthCheck
+{
+ public class MarkdownToHtmlConverter : IMarkdownToHtmlConverter
+ {
+ public string ToHtml(HealthCheckResults results, HealthCheckNotificationVerbosity verbosity)
+ {
+ var mark = new Markdown();
+ var html = mark.Transform(results.ResultsAsMarkDown(verbosity));
+ html = ApplyHtmlHighlighting(html);
+ return html;
+ }
+
+ private string ApplyHtmlHighlighting(string html)
+ {
+ const string SuccessHexColor = "5cb85c";
+ const string WarningHexColor = "f0ad4e";
+ const string ErrorHexColor = "d9534f";
+
+ html = ApplyHtmlHighlightingForStatus(html, StatusResultType.Success, SuccessHexColor);
+ html = ApplyHtmlHighlightingForStatus(html, StatusResultType.Warning, WarningHexColor);
+ return ApplyHtmlHighlightingForStatus(html, StatusResultType.Error, ErrorHexColor);
+ }
+
+ private string ApplyHtmlHighlightingForStatus(string html, StatusResultType status, string color)
+ {
+ return html
+ .Replace("Result: '" + status + "'", "Result: " + status + "");
+ }
+ }
+}
diff --git a/src/Umbraco.Infrastructure/HostedServices/HealthCheckNotifier.cs b/src/Umbraco.Infrastructure/HostedServices/HealthCheckNotifier.cs
index 58decb80c4..1e775abaa9 100644
--- a/src/Umbraco.Infrastructure/HostedServices/HealthCheckNotifier.cs
+++ b/src/Umbraco.Infrastructure/HostedServices/HealthCheckNotifier.cs
@@ -5,12 +5,12 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Umbraco.Core;
using Umbraco.Core.Configuration;
+using Umbraco.Core.Configuration.Extensions;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.HealthCheck;
using Umbraco.Core.Logging;
using Umbraco.Core.Scoping;
using Umbraco.Core.Sync;
-using Umbraco.Infrastructure.Configuration.Extensions;
using Umbraco.Infrastructure.HealthCheck;
using Umbraco.Web.HealthCheck;
diff --git a/src/Umbraco.Infrastructure/Packaging/PackageDataInstallation.cs b/src/Umbraco.Infrastructure/Packaging/PackageDataInstallation.cs
index 84e65732c2..5f5ee63642 100644
--- a/src/Umbraco.Infrastructure/Packaging/PackageDataInstallation.cs
+++ b/src/Umbraco.Infrastructure/Packaging/PackageDataInstallation.cs
@@ -8,7 +8,6 @@ using System.Xml.XPath;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Umbraco.Core.Collections;
-using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
@@ -17,7 +16,6 @@ using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Scoping;
using Umbraco.Core.Serialization;
using Umbraco.Core.Services;
-using Umbraco.Core.Services.Implement;
using Umbraco.Core.Strings;
namespace Umbraco.Core.Packaging
diff --git a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs
index 910a9a25e2..2a988a70a4 100644
--- a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs
+++ b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs
@@ -60,9 +60,6 @@ using IntegerValidator = Umbraco.Core.PropertyEditors.Validators.IntegerValidato
using TextStringValueConverter = Umbraco.Core.PropertyEditors.ValueConverters.TextStringValueConverter;
using Microsoft.Extensions.Logging;
using Umbraco.Core.DependencyInjection;
-using Umbraco.Core.Configuration.HealthChecks;
-using Umbraco.Core.HealthCheck;
-using Umbraco.Core.HealthCheck.Checks;
using Umbraco.Core.Security;
namespace Umbraco.Core.Runtime
@@ -303,6 +300,7 @@ namespace Umbraco.Core.Runtime
builder.Services.AddUnique();
// register *all* checks, except those marked [HideFromTypeFinder] of course
+ builder.Services.AddUnique();
builder.HealthChecks()
.Add(() => builder.TypeLoader.GetTypes());
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Extensions/HealthCheckSettingsExtensionsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Extensions/HealthCheckSettingsExtensionsTests.cs
index 833e5c865b..0eca0b7d02 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Extensions/HealthCheckSettingsExtensionsTests.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Extensions/HealthCheckSettingsExtensionsTests.cs
@@ -1,8 +1,8 @@
using System;
using NUnit.Framework;
using Umbraco.Core.Configuration;
+using Umbraco.Core.Configuration.Extensions;
using Umbraco.Core.Configuration.Models;
-using Umbraco.Infrastructure.Configuration.Extensions;
namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Extensions
{