public void RegisterWriter(ITelemetryWriter telemetryWriter) { if (_telemetryWriters.Any(tw => tw.Name == telemetryWriter.Name)) { throw new InvalidOperationException($"Already registered Telemetry Writer for {telemetryWriter.Name}"); } _telemetryWriters.Add(telemetryWriter); }
public TelemetryEtwSink( ITelemetryWriter telemetryWriter, string clusterId, string tenantId, string clusterType, string serviceFabricVersion, string nodeName, bool isScaleMin, TelemetryScheduler telemetryScheduler) { string clusterDevType = isScaleMin.ToString(); this.telemetryWriter = telemetryWriter; // creating filter to only aggregate traces which are white-listed this.telemetryFilter = new TelemetryFilter(); // creating the unique identifier of the cluster/node this.telemetryIdentifier = new TelemetryIdentifiers(clusterId, tenantId, nodeName); // getting path to where telemetry will be persisted Utility.CreateWorkSubDirectory( Utility.TraceSource, LogSourceId, TelemetryWorkSubDirectoryKey, AggregationPersistenceFolder, Utility.DcaWorkFolder, out this.telemetryPersistFilePath); this.telemetryPersistFilePath = Path.Combine(this.telemetryPersistFilePath, TelemetryEtwSink.TelemetryPersistFileName); // initializing the collection of telemetry (first it tries to load it from file, if fails an empty collection is created) bool telCollectionloadedFromDisk; this.telemetryCollection = TelemetryCollection.LoadOrCreateTelemetryCollection(this.telemetryPersistFilePath, this.telemetryIdentifier, telemetryScheduler.DailyPushes, out telCollectionloadedFromDisk, Utility.TraceSource.WriteError); // updating the scheduling for sending telemetry based on the persisted (or not persisted) telemetryCollection. telemetryScheduler.UpdateScheduler(telCollectionloadedFromDisk, this.telemetryCollection.TotalPushes > 0, this.telemetryCollection.PushTime, DateTime.Now.ToLocalTime().TimeOfDay); this.telemetryCollection.PushTime = telemetryScheduler.PushTime; // creating environment telemetry and including it in the collection this.environmentTelemetry = new EnvironmentTelemetry( clusterType, serviceFabricVersion, clusterDevType); this.telemetryCollection.Aggregate(this.environmentTelemetry); this.telemetryPerformanceInstrumentation = new TelemetryPerformanceInstrumentation(); this.telemetryCollection.Aggregate(this.telemetryPerformanceInstrumentation); this.telemetryLock = new object(); Utility.TraceSource.WriteInfo(LogSourceId, "{0}, Initial send telemetry delay of {1} at a frequency of every {2} minutes.", this.telemetryIdentifier, telemetryScheduler.SendDelay, telemetryScheduler.SendInterval.TotalMinutes); this.telemetrySendTimer = new System.Threading.Timer(this.SendTelemetry, null, telemetryScheduler.SendDelay, telemetryScheduler.SendInterval); }
public TelemetryConsumerBase(string applicationInstanceId) { // reading from Diagnostic section the ClusterId and whether telemetry is enabled ConfigReader configReader = new ConfigReader(applicationInstanceId); bool enableTelemetry = TelemetryConsumerBase.ParseBoolString( configReader.GetUnencryptedConfigValue( ConfigReader.DiagnosticsSectionName, ConfigReader.EnableTelemetryParamName, "true"), true); if (enableTelemetry) { string clusterId; string tenantId; string clusterType; this.GetClusterIdAndType(configReader, out clusterId, out tenantId, out clusterType); string serviceFabricVersion = this.GetServiceFabricVersion() ?? TelemetryConstants.Undefined; bool isScaleMin = TelemetryConsumerBase.ParseBoolString( configReader.GetUnencryptedConfigValue( ConfigReader.FabricNodeSectionName, ConfigReader.IsScaleMinParamName, "false"), false); string nodeName = configReader.GetUnencryptedConfigValue( ConfigReader.FabricNodeSectionName, ConfigReader.InstanceNameParamName, "undefined"); try { ITelemetryWriter telemetryWriter = TelemetryWriterFactory.CreateTelemetryWriter(configReader, clusterId, nodeName, Utility.TraceSource.WriteError); this.etwSink = new TelemetryEtwSink(telemetryWriter, clusterId, tenantId, clusterType, serviceFabricVersion, nodeName, isScaleMin, new TelemetryScheduler(configReader)); } catch (Exception e) { Utility.TraceSource.WriteExceptionAsError( TraceType, e, "Failed to create TelemetryEtwSink"); } } this.disposed = false; }
/// <summary> /// Dispose managed resources. /// </summary> protected override void DisposeManagedResources() { base.DisposeManagedResources(); if (telemetryWriter != null) { lock (telemetryWriterLocker) { if (telemetryWriter != null) { WriteFooter(); telemetryWriter.Dispose(); telemetryWriter = null; } } } }
/// <summary> /// Ensure to create a new writer for each session /// </summary> /// <param name="settingsProvider"></param> public void Initialize(ITelemetryLogSettingsProvider settingsProvider) { if (!isInitialized) { lock (telemetryWriterLocker) { if (!isInitialized) { CodeContract.RequiresArgumentNotNull <ITelemetryLogSettingsProvider>(settingsProvider, "settingsProvider"); this.settingsProvider = settingsProvider; if (telemetryWriter == null) { telemetryWriter = new TelemetryTextWriter(this.settingsProvider.FilePath); } WriteHeader(); isInitialized = true; } } } }
public TelemetryJsonLogFile(ITelemetryWriter writer = null) : base(writer) { }
public BaseJsonLogFile(ITelemetryWriter writer = null) { telemetryWriter = writer; }
/// <summary> /// Removes the telemetry writer. /// </summary> /// <param name="telemetryWriter">The telemetry writer.</param> public void RemoveTelemetryWriter(ITelemetryWriter telemetryWriter) { TelemetryWriters.Remove(telemetryWriter); }
/// <summary> /// Adds the telemetry writer. /// </summary> /// <param name="telemetryWriter">The telemetry writer.</param> public void AddTelemetryWriter(ITelemetryWriter telemetryWriter) { TelemetryWriters.Add(telemetryWriter); }
public RemoteSettingsJsonLogFile(ITelemetryWriter writer = null) : base(writer) { }