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()); }
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)); }