/// <summary> /// Prepare system info model /// </summary> /// <param name="model">System info model</param> /// <returns>System info model</returns> public virtual SystemInfoModel PrepareSystemInfoModel(SystemInfoModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } model.NopVersion = NopVersion.CurrentVersion; model.ServerTimeZone = TimeZoneInfo.Local.StandardName; model.ServerLocalTime = DateTime.Now; model.UtcTime = DateTime.UtcNow; model.CurrentUserTime = _dateTimeHelper.ConvertToUserTime(DateTime.Now); model.HttpHost = _httpContextAccessor.HttpContext.Request.Headers[HeaderNames.Host]; //ensure no exception is thrown try { model.OperatingSystem = Environment.OSVersion.VersionString; model.AspNetInfo = RuntimeEnvironment.GetSystemVersion(); model.IsFullTrust = AppDomain.CurrentDomain.IsFullyTrusted.ToString(); } catch { } foreach (var header in _httpContextAccessor.HttpContext.Request.Headers) { model.Headers.Add(new SystemInfoModel.HeaderModel { Name = header.Key, Value = header.Value }); } foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { var loadedAssemblyModel = new SystemInfoModel.LoadedAssembly { FullName = assembly.FullName }; //ensure no exception is thrown try { loadedAssemblyModel.Location = assembly.IsDynamic ? null : assembly.Location; loadedAssemblyModel.IsDebug = assembly.GetCustomAttributes(typeof(DebuggableAttribute), false) .FirstOrDefault() is DebuggableAttribute attribute && attribute.IsJITOptimizerDisabled; //https://stackoverflow.com/questions/2050396/getting-the-date-of-a-net-assembly //we use a simple method because the more Jeff Atwood's solution doesn't work anymore //more info at https://blog.codinghorror.com/determining-build-date-the-hard-way/ loadedAssemblyModel.BuildDate = assembly.IsDynamic ? null : (DateTime?)TimeZoneInfo.ConvertTimeFromUtc(_fileProvider.GetLastWriteTimeUtc(assembly.Location), TimeZoneInfo.Local); } catch { } model.LoadedAssemblies.Add(loadedAssemblyModel); } model.CurrentStaticCacheManager = _cacheManager.GetType().Name; model.RedisEnabled = _nopConfig.RedisEnabled; model.UseRedisToStoreDataProtectionKeys = _nopConfig.UseRedisToStoreDataProtectionKeys; model.UseRedisForCaching = _nopConfig.UseRedisForCaching; model.UseRedisToStorePluginsInfo = _nopConfig.UseRedisToStorePluginsInfo; model.AzureBlobStorageEnabled = _nopConfig.AzureBlobStorageEnabled; return(model); }
/// <summary> /// Prepare system info model /// </summary> /// <param name="model">System info model</param> /// <returns> /// A task that represents the asynchronous operation /// The task result contains the system info model /// </returns> public virtual async Task<SystemInfoModel> PrepareSystemInfoModelAsync(SystemInfoModel model) { if (model == null) throw new ArgumentNullException(nameof(model)); model.NopVersion = NopVersion.FULL_VERSION; model.ServerTimeZone = TimeZoneInfo.Local.StandardName; model.ServerLocalTime = DateTime.Now; model.UtcTime = DateTime.UtcNow; model.CurrentUserTime = await _dateTimeHelper.ConvertToUserTimeAsync(DateTime.Now); model.HttpHost = _httpContextAccessor.HttpContext.Request.Headers[HeaderNames.Host]; //ensure no exception is thrown try { model.OperatingSystem = Environment.OSVersion.VersionString; model.AspNetInfo = RuntimeInformation.FrameworkDescription; model.IsFullTrust = AppDomain.CurrentDomain.IsFullyTrusted; } catch { // ignored } foreach (var header in _httpContextAccessor.HttpContext.Request.Headers) { model.Headers.Add(new SystemInfoModel.HeaderModel { Name = header.Key, Value = header.Value }); } foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { var loadedAssemblyModel = new SystemInfoModel.LoadedAssembly { FullName = assembly.FullName }; //ensure no exception is thrown try { loadedAssemblyModel.Location = assembly.IsDynamic ? null : assembly.Location; loadedAssemblyModel.IsDebug = assembly.GetCustomAttributes(typeof(DebuggableAttribute), false) .FirstOrDefault() is DebuggableAttribute attribute && attribute.IsJITOptimizerDisabled; //https://stackoverflow.com/questions/2050396/getting-the-date-of-a-net-assembly //we use a simple method because the more Jeff Atwood's solution doesn't work anymore //more info at https://blog.codinghorror.com/determining-build-date-the-hard-way/ loadedAssemblyModel.BuildDate = assembly.IsDynamic ? null : (DateTime?)TimeZoneInfo.ConvertTimeFromUtc(_fileProvider.GetLastWriteTimeUtc(assembly.Location), TimeZoneInfo.Local); } catch { // ignored } model.LoadedAssemblies.Add(loadedAssemblyModel); } var currentStaticCacheManagerName = _staticCacheManager.GetType().Name; if (_appSettings.DistributedCacheConfig.Enabled) currentStaticCacheManagerName += $"({await _localizationService.GetLocalizedEnumAsync(_appSettings.DistributedCacheConfig.DistributedCacheType)})"; model.CurrentStaticCacheManager = currentStaticCacheManagerName; model.AzureBlobStorageEnabled = _appSettings.AzureBlobConfig.Enabled; return model; }