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);
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
 /// <summary>
 /// Dispose managed resources.
 /// </summary>
 protected override void DisposeManagedResources()
 {
     base.DisposeManagedResources();
     if (telemetryWriter != null)
     {
         lock (telemetryWriterLocker)
         {
             if (telemetryWriter != null)
             {
                 WriteFooter();
                 telemetryWriter.Dispose();
                 telemetryWriter = null;
             }
         }
     }
 }
Example #5
0
 /// <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;
             }
         }
     }
 }
Example #6
0
 public TelemetryJsonLogFile(ITelemetryWriter writer = null)
     : base(writer)
 {
 }
Example #7
0
 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)
 {
 }