public void Initialize(ITelemetry telemetry) { IK8sEnvironment k8sEnv = _k8sEnvironment; if (k8sEnv != null) { _logger.LogTrace("Application Insights for Kubernetes telemetry initializer is invoked.", k8sEnv.PodName); try { InitializeTelemetry(telemetry, k8sEnv); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { _logger.LogError(ex.ToString()); } #pragma warning restore CA1031 // Do not catch general exception types } else { _logger.LogTrace("Application Insights for Kubernetes telemetry initializer is used but the content has not ready yet."); if (_isK8sQueryTimeout) { if (!_isK8sQueryTimeoutReported) { _isK8sQueryTimeoutReported = true; _logger.LogError("Query Kubernetes Environment timeout."); } } } telemetry.Context.GetInternalContext().SdkVersion = _sdkVersionUtils.CurrentSDKVersion; }
public KubernetesTelemetryInitializer( IK8sEnvironment k8sEnv, ILogger <KubernetesTelemetryInitializer> logger) { _logger = logger; this.K8sEnvironment = Arguments.IsNotNull(k8sEnv, nameof(k8sEnv)); }
#pragma warning disable CA2222 // Do not decrease inherited member visibility internal KubernetesTelemetryInitializer( #pragma warning restore CA2222 // Do not decrease inherited member visibility ILoggerFactory loggerFactory, IK8sEnvironment env) { this.logger = loggerFactory?.CreateLogger <KubernetesTelemetryInitializer>(); this.K8sEnvironment = env ?? Kubernetes.K8sEnvironment.CreateAsync( TimeSpan.FromMinutes(2), loggerFactory).ConfigureAwait(false).GetAwaiter().GetResult(); }
public void Initialize(ITelemetry telemetry) { IK8sEnvironment k8sEnv = _k8sEnvironment; if (k8sEnv != null) { _logger.LogTrace("Application Insights for Kubernetes telemetry initializer is invoked.", k8sEnv.PodName); try { #if NETSTANDARD2_0 Stopwatch cpuWatch = Stopwatch.StartNew(); TimeSpan startCPUTime = Process.GetCurrentProcess().TotalProcessorTime; #endif // Setting the container name to role name if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName)) { telemetry.Context.Cloud.RoleName = k8sEnv.ContainerName; } if (telemetry is ISupportProperties propertySetter) { #if NETSTANDARD2_0 SetCustomDimensions(propertySetter, cpuWatch, startCPUTime); #else SetCustomDimensions(propertySetter); #endif } else { _logger.LogTrace("This telemetry object doesn't implement ISupportProperties."); } _logger.LogTrace("Finish telemetry initializer."); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { _logger.LogError(ex.ToString()); } #pragma warning restore CA1031 // Do not catch general exception types } else { _logger.LogTrace("Application Insights for Kubernetes telemetry initializer is used but the content has not ready yet."); if (_isK8sQueryTimeout) { if (!_isK8sQueryTimeoutReported) { _isK8sQueryTimeoutReported = true; _logger.LogError("Query Kubernetes Environment timeout."); } } } telemetry.Context.GetInternalContext().SdkVersion = _sdkVersionUtils.CurrentSDKVersion; }
public KubernetesTelemetryInitializer( IK8sEnvironmentFactory k8sEnvFactory, TimeSpan timeout, SDKVersionUtils sdkVersionUtils, ILogger <KubernetesTelemetryInitializer> logger) { _k8sEnvironment = null; _logger = logger; _sdkVersionUtils = Arguments.IsNotNull(sdkVersionUtils, nameof(sdkVersionUtils)); _timeoutAt = DateTime.Now.Add(Arguments.IsNotNull(timeout, nameof(timeout))); _k8sEnvFactory = Arguments.IsNotNull(k8sEnvFactory, nameof(k8sEnvFactory)); var _forget = SetK8sEnvironment(); }
private async Task SetK8sEnvironment() { Task <IK8sEnvironment> createK8sEnvTask = _k8sEnvFactory.CreateAsync(_timeoutAt); await Task.WhenAny( createK8sEnvTask, Task.Delay(_timeoutAt - DateTime.Now)).ConfigureAwait(false); if (createK8sEnvTask.IsCompleted) { _k8sEnvironment = createK8sEnvTask.Result; } else { _isK8sQueryTimeout = true; _k8sEnvironment = null; } }
private void InitializeTelemetry(ITelemetry telemetry, IK8sEnvironment k8sEnv) { // Setting the container name to role name if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName)) { telemetry.Context.Cloud.RoleName = k8sEnv.ContainerName; } if (telemetry is ISupportProperties propertySetter) { SetCustomDimensions(propertySetter); } else { _logger.LogTrace("This telemetry object doesn't implement ISupportProperties."); } _logger.LogTrace("Finish telemetry initializer."); }
private async Task SetK8sEnvironment() { Task <IK8sEnvironment> createK8sEnvTask = _k8sEnvFactory.CreateAsync(_timeoutAt); await Task.WhenAny( createK8sEnvTask, Task.Delay(_timeoutAt - DateTime.Now)).ConfigureAwait(false); if (createK8sEnvTask.IsCompleted) { _logger.LogDebug("Application Insights for Kubernetes environment initialized."); _k8sEnvironment = createK8sEnvTask.Result; } else { _isK8sQueryTimeout = true; _k8sEnvironment = null; _logger.LogError("Application Insights for Kubernetes environment initialization timed out."); } }
public KubernetesTelemetryInitializer( IK8sEnvironmentFactory k8sEnvFactory, IOptions <AppInsightsForKubernetesOptions> options, SDKVersionUtils sdkVersionUtils, ITelemetryKeyCache telemetryKeyCache) { _k8sEnvironment = null; // Options can't be null. Debug.Assert(options != null, "Options can't be null."); _options = Arguments.IsNotNull(options?.Value, nameof(options)); _logger.LogDebug(@"Initialize Application Insights for Kubernetes telemetry initializer with Options: {0}", JsonConvert.SerializeObject(_options)); _telemetryKeyCache = telemetryKeyCache ?? throw new ArgumentNullException(nameof(telemetryKeyCache)); _sdkVersionUtils = Arguments.IsNotNull(sdkVersionUtils, nameof(sdkVersionUtils)); _timeoutAt = DateTime.Now.Add(_options.InitializationTimeout); _k8sEnvFactory = Arguments.IsNotNull(k8sEnvFactory, nameof(k8sEnvFactory)); _ = SetK8sEnvironment(); }