public DiagnosticsController(IEnvironment environment, ITracer tracer, IApplicationLogsReader applicationLogsReader) { // Setup the diagnostics service to collect information from the following paths: // 1. The deployments folder // 2. The profile dump // 3. The npm log _paths = new[] { environment.DeploymentsPath, Path.Combine(environment.RootPath, Constants.LogFilesPath), Path.Combine(environment.WebRootPath, Constants.NpmDebugLogFile), }; _applicationLogsReader = applicationLogsReader; _tracer = tracer; _settingsManager = new DiagnosticsSettingsManager(Path.Combine(environment.DiagnosticsPath, Constants.SettingsJsonFile), _tracer); }
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); }); }