internal async Task SetSiloStatsTableDataManager(Silo silo, NodeConfiguration nodeConfig) { bool useAzureTable; bool useExternalStatsProvider = ShouldUseExternalMetricsProvider(silo, nodeConfig, out useAzureTable); if (!nodeConfig.StatisticsWriteLogStatisticsToTable) { return; // No stats } if (useExternalStatsProvider) { var extType = nodeConfig.StatisticsProviderName; var statsProvider = silo.StatisticsProviderManager.GetProvider(extType); var statsDataPublisher = statsProvider as IStatisticsPublisher; if (statsDataPublisher == null) { var msg = String.Format("Trying to create {0} as a silo statistics publisher, but the provider is not available." + " Expected type = {1} Actual type = {2}", extType, typeof(IStatisticsPublisher), statsProvider.GetType()); throw new InvalidOperationException(msg); } var configurableStatsDataPublisher = statsDataPublisher as IConfigurableStatisticsPublisher; if (configurableStatsDataPublisher != null) { var gateway = nodeConfig.IsGatewayNode ? nodeConfig.ProxyGatewayEndpoint : null; configurableStatsDataPublisher.AddConfiguration( silo.GlobalConfig.DeploymentId, true, silo.Name, silo.SiloAddress, gateway, nodeConfig.DNSHostName); } logStatistics.StatsTablePublisher = statsDataPublisher; } else if (useAzureTable) { var statsDataPublisher = await StatsTableDataManager.GetManager(true, silo.GlobalConfig.DataConnectionString, silo.GlobalConfig.DeploymentId, silo.SiloAddress.ToLongString(), silo.Name, nodeConfig.DNSHostName); logStatistics.StatsTablePublisher = statsDataPublisher; } // else no stats }
internal async Task Start(ClientConfiguration config, StatisticsProviderManager statsManager, IMessageCenter transport, Guid clientId) { MessagingStatisticsGroup.Init(false); NetworkingStatisticsGroup.Init(false); ApplicationRequestsStatisticsGroup.Init(config.ResponseTimeout); runtimeStats.Start(); // Configure Metrics IProvider statsProvider = null; if (!string.IsNullOrEmpty(config.StatisticsProviderName)) { var extType = config.StatisticsProviderName; statsProvider = statsManager.GetProvider(extType); var metricsDataPublisher = statsProvider as IClientMetricsDataPublisher; if (metricsDataPublisher == null) { var msg = String.Format("Trying to create {0} as a metrics publisher, but the provider is not configured." , extType); throw new ArgumentException(msg, "ProviderType (configuration)"); } var configurableMetricsDataPublisher = metricsDataPublisher as IConfigurableClientMetricsDataPublisher; if (configurableMetricsDataPublisher != null) { configurableMetricsDataPublisher.AddConfiguration( config.DeploymentId, config.DNSHostName, clientId.ToString(), transport.MyAddress.Endpoint.Address); } tableStatistics = new ClientTableStatistics(transport, metricsDataPublisher, runtimeStats) { MetricsTableWriteInterval = config.StatisticsMetricsTableWriteInterval }; } else if (config.UseAzureSystemStore) { // Hook up to publish client metrics to Azure storage table var publisher = await ClientMetricsTableDataManager.GetManager(config, transport.MyAddress.Endpoint.Address, clientId); tableStatistics = new ClientTableStatistics(transport, publisher, runtimeStats) { MetricsTableWriteInterval = config.StatisticsMetricsTableWriteInterval }; } // Configure Statistics if (config.StatisticsWriteLogStatisticsToTable) { if (statsProvider != null) { logStatistics.StatsTablePublisher = statsProvider as IStatisticsPublisher; // Note: Provider has already been Init-ialized above. } else if (config.UseAzureSystemStore) { var statsDataPublisher = await StatsTableDataManager.GetManager(false, config.DataConnectionString, config.DeploymentId, transport.MyAddress.Endpoint.ToString(), clientId.ToString(), config.DNSHostName); logStatistics.StatsTablePublisher = statsDataPublisher; } } logStatistics.Start(); }