using Umbraco.Cms.Core.PublishedCache; using Umbraco.Cms.Infrastructure.PublishedCache.Persistence; namespace Umbraco.Cms.Infrastructure.PublishedCache; /// /// Generates a status report for /// internal class PublishedSnapshotStatus : IPublishedSnapshotStatus { private readonly INuCacheContentService _publishedContentService; private readonly PublishedSnapshotService? _service; public PublishedSnapshotStatus(IPublishedSnapshotService? service, INuCacheContentService publishedContentService) { _service = service as PublishedSnapshotService; _publishedContentService = publishedContentService; } /// public virtual string StatusUrl => "views/dashboard/settings/publishedsnapshotcache.html"; /// public string GetStatus() { if (_service == null) { return $"The current {typeof(IPublishedSnapshotService)} is not the default type. A status cannot be determined."; } // TODO: This should be private _service.EnsureCaches(); var dbCacheIsOk = _publishedContentService.VerifyContentDbCache() && _publishedContentService.VerifyMediaDbCache() && _publishedContentService.VerifyMemberDbCache() ? "ok" : "NOT ok (rebuild?)"; ContentStore? contentStore = _service.GetContentStore(); ContentStore? mediaStore = _service.GetMediaStore(); var contentStoreGen = contentStore?.GenCount; var mediaStoreGen = mediaStore?.GenCount; var contentStoreSnap = contentStore?.SnapCount; var mediaStoreSnap = mediaStore?.SnapCount; var contentStoreCount = contentStore?.Count; var mediaStoreCount = mediaStore?.Count; var contentStoreCountPlural = contentStoreCount > 1 ? "s" : string.Empty; var contentStoreGenPlural = contentStoreGen > 1 ? "s" : string.Empty; var contentStoreSnapPlural = contentStoreSnap > 1 ? "s" : string.Empty; var mediaStoreCountPlural = mediaStoreCount > 1 ? "s" : string.Empty; var mediaStoreGenPlural = mediaStoreGen > 1 ? "s" : string.Empty; var mediaStoreSnapPlural = mediaStoreSnap > 1 ? "s" : string.Empty; return $" Database cache is {dbCacheIsOk}. ContentStore contains {contentStoreCount} item{contentStoreCountPlural} and has {contentStoreGen} generation{contentStoreGenPlural} and {contentStoreSnap} snapshot{contentStoreSnapPlural}. MediaStore contains {mediaStoreCount} item{mediaStoreCountPlural} and has {mediaStoreGen} generation{mediaStoreGenPlural} and {mediaStoreSnap} snapshot{mediaStoreSnapPlural}."; } }