예제 #1
0
        internal void Update(AppConfig appConfig, HashSet <string> changedSections)
        {
            // Figure out whether the data collector is interested in any of the
            // changed sections. If so, it needs to be restarted.
            IEnumerable <string> relevantChanges = Enumerable.Intersect(
                this.dataCollector.RegisteredAppConfigSections,
                changedSections);

            if (0 == relevantChanges.Count())
            {
                Utility.TraceSource.WriteInfo(
                    TraceType,
                    "Configuration change did not require the data collector for application instance {0} to be restarted.",
                    this.applicationInstanceId);
            }

            Utility.TraceSource.WriteInfo(
                TraceType,
                "Data collector for application instance {0} will be restarted because the application configuration has changed.",
                this.applicationInstanceId);

            // Dispose the current data collector
            this.dataCollector.Dispose();

            // Update the configuration
            ConfigReader.AddAppConfig(this.applicationInstanceId, appConfig);

            // Create a new data collector
            this.dataCollector = new FabricDCA(this.applicationInstanceId, this.diskSpaceManager);
        }
예제 #2
0
        internal AppInstance(string applicationInstanceId, AppConfig appConfig, string servicePackageName, ServiceConfig serviceConfig, DiskSpaceManager diskSpaceManager)
        {
            this.applicationInstanceId = applicationInstanceId;
            this.diskSpaceManager      = diskSpaceManager;

            // Make the configuration available to the application
            ConfigReader.AddAppConfig(this.applicationInstanceId, appConfig);

            if (null != servicePackageName)
            {
                ConfigReader.AddServiceConfig(this.applicationInstanceId, servicePackageName, serviceConfig);
            }

            // Create the data collector for the application instance
            this.dataCollector = new FabricDCA(this.applicationInstanceId, diskSpaceManager);
        }
예제 #3
0
 private bool CreateMdsUploader(string sectionName, out MdsEtwEventUploader uploader)
 {
     // Once Uploader is constructed DiskSpaceManager is no longer needed.
     using (var dsm = new DiskSpaceManager())
     {
         ConfigReader.AddAppConfig(Utility.WindowsFabricApplicationInstanceId, null);
         var initParam = new ConsumerInitializationParameters(
             Utility.WindowsFabricApplicationInstanceId,
             sectionName,
             TestFabricNodeId,
             TestFabricNodeName,
             Utility.LogDirectory,
             Utility.DcaWorkFolder,
             dsm);
         uploader     = new MdsEtwEventUploader(initParam);
         EtwCsvFolder = uploader.EtwCsvFolder;
         return(true);
     }
 }
예제 #4
0
        internal void AddService(AppConfig appConfig, string servicePackageName, ServiceConfig serviceConfig)
        {
            bool restartNeeded = false;

            if (this.ServiceConfigHasChanged(servicePackageName, serviceConfig))
            {
                Utility.TraceSource.WriteInfo(
                    TraceType,
                    "Data collector for application instance {0} will be restarted because service package {1} was activated.",
                    this.applicationInstanceId,
                    servicePackageName);
                restartNeeded = true;
            }
            else if (this.AppConfigHasChanged(appConfig))
            {
                Utility.TraceSource.WriteInfo(
                    TraceType,
                    "Data collector for application instance {0} will be restarted because the application configuration has changed.",
                    this.applicationInstanceId);
                restartNeeded = true;
            }
            else
            {
                Utility.TraceSource.WriteInfo(
                    TraceType,
                    "Activation of service package {0} does not require the data collector for application instance {1} to be restarted.",
                    servicePackageName,
                    this.applicationInstanceId);
            }

            if (restartNeeded)
            {
                // Dispose the current data collector
                this.dataCollector.Dispose();

                // Update the configuration
                ConfigReader.AddAppConfig(this.applicationInstanceId, appConfig);
                ConfigReader.AddServiceConfig(this.applicationInstanceId, servicePackageName, serviceConfig);

                // Create a new data collector
                this.dataCollector = new FabricDCA(this.applicationInstanceId, this.diskSpaceManager);
            }
        }
        public void TestMethodSetup()
        {
            // Initialization
            bool result = StartDtrRead.Reset() && DtrReadCompleted.Reset() && EndOfTest.Reset();

            Verify.IsTrue(result, "Successfully reset all events at the start of the test");

            // Parse the configuration file
            this.testStartTime = DateTime.UtcNow;
            ParseConfig(testStartTime);

            // Create the log and work directories
            Utility.LogDirectory = Path.Combine(testDataDirectory, this.testStartTime.Ticks.ToString(), LogFolderName);
            Utility.TraceSource.WriteInfo(
                TraceType,
                "Log folder: {0}",
                Utility.LogDirectory);
            Utility.InitializeWorkDirectory();

            // Create the deleted items folder
            this.deletedItemsFolder = Path.Combine(testDataDirectory, this.testStartTime.Ticks.ToString(), DeletedItemsFolderName);
            FabricDirectory.CreateDirectory(deletedItemsFolder);
            Utility.TraceSource.WriteInfo(
                TraceType,
                "Deleted items folder: {0}",
                this.deletedItemsFolder);

            // Create the MDS upload consumer
            ConfigReader.AddAppConfig(Utility.WindowsFabricApplicationInstanceId, null);
            var initParam = new ConsumerInitializationParameters(
                Utility.WindowsFabricApplicationInstanceId,
                TestConfigSectionName,
                TestFabricNodeId,
                TestFabricNodeName,
                Utility.LogDirectory,
                Utility.DcaWorkFolder,
                new DiskSpaceManager());

            this.uploader = new MdsEtwEventUploader(initParam);
            EtwCsvFolder  = this.uploader.EtwCsvFolder;
        }
        private AzureTableQueryableEventUploader CreateAndInitializeUploader()
        {
            const string TestFabricNodeInstanceName = "test";
            const string TestLogDirectory           = "Logs";
            const string TestWorkDirectory          = "Work";

            // Once Uploader is constructed DiskSpaceManager is no longer needed.
            using (var testDiskSpaceManager = new DiskSpaceManager())
            {
                ConfigReader.AddAppConfig(Utility.WindowsFabricApplicationInstanceId, null);
                ConsumerInitializationParameters initParam = new ConsumerInitializationParameters(
                    Utility.WindowsFabricApplicationInstanceId,
                    TestConfigSectionName,
                    TestFabricNodeId,
                    TestFabricNodeInstanceName,
                    TestLogDirectory,
                    TestWorkDirectory,
                    testDiskSpaceManager);
                return(new AzureTableQueryableEventUploader(initParam));
            }
        }
