private void WriteWebsite(Site websiteObject)
        {
            SiteConfig config = WebsitesClient.GetWebsiteConfiguration(websiteObject.Name);

            var diagnosticSettings = new DiagnosticsSettings();

            try
            {
                diagnosticSettings = WebsitesClient.GetApplicationDiagnosticsSettings(websiteObject.Name);
            }
            catch
            {
                // Ignore exception and use default values
            }

            WebsiteInstance[] instanceIds;
            try
            {
                instanceIds = WebsitesClient.ListWebsiteInstances(websiteObject.WebSpace, websiteObject.Name);
            }
            catch
            {
                // TODO: Temporary workaround for issue where slots are not supported with this API (yet).
                instanceIds = new WebsiteInstance[0];
            }

            WriteObject(new SiteWithConfig(websiteObject, config, diagnosticSettings, instanceIds), false);
        }
        public void only_cache_up_to_the_setting_limit()
        {
            var settings = new DiagnosticsSettings {
                MaxRequests = 10
            };

            var cache = new RequestHistoryCache(settings);

            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());

            cache.RecentReports().Count().ShouldEqual(9);

            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());
            cache.Store(new RequestLog());

            cache.RecentReports().Count().ShouldEqual(settings.MaxRequests);
        }
示例#3
0
 public SiteWithConfig()
 {
     Site = new Site();
     SiteConfig = new SiteConfig();
     AppSettings = new Hashtable();
     DiagnosticsSettings = new DiagnosticsSettings();
 }
示例#4
0
 public SiteWithConfig()
 {
     Site                = new Site();
     SiteConfig          = new SiteConfig();
     AppSettings         = new Hashtable();
     DiagnosticsSettings = new DiagnosticsSettings();
 }
示例#5
0
        public void only_cache_up_to_the_setting_limit()
        {
            var settings = new DiagnosticsSettings
            {
                MaxRequests = 10
            };

            var cache = new ChainExecutionHistory(settings);

            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());

            cache.RecentReports().Count().ShouldBe(9);

            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());
            cache.Store(new ChainExecutionLog());

            cache.RecentReports().Count().ShouldBe(settings.MaxRequests);
        }
        private void WriteWebsite(Site websiteObject)
        {
            SiteConfig config = WebsitesClient.GetWebsiteConfiguration(websiteObject.Name);

            var diagnosticSettings = new DiagnosticsSettings();
            try
            {
                diagnosticSettings = WebsitesClient.GetApplicationDiagnosticsSettings(websiteObject.Name);
            }
            catch
            {
                // Ignore exception and use default values
            }

            WebsiteInstance[] instanceIds;
            try
            {
                instanceIds = WebsitesClient.ListWebsiteInstances(websiteObject.WebSpace, websiteObject.Name);
            }
            catch
            {
                // TODO: Temporary workaround for issue where slots are not supported with this API (yet).
                instanceIds = new WebsiteInstance[0];
            }

            WriteObject(new SiteWithConfig(websiteObject, config, diagnosticSettings, instanceIds), false);
        }
        public void UpdateSetting(string key, object value)
        {
            DiagnosticsSettings diagnosticsSettings = ReadSettings();

            diagnosticsSettings.SetSetting(key, value);
            SaveSettings(diagnosticsSettings);
        }
示例#8
0
 public SiteWithConfig()
 {
     Site                = new Site();
     SiteConfig          = new SiteConfig();
     AppSettings         = new Hashtable();
     DiagnosticsSettings = new DiagnosticsSettings();
     Instances           = new WebsiteInstance[0];
 }
示例#9
0
 public SiteWithConfig()
 {
     Site = new Site();
     SiteConfig = new SiteConfig();
     AppSettings = new Hashtable();
     DiagnosticsSettings = new DiagnosticsSettings();
     Instances = new WebsiteInstance[0];
 }
示例#10
0
 public RequestLogBuilder(ISystemTime systemTime, IHttpRequest request, ICurrentChain currentChain,
     DiagnosticsSettings settings)
 {
     _systemTime = systemTime;
     _request = request;
     _currentChain = currentChain;
     _settings = settings;
 }
示例#11
0
 public RequestLogBuilder(ISystemTime systemTime, IHttpRequest request, ICurrentChain currentChain,
                          DiagnosticsSettings settings)
 {
     _systemTime   = systemTime;
     _request      = request;
     _currentChain = currentChain;
     _settings     = settings;
 }
