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); }
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); }
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); } }
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)); } }
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); }