예제 #7
0
        private static EtlInMemoryProducer CreateEtlInMemoryProducerWithMDSConsumer(string logDirectory, ITraceFileEventReaderFactory traceFileEventReaderFactory)
        {
            var mockDiskSpaceManager        = TestUtility.MockRepository.Create <DiskSpaceManager>();
            var etlInMemoryProducerSettings = new EtlInMemoryProducerSettings(
                true,
                TimeSpan.FromSeconds(1),
                TimeSpan.FromDays(3000),
                WinFabricEtlType.DefaultEtl,
                logDirectory,
                TestEtlFilePatterns,
                true);

            var configReader = TestUtility.MockRepository.Create <IEtlInMemoryProducerConfigReader>();

            configReader.Setup(c => c.GetSettings()).Returns(etlInMemoryProducerSettings);

            var mockTraceEventSourceFactory = TestUtility.MockRepository.Create <ITraceEventSourceFactory>();

            mockTraceEventSourceFactory
            .Setup(tsf => tsf.CreateTraceEventSource(It.IsAny <EventTask>()))
            .Returns(new ErrorAndWarningFreeTraceEventSource());

            var configStore = TestUtility.MockRepository.Create <IConfigStore>();

            configStore
            .Setup(cs => cs.ReadUnencryptedString("Diagnostics", "MaxDiskQuotaInMB"))
            .Returns("100");
            configStore
            .Setup(cs => cs.ReadUnencryptedString("Diagnostics", "DiskFullSafetySpaceInMB"))
            .Returns("0");
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.EnabledParamName))
            .Returns("true");
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.DirectoryParamName))
            .Returns(logDirectory);
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.TableParamName))
            .Returns(TableName);
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.TablePriorityParamName))
            .Returns(MdsFileProducerConstants.DefaultTablePriority);
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.DiskQuotaParamName))
            .Returns(MdsFileProducerConstants.DefaultDiskQuotaInMB.ToString());
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.BookmarkBatchSizeParamName))
            .Returns(MdsFileProducerConstants.DefaultBookmarkBatchSize.ToString());
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.DataDeletionAgeParamName))
            .Returns(MdsFileProducerConstants.DefaultDataDeletionAge.TotalDays.ToString());
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.TestDataDeletionAgeParamName))
            .Returns(MdsFileProducerConstants.DefaultDataDeletionAge.TotalDays.ToString());
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, MdsFileProducerConstants.LogFilterParamName))
            .Returns(LogFilter);

            Utility.InitializeConfigStore(configStore.Object);

            var mockConfigReaderFactory = TestUtility.MockRepository.Create <IEtlInMemoryProducerConfigReaderFactory>();

            mockConfigReaderFactory.Setup(f => f.CreateEtlInMemoryProducerConfigReader(It.IsAny <FabricEvents.ExtensionsEvents>(), It.IsAny <string>()))
            .Returns(configReader.Object);

            // Create the MDS consumer
            ConfigReader.AddAppConfig(Utility.WindowsFabricApplicationInstanceId, null);
            var consumerInitParam = new ConsumerInitializationParameters(
                Utility.WindowsFabricApplicationInstanceId,
                TestConfigSectionName,
                TestFabricNodeId,
                TestFabricNodeName,
                Utility.LogDirectory,
                Utility.DcaWorkFolder,
                new DiskSpaceManager());

            var mdsFileProducer           = new MdsFileProducer(consumerInitParam);
            var etlToInMemoryBufferWriter = mdsFileProducer.GetDataSink();

            var producerInitParam = new ProducerInitializationParameters
            {
                ConsumerSinks = new[] { etlToInMemoryBufferWriter }
            };

            // Create the in-memory producer
            return(new EtlInMemoryProducer(
                       mockDiskSpaceManager.Object,
                       mockConfigReaderFactory.Object,
                       traceFileEventReaderFactory,
                       mockTraceEventSourceFactory.Object,
                       producerInitParam));
        }
        private static void CreateEtlInMemoryProducerWithAzureBlobConsumer(
            string logDirectory,
            ITraceFileEventReaderFactory traceFileEventReaderFactory,
            out EtlInMemoryProducer etlInMemoryProducer,
            out string containerName,
            out StorageAccountFactory storageAccountFactory,
            AccessCondition uploadStreamAccessCondition = null,
            AccessCondition uploadFileAccessCondition   = null)
        {
            var mockDiskSpaceManager        = TestUtility.MockRepository.Create <DiskSpaceManager>();
            var etlInMemoryProducerSettings = new EtlInMemoryProducerSettings(
                true,
                TimeSpan.FromSeconds(1),
                TimeSpan.FromDays(3000),
                WinFabricEtlType.DefaultEtl,
                logDirectory,
                TestEtlFilePatterns,
                true);

            var configReader = TestUtility.MockRepository.Create <IEtlInMemoryProducerConfigReader>();

            configReader.Setup(c => c.GetSettings()).Returns(etlInMemoryProducerSettings);

            var mockTraceEventSourceFactory = TestUtility.MockRepository.Create <ITraceEventSourceFactory>();

            mockTraceEventSourceFactory
            .Setup(tsf => tsf.CreateTraceEventSource(It.IsAny <EventTask>()))
            .Returns(new ErrorAndWarningFreeTraceEventSource());

            var configStore = TestUtility.MockRepository.Create <IConfigStore>();

            configStore
            .Setup(cs => cs.ReadUnencryptedString("Diagnostics", "MaxDiskQuotaInMB"))
            .Returns("100");
            configStore
            .Setup(cs => cs.ReadUnencryptedString("Diagnostics", "DiskFullSafetySpaceInMB"))
            .Returns("0");
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, AzureConstants.EnabledParamName))
            .Returns("true");

            containerName = string.Format("{0}-{1}", "fabriclogs", Guid.NewGuid());
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, AzureConstants.ContainerParamName))
            .Returns(containerName);

            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, AzureConstants.FileSyncIntervalParamName))
            .Returns("0.25");
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, AzureConstants.DataDeletionAgeParamName))
            .Returns("1");
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, AzureConstants.TestDataDeletionAgeParamName))
            .Returns("0");
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, AzureConstants.LogFilterParamName))
            .Returns("*.*:4");
            configStore
            .Setup(cs => cs.ReadUnencryptedString(TestConfigSectionName, AzureConstants.DeploymentId))
            .Returns(AzureConstants.DefaultDeploymentId);

            var accountKey              = GetTestStorageAccountKey();
            var isEncrypted             = false;
            var storageConnectionString = string.Format(@"xstore:DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", AccountName, accountKey);

            configStore
            .Setup(cs => cs.ReadString(TestConfigSectionName, AzureConstants.ConnectionStringParamName, out isEncrypted))
            .Returns(storageConnectionString);

            Utility.InitializeConfigStore(configStore.Object);

            var mockConfigReaderFactory = TestUtility.MockRepository.Create <IEtlInMemoryProducerConfigReaderFactory>();

            mockConfigReaderFactory.Setup(f => f.CreateEtlInMemoryProducerConfigReader(It.IsAny <FabricEvents.ExtensionsEvents>(), It.IsAny <string>()))
            .Returns(configReader.Object);

            // Create the Azure Blob Uploader consumer
            ConfigReader.AddAppConfig(Utility.WindowsFabricApplicationInstanceId, null);
            var consumerInitParam = new ConsumerInitializationParameters(
                Utility.WindowsFabricApplicationInstanceId,
                TestConfigSectionName,
                TestFabricNodeId,
                TestFabricNodeName,
                Utility.LogDirectory,
                Utility.DcaWorkFolder,
                new DiskSpaceManager());

            // Save storage connection for clean up
            var azureUtility = new AzureUtility(new FabricEvents.ExtensionsEvents(FabricEvents.Tasks.FabricDCA), TraceType);

            storageAccountFactory = azureUtility.GetStorageAccountFactory(
                new ConfigReader(consumerInitParam.ApplicationInstanceId),
                TestConfigSectionName,
                AzureConstants.ConnectionStringParamName);

            var azureBlobConsumer         = new AzureBlobEtwUploader(consumerInitParam, uploadStreamAccessCondition, uploadFileAccessCondition);
            var etlToInMemoryBufferWriter = azureBlobConsumer.GetDataSink();

            var producerInitParam = new ProducerInitializationParameters
            {
                ConsumerSinks = new[] { etlToInMemoryBufferWriter }
            };

            // Create the in-memory producer
            etlInMemoryProducer = new EtlInMemoryProducer(
                mockDiskSpaceManager.Object,
                mockConfigReaderFactory.Object,
                traceFileEventReaderFactory,
                mockTraceEventSourceFactory.Object,
                producerInitParam);
        }