示例#12
0
        public void add_role()
        {
            var settings = new DiagnosticsSettings();

            settings.RestrictToRule("admin");

            settings.AuthorizationRights.Single().ShouldBeOfType <AllowRole>()
            .Role.ShouldEqual("admin");
        }
示例#13
0
        /// <summary>
        /// Gets the website configuration.
        /// </summary>
        /// <param name="name">The website name</param>
        /// <returns>The website configuration object</returns>
        public SiteWithConfig GetWebsiteConfiguration(string name)
        {
            Site                website             = GetWebsite(name);
            SiteConfig          configuration       = WebsiteChannel.GetSiteConfig(subscriptionId, website.WebSpace, website.Name);
            DiagnosticsSettings diagnosticsSettings = GetApplicationDiagnosticsSettings(website.Name);
            SiteWithConfig      siteWithConfig      = new SiteWithConfig(website, configuration, diagnosticsSettings);

            return(siteWithConfig);
        }
        public void if_disabled_just_return_inner_app_func()
        {
            Func <IDictionary <string, object>, Task> inner = d => Task.Factory.StartNew(() => { });

            var settings = new DiagnosticsSettings {
                TraceLevel = TraceLevel.None
            };

            settings.WrapAppFunc(null, inner).ShouldBeSameAs(inner);
        }
示例#15
0
        private void SetApplicationDiagnosticsSettings(
            string name,
            WebsiteDiagnosticOutput output,
            bool setFlag,
            Dictionary <DiagnosticProperties, object> properties = null)
        {
            Site website = GetWebsite(name);

            using (HttpClient client = CreateHttpClient(website.Name))
            {
                DiagnosticsSettings diagnosticsSettings = GetApplicationDiagnosticsSettings(website.Name);
                switch (output)
                {
                case WebsiteDiagnosticOutput.FileSystem:
                    diagnosticsSettings.AzureDriveTraceEnabled = setFlag;
                    diagnosticsSettings.AzureDriveTraceLevel   = setFlag ?
                                                                 (LogEntryType)properties[DiagnosticProperties.LogLevel] :
                                                                 diagnosticsSettings.AzureDriveTraceLevel;
                    break;

                case WebsiteDiagnosticOutput.StorageTable:
                    diagnosticsSettings.AzureTableTraceEnabled = setFlag;
                    if (setFlag)
                    {
                        const string storageTableName   = "CLOUD_STORAGE_ACCOUNT";
                        string       storageAccountName = (string)properties[DiagnosticProperties.StorageAccountName];

                        StorageService storageService = ServiceManagementChannel.GetStorageKeys(
                            SubscriptionId,
                            storageAccountName);
                        StorageCredentials credentials = new StorageCredentials(
                            storageAccountName,
                            storageService.StorageServiceKeys.Primary);
                        CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(credentials, false);
                        string connectionString = cloudStorageAccount.ToString(true);
                        AddAppSetting(website.Name, storageTableName, connectionString);
                        diagnosticsSettings.AzureTableTraceLevel = setFlag ?
                                                                   (LogEntryType)properties[DiagnosticProperties.LogLevel] :
                                                                   diagnosticsSettings.AzureTableTraceLevel;
                    }
                    break;

                default:
                    throw new ArgumentException();
                }

                JObject json = new JObject();
                json[UriElements.AzureDriveTraceEnabled] = diagnosticsSettings.AzureDriveTraceEnabled;
                json[UriElements.AzureDriveTraceLevel]   = JToken.FromObject(diagnosticsSettings.AzureDriveTraceLevel);
                json[UriElements.AzureTableTraceEnabled] = diagnosticsSettings.AzureTableTraceEnabled;
                json[UriElements.AzureTableTraceLevel]   = JToken.FromObject(diagnosticsSettings.AzureTableTraceLevel);
                client.PostAsJsonAsync(UriElements.DiagnosticsSettings, json, Logger);
            }
        }
示例#16
0
        /// <summary>
        /// Gets the application diagnostics settings
        /// </summary>
        /// <param name="name">The website name</param>
        /// <returns>The website application diagnostics settings</returns>
        public DiagnosticsSettings GetApplicationDiagnosticsSettings(string name)
        {
            DiagnosticsSettings diagnosticsSettings = null;

            using (HttpClient client = CreateDeploymentHttpClient(name))
            {
                diagnosticsSettings = client.GetJson <DiagnosticsSettings>(UriElements.DiagnosticsSettings, Logger);
            }

            return(diagnosticsSettings);
        }
