public FileCacheResult Get(string key)
        {
            _logger.LogTrace($"Fetching key \"{key}\" from cache.");
            if (_fileCache.TryGetValue(key, out FileData val))
            {
                return(val);
            }

            _logger.LogWarning($"Cache miss on key \"{key}\".");
            return(FileCacheResult.Empty());
        }
Exemple #2
0
        public FileFetchResult GetFileContent(string fileName)
        {
            _logger.LogTrace($"Getting markdown content for \"{fileName}\".");

            // If source directory missing, not found.
            if (_options.MDSSourceDirectory == null || !_ioProxy.DirectoryExists(_options.MDSSourceDirectory))
            {
                _logger.LogWarning("Markdown Source directory is not configured or does not exist!");
                return(FileFetchResult.Notfound());
            }

            string fileNameWithExtension = fileName + _options.MDSFileExtension;
            string filePath = Path.Combine(_options.MDSSourceDirectory, fileNameWithExtension);

            // Ensure file exists
            if (!_ioProxy.FileExists(filePath))
            {
                return(FileFetchResult.Notfound());
            }

            DateTime lastModified = _ioProxy.GetLastWriteTimeUtc(filePath);

            // Cached and valid.
            if (_fileCacheService.HasKey(fileName))
            {
                _logger.LogTrace("File is cached. Comparing modified dates.");
                FileCacheResult cacheResult = _fileCacheService.Get(fileName);

                if (cacheResult.HasValue && cacheResult.FileData.LastModifiedUtc == lastModified)
                {
                    _logger.LogTrace("File has not been modified. Reading content from cache.");

                    return(new FileFetchResult(cacheResult.FileData));
                }
            }

            // Cache for first time or refresh.
            _logger.LogTrace($"Caching file from '{filePath}'.");
            string content = _ioProxy.ReadAllText(filePath);

            _fileCacheService.Put(fileName, content, lastModified);

            var fileData = new FileData
            {
                Content         = content,
                LastModifiedUtc = lastModified
            };

            return(new FileFetchResult(fileData));
        }