Exemple #1
0
        /// <summary>
        /// Injects Kubernetes related service into the service collection.
        /// </summary>
        /// <param name="serviceCollection">The service collector to inject the services into.</param>
        /// <param name="timeout">Maximum time to wait for spinning up the container.</param>
        /// <returns>Returns the service collector with services injected.</returns>
        public IServiceCollection InjectServices(IServiceCollection serviceCollection, TimeSpan timeout)
        {
            if (_isRunningInKubernetes())
            {
                IServiceCollection services = serviceCollection ?? new ServiceCollection();
                InjectCommonServices(services);

                InjectChangableServices(services);

                // Inject the telemetry initializer.
                services.AddSingleton <ITelemetryInitializer>(provider =>
                {
                    KubernetesTelemetryInitializer initializer = new KubernetesTelemetryInitializer(
                        provider.GetRequiredService <IK8sEnvironmentFactory>(),
                        timeout,
                        SDKVersionUtils.Instance,
                        provider.GetRequiredService <ILogger <KubernetesTelemetryInitializer> >()
                        );
                    _logger.LogDebug("Application Insights Kubernetes injected the service successfully.");
                    return(initializer);
                });
                return(services);
            }
            else
            {
                _logger.LogWarning("Application is not running inside a Kubernetes cluster.");
                return(serviceCollection);
            }
        }
Exemple #2
0
        /// <summary>
        /// Gets the KubernetesTelemetryInitializer from the service collection and adds it into a TelemetryConfiguration instance.
        /// </summary>
        private static void AddKubernetesTelemetryInitializer(this TelemetryConfiguration telemetryConfiguration, IServiceCollection serviceCollection)
        {
            KubernetesTelemetryInitializer kubernetesTelemetryInitializer = null;

            if (KubernetesTelemetryInitializerExists(serviceCollection))
            {
                IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
                kubernetesTelemetryInitializer = serviceProvider.GetServices <ITelemetryInitializer>()
                                                 .FirstOrDefault(ti => ti.GetType() == typeof(KubernetesTelemetryInitializer)) as KubernetesTelemetryInitializer;
                telemetryConfiguration.TelemetryInitializers.Add(kubernetesTelemetryInitializer);
                _logger.LogTrace("KubernetesTelemetryInitializer has been injected into telemetry configuration #{0}.", telemetryConfiguration.GetHashCode());
                _logger.LogInformation("KubernetesTelemetryInitializer is injected.");
            }
            else
            {
                _logger.LogError("No KubernetesTelemetryInitializer to append to TelemetryConfiguration.");
            }
        }