示例#17
0
        public IActionResult Set(DiagnosticsSettings newSettings)
        {
            if (newSettings == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }

            _settingsManager.UpdateSettings(newSettings);

            return(NoContent());
        }
示例#18
0
        private void SaveSettings(DiagnosticsSettings diagnosticsSettings)
        {
            if (!FileSystemHelpers.FileExists(_path))
            {
                FileSystemHelpers.EnsureDirectory(Path.GetDirectoryName(_path));
            }

            string fileContent = JsonConvert.SerializeObject(diagnosticsSettings);

            FileSystemHelpers.WriteAllTextToFile(_path, fileContent);
        }
示例#19
0
        public HttpResponseMessage Set(DiagnosticsSettings newSettings)
        {
            if (newSettings == null)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            _settingsManager.UpdateSettings(newSettings);

            return(Request.CreateResponse(HttpStatusCode.NoContent));
        }
示例#20
0
        public void UpdateSettings(DiagnosticsSettings settings)
        {
            DiagnosticsSettings diagnosticsSettings = ReadSettings();

            foreach (KeyValuePair <string, object> pair in settings)
            {
                diagnosticsSettings.SetSetting(pair.Key, pair.Value);
            }

            SaveSettings(diagnosticsSettings);
        }
示例#21
0
        public bool DeleteSetting(string key)
        {
            DiagnosticsSettings diagnosticsSettings = ReadSettings();

            if (diagnosticsSettings.RemoveSetting(key))
            {
                SaveSettings(diagnosticsSettings);
                return(true);
            }

            return(false);
        }
示例#22
0
        public void can_override()
        {
            var settings = new DiagnosticsSettings();

            settings.SetIfNone(TraceLevel.Verbose);

            settings.TraceLevel.ShouldEqual(TraceLevel.Verbose);

            settings.SetIfNone(TraceLevel.Production);

            settings.TraceLevel.ShouldEqual(TraceLevel.Verbose);
        }
示例#23
0
 public SiteWithConfig(Site site, SiteConfig siteConfig)
 {
     Site = site;
     SiteConfig = siteConfig;
     AppSettings = new Hashtable();
     DiagnosticsSettings = new DiagnosticsSettings();
     
     if (SiteConfig.AppSettings != null)
     {
         foreach (var setting in SiteConfig.AppSettings)
         {
             AppSettings[setting.Name] = setting.Value;
         }
     }
 }
示例#24
0
        public SiteWithConfig(Site site, SiteConfig siteConfig)
        {
            Site                = site;
            SiteConfig          = siteConfig;
            AppSettings         = new Hashtable();
            DiagnosticsSettings = new DiagnosticsSettings();

            if (SiteConfig.AppSettings != null)
            {
                foreach (var setting in SiteConfig.AppSettings)
                {
                    AppSettings[setting.Name] = setting.Value;
                }
            }
        }
