private static string GetReport(ContentDataIntegrityReport report, string entityType, bool detailed)
        {
            var sb = new StringBuilder();

            if (report.Ok)
            {
                sb.AppendLine($"<p>All {entityType} paths are valid</p>");

                if (!detailed)
                {
                    return(sb.ToString());
                }
            }
            else
            {
                sb.AppendLine($"<p>{report.DetectedIssues.Count} invalid {entityType} paths detected.</p>");
            }

            if (detailed && report.DetectedIssues.Count > 0)
            {
                sb.AppendLine("<ul>");
                foreach (var issueGroup in report.DetectedIssues.GroupBy(x => x.Value.IssueType))
                {
                    var countByGroup = issueGroup.Count();
                    var fixedByGroup = issueGroup.Count(x => x.Value.Fixed);
                    sb.AppendLine("<li>");
                    sb.AppendLine($"{countByGroup} issues of type <code>{issueGroup.Key}</code> ... {fixedByGroup} fixed");
                    sb.AppendLine("</li>");
                }
                sb.AppendLine("</ul>");
            }

            return(sb.ToString());
        }
    private HealthCheckStatus CheckPaths(string actionAlias, string actionName, string entityType, bool detailedReport, Func <ContentDataIntegrityReport> doCheck)
    {
        ContentDataIntegrityReport report = doCheck();

        var actions = new List <HealthCheckAction>();

        if (!report.Ok)
        {
            actions.Add(new HealthCheckAction(actionAlias, Id)
            {
                Name = actionName
            });
        }

        return(new HealthCheckStatus(GetReport(report, entityType, detailedReport))
        {
            ResultType = report.Ok ? StatusResultType.Success : StatusResultType.Error,
            Actions = actions,
        });
    }