public override Task ReportAsync(CancellationToken token) { // Local log. this.ObserverLogger.LogInfo(message.ToString()); // Report to Fabric. var healthReporter = new ObserverHealthReporter(this.ObserverLogger); var healthReport = new Utilities.HealthReport { Code = FoErrorWarningCodes.Ok, HealthMessage = this.message.ToString(), NodeName = this.NodeName, Observer = this.ObserverName, ReportType = HealthReportType.Node, State = HealthState.Ok, }; healthReporter.ReportHealthToServiceFabric(healthReport); // Emit Telemetry - This will use whatever telemetry provider you have configured in FabricObserver Settings.xml. var telemetryData = new TelemetryData(this.FabricClientInstance, this.Token) { Code = FoErrorWarningCodes.Ok, HealthEventDescription = this.message.ToString(), HealthState = "Ok", NodeName = this.NodeName, ObserverName = this.ObserverName, Source = ObserverConstants.FabricObserverName, }; if (this.IsTelemetryProviderEnabled && this.IsObserverTelemetryEnabled) { _ = this.TelemetryClient?.ReportHealthAsync( telemetryData, this.Token); } // ETW. if (this.IsEtwEnabled) { Logger.EtwLogger?.Write( ObserverConstants.FabricObserverETWEventName, new { Code = FoErrorWarningCodes.Ok, HealthEventDescription = this.message.ToString(), HealthState = "Ok", this.NodeName, this.ObserverName, Source = ObserverConstants.FabricObserverName, }); } this.message.Clear(); return(Task.CompletedTask); }
public override Task ReportAsync(CancellationToken token) { // Local log. ObserverLogger.LogInfo(message.ToString()); /* Report to Fabric */ // These values will be preserved across observer runs and are useful for clearing warnings // by reporting Ok health state health events with the same property and sourceid values // as the error/warning health events when FO is safely taken down (e.g., app is being uninstalled, // safe restart of fabric node it's running on, etc.). HealthReportProperties.Add("SomePropertyName"); HealthReportSourceIds.Add($"{ObserverName}_SomethingUniqueToThisReport"); var healthReporter = new ObserverHealthReporter(ObserverLogger); var healthReport = new Utilities.HealthReport { Code = FOErrorWarningCodes.Ok, HealthMessage = this.message.ToString(), NodeName = NodeName, Observer = ObserverName, Property = HealthReportProperties[^ 1],
/// <summary> /// Initializes a new instance of the <see cref="ObserverBase"/> class. /// </summary> protected ObserverBase() { ObserverName = GetType().Name; ConfigurationSectionName = ObserverName + "Configuration"; FabricClientInstance = ObserverManager.FabricClientInstance; if (IsTelemetryProviderEnabled) { TelemetryClient = ObserverManager.TelemetryClient; } FabricServiceContext = ObserverManager.FabricServiceContext; NodeName = FabricServiceContext.NodeContext.NodeName; NodeType = FabricServiceContext.NodeContext.NodeType; ConfigurationSectionName = ObserverName + "Configuration"; // Observer Logger setup. string logFolderBasePath; string observerLogPath = GetSettingParameterValue( ObserverConstants.ObserverManagerConfigurationSectionName, ObserverConstants.ObserverLogPathParameter); if (!string.IsNullOrEmpty(observerLogPath)) { logFolderBasePath = observerLogPath; } else { string logFolderBase = Path.Combine(Environment.CurrentDirectory, "observer_logs"); logFolderBasePath = logFolderBase; } ObserverLogger = new Logger(ObserverName, logFolderBasePath); if (string.IsNullOrEmpty(this.dumpsPath)) { SetDefaultSfDumpPath(); } // DataLogger setup if (bool.TryParse( GetSettingParameterValue( ConfigurationSectionName, ObserverConstants.EnableLongRunningCsvLogging), out bool enableDataLogging)) { if (enableDataLogging) { CsvFileLogger = new DataTableFileLogger { EnableCsvLogging = enableDataLogging, }; string dataLogPath = GetSettingParameterValue( ObserverConstants.ObserverManagerConfigurationSectionName, ObserverConstants.DataLogPathParameter); if (!string.IsNullOrEmpty(dataLogPath)) { CsvFileLogger.DataLogFolderPath = dataLogPath; } else { CsvFileLogger.DataLogFolderPath = Path.Combine(Environment.CurrentDirectory, "observer_data_logs"); } } } if (string.IsNullOrEmpty(this.dumpsPath)) { SetDefaultSfDumpPath(); } if (!IsTestRun) { ConfigurationSettings = new Utilities.ConfigSettings( FabricServiceContext.CodePackageActivationContext.GetConfigurationPackageObject("Config").Settings, ConfigurationSectionName); EnableVerboseLogging = ConfigurationSettings.EnableVerboseLogging; IsEnabled = ConfigurationSettings.IsEnabled; IsObserverTelemetryEnabled = ConfigurationSettings.IsObserverTelemetryEnabled; MonitorDuration = ConfigurationSettings.MonitorDuration; RunInterval = ConfigurationSettings.RunInterval; ObserverLogger.EnableVerboseLogging = EnableVerboseLogging; DataCapacity = ConfigurationSettings.DataCapacity; UseCircularBuffer = ConfigurationSettings.UseCircularBuffer; } HealthReporter = new ObserverHealthReporter(ObserverLogger); }
public override Task ReportAsync(CancellationToken token) { // Local log. ObserverLogger.LogInfo(message.ToString()); /* Report to Fabric */ // These values will be preserved across observer runs and are useful for clearing warnings // by reporting Ok health state health events with the same property and sourceid values // as the error/warning health events when FO is safely taken down (e.g., app is being uninstalled, // safe restart of fabric node it's running on, etc.). HealthReportProperties.Add("SomePropertyName"); HealthReportSourceIds.Add($"{ObserverName}_SomethingUniqueToThisReport"); var healthReporter = new ObserverHealthReporter(ObserverLogger, FabricClientInstance); var healthReport = new Utilities.HealthReport { Code = FOErrorWarningCodes.Ok, HealthMessage = this.message.ToString(), NodeName = NodeName, Observer = ObserverName, Property = HealthReportProperties[HealthReportProperties.Count - 1], ReportType = HealthReportType.Node, State = HealthState.Ok, }; healthReporter.ReportHealthToServiceFabric(healthReport); // Emit Telemetry - This will use whatever telemetry provider you have configured in FabricObserver Settings.xml. var telemetryData = new TelemetryData(FabricClientInstance, Token) { Code = FOErrorWarningCodes.Ok, HealthEventDescription = this.message.ToString(), HealthState = "Ok", NodeName = NodeName, ObserverName = ObserverName, Source = ObserverConstants.FabricObserverName, }; if (IsTelemetryProviderEnabled && IsObserverTelemetryEnabled) { _ = TelemetryClient?.ReportHealthAsync( telemetryData, Token); } // ETW. if (IsEtwEnabled) { Logger.EtwLogger?.Write( ObserverConstants.FabricObserverETWEventName, new { Code = FOErrorWarningCodes.Ok, HealthEventDescription = this.message.ToString(), HealthState = "Ok", NodeName, ObserverName, Source = ObserverConstants.FabricObserverName, }); } this.message.Clear(); return(Task.CompletedTask); }