示例#25
0
        private void SetApplicationDiagnosticsSettings(
            string name,
            WebsiteDiagnosticOutput output,
            bool setFlag,
            Dictionary <DiagnosticProperties, object> properties = null)
        {
            Site website = GetWebsite(name);

            using (HttpClient client = CreateDeploymentHttpClient(website.Name))
            {
                DiagnosticsSettings diagnosticsSettings = GetApplicationDiagnosticsSettings(website.Name);
                switch (output)
                {
                case WebsiteDiagnosticOutput.FileSystem:
                    diagnosticsSettings.AzureDriveTraceEnabled = setFlag;
                    diagnosticsSettings.AzureDriveTraceLevel   = setFlag ?
                                                                 (LogEntryType)properties[DiagnosticProperties.LogLevel] :
                                                                 diagnosticsSettings.AzureDriveTraceLevel;
                    break;

                case WebsiteDiagnosticOutput.StorageTable:
                    diagnosticsSettings.AzureTableTraceEnabled = setFlag;
                    if (setFlag)
                    {
                        const string storageTableName   = "CLOUD_STORAGE_ACCOUNT";
                        string       storageAccountName = (string)properties[DiagnosticProperties.StorageAccountName];
                        string       connectionString   = cloudServiceClient.GetStorageServiceConnectionString(
                            storageAccountName);
                        SetConnectionString(website.Name, storageTableName, connectionString, DatabaseType.Custom);

                        diagnosticsSettings.AzureTableTraceLevel = setFlag ?
                                                                   (LogEntryType)properties[DiagnosticProperties.LogLevel] :
                                                                   diagnosticsSettings.AzureTableTraceLevel;
                    }
                    break;

                default:
                    throw new ArgumentException();
                }

                JObject json = new JObject(
                    new JProperty(UriElements.AzureDriveTraceEnabled, diagnosticsSettings.AzureDriveTraceEnabled),
                    new JProperty(UriElements.AzureDriveTraceLevel, diagnosticsSettings.AzureDriveTraceLevel.ToString()),
                    new JProperty(UriElements.AzureTableTraceEnabled, diagnosticsSettings.AzureTableTraceEnabled),
                    new JProperty(UriElements.AzureTableTraceLevel, diagnosticsSettings.AzureTableTraceLevel.ToString()));
                client.PostJson(UriElements.DiagnosticsSettings, json, Logger);
            }
        }
        private void WriteWebsite(Site websiteObject)
        {
            SiteConfig config = WebsitesClient.GetWebsiteConfiguration(websiteObject.Name);

            var diagnosticSettings = new DiagnosticsSettings();
            try
            {
                diagnosticSettings = WebsitesClient.GetApplicationDiagnosticsSettings(websiteObject.Name);
            }
            catch
            {
                // Ignore exception and use default values
            }

            WriteObject(new SiteWithConfig(websiteObject, config, diagnosticSettings), false);
        }
示例#27
0
        private void WriteWebsite(Site websiteObject)
        {
            SiteConfig config = WebsitesClient.GetWebsiteConfiguration(websiteObject.Name);

            var diagnosticSettings = new DiagnosticsSettings();

            try
            {
                diagnosticSettings = WebsitesClient.GetApplicationDiagnosticsSettings(websiteObject.Name);
            }
            catch
            {
                // Ignore exception and use default values
            }

            WriteObject(new SiteWithConfig(websiteObject, config, diagnosticSettings), false);
        }
示例#28
0
        private void GetByName()
        {
            Do(() =>
            {
                Site websiteObject = WebsitesClient.GetWebsite(Name);
                SiteConfig config  = WebsitesClient.GetWebsiteConfiguration(Name);
                Cache.AddSite(CurrentSubscription.SubscriptionId, websiteObject);

                var diagnosticSettings = new DiagnosticsSettings();
                try
                {
                    diagnosticSettings = WebsitesClient.GetApplicationDiagnosticsSettings(Name);
                }
                catch
                {
                    // Ignore exception and use default values
                }

                WriteObject(new SiteWithConfig(websiteObject, config, diagnosticSettings), false);
            });
        }
示例#29
0
        private void GetByName()
        {
            Do(() =>
                {
                    Site websiteObject = WebsitesClient.GetWebsite(Name);
                    SiteConfig config = WebsitesClient.GetWebsiteConfiguration(Name);
                    Cache.AddSite(CurrentSubscription.SubscriptionId, websiteObject);

                    var diagnosticSettings = new DiagnosticsSettings();
                    try
                    {
                        diagnosticSettings = WebsitesClient.GetApplicationDiagnosticsSettings(Name);
                    }
                    catch
                    {
                        // Ignore exception and use default values
                    }

                    WriteObject(new SiteWithConfig(websiteObject, config, diagnosticSettings), false);
                });
        }
示例#30
0
    static TracingTestSettings()
    {
        TraceListener1 = new DefaultTraceListener
        {
            Name        = "test_listener1",
            LogFileName = "test_listener1.log"
        };

        TraceListener2 = new DefaultTraceListener
        {
            Name        = "test_listener2",
            LogFileName = "test_listener2.log"
        };

        TraceListeners = new[] { TraceListener1, TraceListener2 };

        TraceSettings = new TraceSettings(
            AutoFlush,
            IndentSize,
            UseGlobalLock,
            TraceListeners);

        TraceSource1 = new TraceSource(TraceSource1Name);
        TraceSource2 = new TraceSource(TraceSource2Name);

        TraceSources = new TraceSource[]
        {
            TraceSource1,
            TraceSource2
        };

        DiagnosticsSettings = new DiagnosticsSettings(TraceSettings, TraceSources);

        Tracing.Settings = DiagnosticsSettings;

        // Immediately lock the Settings property by reading it.
        Tracing.Settings.Should().BeSameAs(DiagnosticsSettings);
    }
        private IEnumerable<BehaviorChain> fromActions(DiagnosticsSettings settings, IEnumerable<ActionCall> calls)
        {
            foreach (var action in calls)
            {
                if (action.Method.Name.StartsWith("Visualize"))
                {
                    var chain = new BehaviorChain();
                    chain.AddToEnd(action);
                    chain.IsPartialOnly = true;

                    chain.Tags.Add("Diagnostics");

                    yield return chain;
                }
                else
                {
                    var diagnosticChain = new DiagnosticChain(action);
                    diagnosticChain.Authorization.AddPolicies(settings.AuthorizationRights);

                    yield return diagnosticChain;
                }
            }
        } 
示例#32
0
        private IEnumerable <BehaviorChain> fromActions(DiagnosticsSettings settings, IEnumerable <ActionCall> calls)
        {
            foreach (var action in calls)
            {
                if (action.Method.Name.StartsWith("Visualize"))
                {
                    var chain = new BehaviorChain();
                    chain.AddToEnd(action);
                    chain.IsPartialOnly = true;

                    chain.Tags.Add("Diagnostics");

                    yield return(chain);
                }
                else
                {
                    var diagnosticChain = new DiagnosticChain(action);
                    diagnosticChain.Authorization.AddPolicies(settings.AuthorizationRights);

                    yield return(diagnosticChain);
                }
            }
        }
示例#33
0
        public object GetSetting(string key)
        {
            DiagnosticsSettings settings = ReadSettings();

            return(settings.GetSetting(key));
        }
示例#34
0
 public SiteWithConfig(Site site, SiteConfig siteConfig, DiagnosticsSettings diagnosticsSettings) :
     this(site, siteConfig)
 {
     DiagnosticsSettings = diagnosticsSettings;
 }
 public IAsyncResult BeginSetDiagnosticsSettings(DiagnosticsSettings diagnosticsSettings, AsyncCallback callback, object state)
 {
     throw new NotImplementedException();
 }
示例#36
0
 public SiteWithConfig(Site site, SiteConfig siteConfig, DiagnosticsSettings diagnosticsSettings, WebsiteInstance[] instances) :
     this(site, siteConfig)
 {
     DiagnosticsSettings = diagnosticsSettings;
     Instances           = instances;
 }
示例#37
0
 public RequestHistoryCache(DiagnosticsSettings settings)
 {
     _settings = settings;
 }
示例#38
0
 public SiteWithConfig(Site site, SiteConfig siteConfig, DiagnosticsSettings diagnosticsSettings, WebsiteInstance[] instances) :
     this(site, siteConfig)
 {
     DiagnosticsSettings = diagnosticsSettings;
     Instances = instances;
 }
示例#39
0
 public ChainExecutionHistory(DiagnosticsSettings settings)
 {
     _settings = settings;
 }
示例#40
0
 public RequestHistoryCache(DiagnosticsSettings settings)
 {
     _settings = settings;
 }
示例#41
0
 public IAsyncResult BeginSetDiagnosticsSettings(DiagnosticsSettings diagnosticsSettings, AsyncCallback callback, object state)
 {
     throw new NotImplementedException();
 }
示例#42
0
        public void BasicReadWriteTests()
        {
            BuildFileSystemMock((Mock <IFileSystem> fileSystemMock) =>
            {
                FileSystemHelpers.Instance = fileSystemMock.Object;
                var mockTracer             = new Mock <ITracer>();

                var manager = new DiagnosticsSettingsManager(@"x:\test.json", mockTracer.Object);

                // should see default value
                DiagnosticsSettings settings = manager.GetSettings();
                Assert.Equal(false, settings.AzureDriveEnabled);
                Assert.Equal(TraceEventType.Error, settings.AzureDriveTraceLevel);
                Assert.Equal(false, settings.AzureTableEnabled);
                Assert.Equal(TraceEventType.Error, settings.AzureTableTraceLevel);
                Assert.Equal(false, settings.AzureBlobEnabled);
                Assert.Equal(TraceEventType.Error, settings.AzureBlobTraceLevel);

                // update with good value
                manager.UpdateSetting(DiagnosticsSettings.AzureDriveEnabledKey, true);
                manager.UpdateSetting(DiagnosticsSettings.AzureDriveTraceLevelKey, TraceEventType.Verbose);
                manager.UpdateSetting(DiagnosticsSettings.AzureTableEnabledKey, true);
                manager.UpdateSetting(DiagnosticsSettings.AzureTableTraceLevelKey, TraceEventType.Warning);
                manager.UpdateSetting(DiagnosticsSettings.AzureBlobEnabledKey, true);
                manager.UpdateSetting(DiagnosticsSettings.AzureBlobTraceLevelKey, TraceEventType.Information);

                settings = manager.GetSettings();
                Assert.Equal(true, settings.AzureDriveEnabled);
                Assert.Equal(TraceEventType.Verbose, settings.AzureDriveTraceLevel);
                Assert.Equal(true, settings.AzureTableEnabled);
                Assert.Equal(TraceEventType.Warning, settings.AzureTableTraceLevel);
                Assert.Equal(true, settings.AzureBlobEnabled);
                Assert.Equal(TraceEventType.Information, settings.AzureBlobTraceLevel);

                // number and string should be good too
                manager.UpdateSetting(DiagnosticsSettings.AzureDriveTraceLevelKey, 2);
                settings = manager.GetSettings();
                Assert.Equal(TraceEventType.Error, settings.AzureDriveTraceLevel);

                JsonSerializationException exception = null;

                try
                {
                    manager.UpdateSetting(DiagnosticsSettings.AzureTableTraceLevelKey, "Error");
                }
                catch (JsonSerializationException ex)
                {
                    exception = ex;
                }

                Assert.NotNull(exception);
                Assert.Equal("Error getting value from 'AzureTableTraceLevel' on 'Kudu.Contracts.Settings.DiagnosticsSettings'.", exception.Message);

                try
                {
                    manager.UpdateSetting(DiagnosticsSettings.AzureTableTraceLevelKey, "8");
                }
                catch (JsonSerializationException ex)
                {
                    exception = ex;
                }

                Assert.Equal("Error getting value from 'AzureTableTraceLevel' on 'Kudu.Contracts.Settings.DiagnosticsSettings'.", exception.Message);

                try
                {
                    manager.UpdateSetting(DiagnosticsSettings.AzureTableTraceLevelKey, "foo");
                }
                catch (JsonSerializationException ex)
                {
                    exception = ex;
                }

                Assert.Equal("Error getting value from 'AzureTableTraceLevel' on 'Kudu.Contracts.Settings.DiagnosticsSettings'.", exception.Message);

                try
                {
                    manager.UpdateSetting(DiagnosticsSettings.AzureBlobTraceLevelKey, 999);
                }
                catch (JsonSerializationException ex)
                {
                    exception = ex;
                }

                Assert.Equal(string.Format(CultureInfo.InvariantCulture, "Error converting value '{0}'", 999), exception.Message);

                settings = manager.GetSettings();
                Assert.Equal(true, settings.AzureDriveEnabled);
                Assert.Equal(TraceEventType.Error, settings.AzureDriveTraceLevel);
                Assert.Equal(true, settings.AzureTableEnabled);
                Assert.Equal(TraceEventType.Warning, settings.AzureTableTraceLevel);
                Assert.Equal(true, settings.AzureBlobEnabled);
                Assert.Equal(TraceEventType.Information, settings.AzureBlobTraceLevel);

                // with corrupted content, kudu will auto-correct content and reset to default value
                manager  = new DiagnosticsSettingsManager(@"x:\bad-content.json", mockTracer.Object);
                settings = manager.GetSettings();
                Assert.Equal(false, settings.AzureDriveEnabled);
                Assert.Equal(TraceEventType.Error, settings.AzureDriveTraceLevel);
                Assert.Equal(false, settings.AzureTableEnabled);
                Assert.Equal(TraceEventType.Error, settings.AzureTableTraceLevel);
                Assert.Equal(false, settings.AzureBlobEnabled);
                Assert.Equal(TraceEventType.Error, settings.AzureBlobTraceLevel);
            });
        }
 public ChainExecutionHistory(DiagnosticsSettings settings)
 {
     _settings = settings;
 }