internal AgentComponents( IApmLogger logger, IConfigurationReader configurationReader, IPayloadSender payloadSender, IMetricsCollector metricsCollector, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer, ICentralConfigFetcher centralConfigFetcher ) { var tempLogger = logger ?? ConsoleLogger.LoggerOrDefault(configurationReader?.LogLevel); ConfigurationReader = configurationReader ?? new EnvironmentConfigurationReader(tempLogger); Logger = logger ?? ConsoleLogger.LoggerOrDefault(ConfigurationReader.LogLevel); Service = Service.GetDefaultService(ConfigurationReader, Logger); var systemInfoHelper = new SystemInfoHelper(Logger); var system = systemInfoHelper.ParseSystemInfo(); ConfigStore = new ConfigStore(new ConfigSnapshotFromReader(ConfigurationReader, "local"), Logger); PayloadSender = payloadSender ?? new PayloadSenderV2(Logger, ConfigStore.CurrentSnapshot, Service, system); MetricsCollector = metricsCollector ?? new MetricsCollector(Logger, PayloadSender, ConfigurationReader); MetricsCollector.StartCollecting(); CentralConfigFetcher = centralConfigFetcher ?? new CentralConfigFetcher(Logger, ConfigStore, Service); TracerInternal = new Tracer(Logger, Service, PayloadSender, ConfigStore, currentExecutionSegmentsContainer ?? new CurrentExecutionSegmentsContainer()); }
public Span( string name, string type, string parentId, string traceId, Transaction enclosingTransaction, bool isSampled, IPayloadSender payloadSender, IApmLogger logger ) { _start = DateTimeOffset.UtcNow; _payloadSender = payloadSender; _enclosingTransaction = enclosingTransaction; _logger = logger?.Scoped(nameof(Span)); Name = name; Type = type; IsSampled = isSampled; Id = RandomGenerator.GenerateRandomBytesAsString(new byte[8]); ParentId = parentId; TraceId = traceId; if (IsSampled) { // Started spans should be counted only for sampled transactions enclosingTransaction.SpanCount.Started++; // Spans are sent only for sampled transactions so it's only worth capturing stack trace for sampled spans StackTrace = StacktraceHelper.GenerateApmStackTrace(new StackTrace(true).GetFrames(), _logger, $"Span `{Name}'"); } }
public Span( string name, string type, string parentId, string traceId, Transaction enclosingTransaction, bool isSampled, IPayloadSender payloadSender, IApmLogger logger ) { _start = DateTimeOffset.UtcNow; _payloadSender = payloadSender; _enclosingTransaction = enclosingTransaction; _logger = logger?.Scoped(nameof(Span)); Name = name; Type = type; IsSampled = isSampled; Id = RandomGenerator.GenerateRandomBytesAsString(new byte[8]); ParentId = parentId; TraceId = traceId; // Started spans should be counted only for sampled transactions if (IsSampled) { enclosingTransaction.SpanCount.Started++; } }
public MetricsCollector(IApmLogger logger, IPayloadSender payloadSender, IConfigurationReader configurationReader) { _logger = logger.Scoped(nameof(MetricsCollector)); _payloadSender = payloadSender; var interval = configurationReader.MetricsIntervalInMilliseconds; // ReSharper disable once CompareOfFloatsByEqualityOperator if (interval == 0) { _logger.Info()?.Log("Collecting metrics is disabled - the agent won't collect metrics"); return; } MetricsProviders = new List <IMetricsProvider> { new FreeAndTotalMemoryProvider(), new ProcessWorkingSetAndVirtualMemoryProvider(), new SystemTotalCpuProvider(_logger), new ProcessTotalCpuTimeProvider(_logger) }; _logger.Info()?.Log("Collecting metrics in {interval} milliseconds interval", interval); _timer = new Timer(interval); _timer.Elapsed += (sender, args) => { CollectAllMetrics(); }; }
public TestAgentComponents( TestAgentConfigurationReader reader, Service service = null, IPayloadSender payloadSender = null ) : base(reader.Logger, reader, service, payloadSender ?? new MockPayloadSender()) { }
public Transaction(IApmLogger logger, string name, string type, IPayloadSender sender, string traceId = null, string parentId = null) { _logger = logger?.Scoped(nameof(Transaction)); _sender = sender; _start = DateTimeOffset.UtcNow; Name = name; Type = type; var idBytes = new byte[8]; Id = RandomGenerator.GetRandomBytesAsString(idBytes); if (traceId == null) { idBytes = new byte[16]; TraceId = RandomGenerator.GetRandomBytesAsString(idBytes); } else { TraceId = traceId; } ParentId = parentId; SpanCount = new SpanCount(); }
public MetricsCollector(IApmLogger logger, IPayloadSender payloadSender, IConfigSnapshotProvider configSnapshotProvider, params IMetricsProvider[] metricsProvider ) { _logger = logger.Scoped(nameof(MetricsCollector)); _payloadSender = payloadSender; _configSnapshotProvider = configSnapshotProvider; var currentConfigSnapshot = configSnapshotProvider.CurrentSnapshot; var interval = currentConfigSnapshot.MetricsIntervalInMilliseconds; // ReSharper disable once CompareOfFloatsByEqualityOperator if (interval == 0) { _logger.Info()?.Log("Collecting metrics is disabled - the agent won't collect metrics"); return; } MetricsProviders = new List <IMetricsProvider>(); var disabledMetrics = configSnapshotProvider.CurrentSnapshot.DisableMetrics; if (metricsProvider != null) { foreach (var item in metricsProvider) { if (item != null) { AddIfEnabled(item); } } } AddIfEnabled(new ProcessTotalCpuTimeProvider(_logger)); AddIfEnabled(new SystemTotalCpuProvider(_logger)); AddIfEnabled(new ProcessWorkingSetAndVirtualMemoryProvider(disabledMetrics)); AddIfEnabled(new FreeAndTotalMemoryProvider(disabledMetrics)); try { // We saw some Exceptions in GcMetricsProvider.ctor, so we try-catch it AddIfEnabled(new GcMetricsProvider(_logger, disabledMetrics)); } catch (Exception e) { _logger.Warning()?.LogException(e, "Failed loading {ProviderName}", nameof(GcMetricsProvider)); } AddIfEnabled(new CgroupMetricsProvider(_logger, disabledMetrics)); _logger.Info()?.Log("Collecting metrics in {interval} milliseconds interval", interval); _timer = new Timer(interval); _timer.Elapsed += (sender, args) => { CollectAllMetrics(); }; void AddIfEnabled(IMetricsProvider provider) { if (provider.IsEnabled(disabledMetrics)) { MetricsProviders.Add(provider); } } }
internal AgentComponents( IMetricsCollector metricsCollector, IApmLogger logger = null, IConfigurationReader configurationReader = null, IPayloadSender payloadSender = null ) : this(logger, configurationReader, payloadSender) => (MetricsCollector = metricsCollector ?? new MetricsCollector(Logger, PayloadSender, ConfigurationReader)).StartCollecting();
public Tracer(IApmLogger logger, Service service, IPayloadSender payloadSender, IConfigurationReader configurationReader) { _logger = logger?.Scoped(nameof(Tracer)); _service = service; _sender = payloadSender; Sampler = new Sampler(configurationReader.TransactionSampleRate); }
public AgentComponents( IApmLogger logger = null, IConfigurationReader configurationReader = null, IPayloadSender payloadSender = null ) : this(logger, configurationReader, payloadSender, null, null, null, null) { }
internal AgentComponents( IApmLogger logger, IConfigurationReader configurationReader, IPayloadSender payloadSender, IMetricsCollector metricsCollector, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer ) { var tempLogger = logger ?? ConsoleLogger.LoggerOrDefault(configurationReader?.LogLevel); ConfigurationReader = configurationReader ?? new EnvironmentConfigurationReader(tempLogger); Logger = logger ?? ConsoleLogger.LoggerOrDefault(ConfigurationReader.LogLevel); Service = Service.GetDefaultService(ConfigurationReader, Logger); var systemInfoHelper = new SystemInfoHelper(Logger); var system = systemInfoHelper.ReadContainerId(Logger); PayloadSender = payloadSender ?? new PayloadSenderV2(Logger, ConfigurationReader, Service, system); MetricsCollector = metricsCollector ?? new MetricsCollector(Logger, PayloadSender, ConfigurationReader); MetricsCollector.StartCollecting(); TracerInternal = new Tracer(Logger, Service, PayloadSender, ConfigurationReader, currentExecutionSegmentsContainer ?? new CurrentExecutionSegmentsContainer(Logger)); }
public AsyncQueueDispatcher(IPayloadSender payloadSender, IInternalLogger logger = null) { _payloadSender = payloadSender ?? throw new ArgumentNullException(nameof(payloadSender)); _logger = logger; _queue = new ConcurrentQueue <IPayload>(); _cancellationTokenSource = new CancellationTokenSource(); _eventSlim = new ManualResetEventSlim(false, spinCount: 1); }
internal Transaction( IApmLogger logger, string name, string type, Sampler sampler, DistributedTracingData distributedTracingData, IPayloadSender sender, IConfigurationReader configurationReader ) { Timestamp = TimeUtils.TimestampNow(); var idBytes = new byte[8]; Id = RandomGenerator.GenerateRandomBytesAsString(idBytes); _logger = logger?.Scoped($"{nameof(Transaction)}.{Id}"); _sender = sender; _configurationReader = configurationReader; Name = name; HasCustomName = false; Type = type; var isSamplingFromDistributedTracingData = false; if (distributedTracingData == null) { var traceIdBytes = new byte[16]; TraceId = RandomGenerator.GenerateRandomBytesAsString(traceIdBytes); IsSampled = sampler.DecideIfToSample(idBytes); } else { TraceId = distributedTracingData.TraceId; ParentId = distributedTracingData.ParentId; IsSampled = distributedTracingData.FlagRecorded; isSamplingFromDistributedTracingData = true; } SpanCount = new SpanCount(); if (isSamplingFromDistributedTracingData) { _logger.Trace() ?.Log("New Transaction instance created: {Transaction}. " + "IsSampled ({IsSampled}) is based on incoming distributed tracing data ({DistributedTracingData})." + " Start time: {Time} (as timestamp: {Timestamp})", this, IsSampled, distributedTracingData, TimeUtils.FormatTimestampForLog(Timestamp), Timestamp); } else { _logger.Trace() ?.Log("New Transaction instance created: {Transaction}. " + "IsSampled ({IsSampled}) is based on the given sampler ({Sampler})." + " Start time: {Time} (as timestamp: {Timestamp})", this, IsSampled, sampler, TimeUtils.FormatTimestampForLog(Timestamp), Timestamp); } }
public Transaction(AbstractLogger logger, string name, string type, IPayloadSender sender) { _logger = logger; _sender = sender; Start = DateTimeOffset.UtcNow; Name = name; Type = type; Id = Guid.NewGuid(); }
public TestAgentComponents(AbstractLogger logger, string serverUrls = null, Service service = null, IPayloadSender payloadSender = null ) : this(new TestAgentConfigurationReader(logger, logLevel : logger.LogLevel.ToString(), serverUrls : serverUrls ), service, payloadSender) { }
public Transaction(IApmLogger logger, string name, string type, IPayloadSender sender) { _logger = logger?.Scoped(nameof(Transaction)); _sender = sender; Start = DateTimeOffset.UtcNow; Name = name; Type = type; Id = Guid.NewGuid(); }
public Span( string name, string type, string parentId, string traceId, Transaction enclosingTransaction, IPayloadSender payloadSender, IApmLogger logger, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer, Span parentSpan = null, InstrumentationFlag instrumentationFlag = InstrumentationFlag.None, bool captureStackTraceOnStart = false ) { InstrumentationFlag = instrumentationFlag; Timestamp = TimeUtils.TimestampNow(); Id = RandomGenerator.GenerateRandomBytesAsString(new byte[8]); _logger = logger?.Scoped($"{nameof(Span)}.{Id}"); _payloadSender = payloadSender; _currentExecutionSegmentsContainer = currentExecutionSegmentsContainer; _parentSpan = parentSpan; _enclosingTransaction = enclosingTransaction; Name = name; Type = type; ParentId = parentId; TraceId = traceId; if (IsSampled) { // Started and dropped spans should be counted only for sampled transactions if (enclosingTransaction.SpanCount.IncrementTotal() > ConfigSnapshot.TransactionMaxSpans && ConfigSnapshot.TransactionMaxSpans >= 0) { _isDropped = true; enclosingTransaction.SpanCount.IncrementDropped(); } else { enclosingTransaction.SpanCount.IncrementStarted(); if (captureStackTraceOnStart) { _stackFrames = new EnhancedStackTrace(new StackTrace(true)).GetFrames(); } } } _currentExecutionSegmentsContainer.CurrentSpan = this; _logger.Trace() ?.Log("New Span instance created: {Span}. Start time: {Time} (as timestamp: {Timestamp}). Parent span: {Span}", this, TimeUtils.FormatTimestampForLog(Timestamp), Timestamp, _parentSpan); }
public AgentComponents( AbstractLogger logger = null, IConfigurationReader configurationReader = null, Service service = null, IPayloadSender payloadSender = null) { Logger = logger ?? ConsoleLogger.Instance; ConfigurationReader = configurationReader ?? new EnvironmentConfigurationReader(Logger); Service = service ?? Service.GetDefaultService(ConfigurationReader); PayloadSender = payloadSender ?? new PayloadSender(Logger, ConfigurationReader); Tracer = new Tracer(Logger, Service, PayloadSender); }
internal AgentComponents( IApmLogger logger, IConfigurationReader configurationReader, IPayloadSender payloadSender, IMetricsCollector metricsCollector, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer, ICentralConfigFetcher centralConfigFetcher, IApmServerInfo apmServerInfo, BreakdownMetricsProvider breakdownMetricsProvider = null ) { try { var tempLogger = logger ?? ConsoleLogger.LoggerOrDefault(configurationReader?.LogLevel); ConfigurationReader = configurationReader ?? new EnvironmentConfigurationReader(tempLogger); Logger = logger ?? ConsoleLogger.LoggerOrDefault(ConfigurationReader.LogLevel); Service = Service.GetDefaultService(ConfigurationReader, Logger); var systemInfoHelper = new SystemInfoHelper(Logger); var system = systemInfoHelper.ParseSystemInfo(ConfigurationReader.HostName); ConfigStore = new ConfigStore(new ConfigSnapshotFromReader(ConfigurationReader, "local"), Logger); ApmServerInfo = apmServerInfo ?? new ApmServerInfo(); PayloadSender = payloadSender ?? new PayloadSenderV2(Logger, ConfigStore.CurrentSnapshot, Service, system, ApmServerInfo, isEnabled: ConfigurationReader.Enabled); HttpTraceConfiguration = new HttpTraceConfiguration(); if (ConfigurationReader.Enabled) { breakdownMetricsProvider ??= new BreakdownMetricsProvider(Logger); CentralConfigFetcher = centralConfigFetcher ?? new CentralConfigFetcher(Logger, ConfigStore, Service); MetricsCollector = metricsCollector ?? new MetricsCollector(Logger, PayloadSender, ConfigStore, breakdownMetricsProvider); MetricsCollector.StartCollecting(); } else { Logger.Info()?.Log("The Elastic APM .NET Agent is disabled - the agent won't capture traces and metrics."); } TracerInternal = new Tracer(Logger, Service, PayloadSender, ConfigStore, currentExecutionSegmentsContainer ?? new CurrentExecutionSegmentsContainer(), ApmServerInfo, breakdownMetricsProvider); } catch (Exception e) { Logger.Error()?.LogException(e, "Failed initializing agent."); } }
public TestAgentComponents( string logLevel = "Debug", string serverUrls = null, Service service = null, IPayloadSender payloadSender = null ) : this(new TestAgentConfigurationReader( new TestLogger(AbstractConfigurationReader.ParseLogLevel(logLevel)), logLevel : logLevel, serverUrls : serverUrls ), service, payloadSender) { }
public Span(string name, string type, Transaction transaction, IPayloadSender payloadSender, IApmLogger logger) { _start = DateTimeOffset.UtcNow; _payloadSender = payloadSender; _logger = logger?.Scoped(nameof(Span)); Name = name; Type = type; Id = RandomGenerator.GetRandomBytesAsString(new byte[8]); ParentId = transaction.Id; TransactionId = transaction.Id; TraceId = transaction.TraceId; }
public TestAgentComponents( IApmLogger logger = null, TestAgentConfigurationReader configurationReader = null, IPayloadSender payloadSender = null, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer = null ) : base( logger ?? new NoopLogger(), configurationReader ?? new TestAgentConfigurationReader(logger ?? new NoopLogger()), payloadSender ?? new MockPayloadSender(), new FakeMetricsCollector(), currentExecutionSegmentsContainer) { }
internal Transaction( IApmLogger logger, string name, string type, Sampler sampler, DistributedTracingData distributedTracingData, IPayloadSender sender ) { _logger = logger?.Scoped(nameof(Transaction)); _sender = sender; _start = DateTimeOffset.UtcNow; Name = name; HasCustomName = false; Type = type; var idBytes = new byte[8]; Id = RandomGenerator.GenerateRandomBytesAsString(idBytes); var isSamplingFromDistributedTracingData = false; if (distributedTracingData == null) { var traceIdBytes = new byte[16]; TraceId = RandomGenerator.GenerateRandomBytesAsString(traceIdBytes); IsSampled = sampler.DecideIfToSample(idBytes); } else { TraceId = distributedTracingData.TraceId; ParentId = distributedTracingData.ParentId; IsSampled = distributedTracingData.FlagRecorded; isSamplingFromDistributedTracingData = true; } SpanCount = new SpanCount(); if (isSamplingFromDistributedTracingData) { _logger.Trace()?.Log("New Transaction instance created: {Transaction}. " + "IsSampled ({IsSampled}) is based on incoming distributed tracing data ({DistributedTracingData})", this, IsSampled, distributedTracingData); } else { _logger.Trace()?.Log("New Transaction instance created: {Transaction}. " + "IsSampled ({IsSampled}) is based on the given sampler ({Sampler})", this, IsSampled, sampler); } }
public ProtocolAdapter(RequestHandler requestHandler, IRequestManager requestManager, IPayloadSender payloadSender, IPayloadReceiver payloadReceiver, object handlerContext = null) { _requestHandler = requestHandler; _handlerContext = handlerContext; _requestManager = requestManager; _payloadSender = payloadSender; _payloadReceiver = payloadReceiver; _sendOperations = new SendOperations(_payloadSender); _streamManager = new StreamManager(OnCancelStream); _assemblerManager = new PayloadAssemblerManager(_streamManager, OnReceiveRequestAsync, OnReceiveResponseAsync); _payloadReceiver.Subscribe(_assemblerManager.GetPayloadStream, _assemblerManager.OnReceive); }
public Tracer( IApmLogger logger, Service service, IPayloadSender payloadSender, IConfigSnapshotProvider configProvider, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer ) { _logger = logger?.Scoped(nameof(Tracer)); _service = service; _sender = payloadSender.ThrowIfArgumentNull(nameof(payloadSender)); _configProvider = configProvider.ThrowIfArgumentNull(nameof(configProvider)); CurrentExecutionSegmentsContainer = currentExecutionSegmentsContainer.ThrowIfArgumentNull(nameof(currentExecutionSegmentsContainer)); }
public AgentComponents( IApmLogger logger = null, IConfigurationReader configurationReader = null, IPayloadSender payloadSender = null ) { Logger = logger ?? ConsoleLogger.LoggerOrDefault(configurationReader?.LogLevel); ConfigurationReader = configurationReader ?? new EnvironmentConfigurationReader(Logger); Service = Service.GetDefaultService(ConfigurationReader); PayloadSender = payloadSender ?? new PayloadSenderV2(Logger, ConfigurationReader, Service); TracerInternal = new Tracer(Logger, Service, PayloadSender, ConfigurationReader); TransactionContainer = new TransactionContainer(); }
public Tracer( IApmLogger logger, Service service, IPayloadSender payloadSender, IConfigurationReader configurationReader, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer ) { _logger = logger?.Scoped(nameof(Tracer)); _service = service; _sender = payloadSender.ThrowIfArgumentNull(nameof(payloadSender)); _configurationReader = configurationReader.ThrowIfArgumentNull(nameof(configurationReader)); Sampler = new Sampler(configurationReader.TransactionSampleRate); CurrentExecutionSegmentsContainer = currentExecutionSegmentsContainer.ThrowIfArgumentNull(nameof(currentExecutionSegmentsContainer)); }
public TestAgentComponents( IApmLogger logger = null, IConfigSnapshot config = null, IPayloadSender payloadSender = null, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer = null, ICentralConfigFetcher centralConfigFetcher = null ) : base( logger ?? new NoopLogger(), config ?? new MockConfigSnapshot(logger ?? new NoopLogger()), payloadSender ?? new MockPayloadSender(), new FakeMetricsCollector(), currentExecutionSegmentsContainer, centralConfigFetcher ?? new NoopCentralConfigFetcher() ) { }
/// <summary> /// Initializes a new instance of the <see cref="WebSocketServer"/> class. /// Throws <see cref="ArgumentNullException"/> on null arguments. /// </summary> /// <param name="socket">The <see cref="WebSocket"/> of the underlying connection for this server to be built on top of.</param> /// <param name="requestHandler">A <see cref="RequestHandler"/> to process incoming messages received by this server.</param> public WebSocketServer(WebSocket socket, RequestHandler requestHandler) { if (socket == null) { throw new ArgumentNullException(nameof(socket)); } _websocketTransport = new WebSocketTransport(socket); _requestHandler = requestHandler ?? throw new ArgumentNullException(nameof(requestHandler)); _requestManager = new RequestManager(); _sender = new PayloadSender(); _sender.Disconnected += OnConnectionDisconnected; _receiver = new PayloadReceiver(); _receiver.Disconnected += OnConnectionDisconnected; _protocolAdapter = new ProtocolAdapter(_requestHandler, _requestManager, _sender, _receiver); }
public TestAgentComponents( string logLevel = "Debug", string serverUrls = null, string secretToken = null, string captureHeaders = null, IPayloadSender payloadSender = null ) : this(new TestAgentConfigurationReader( new TestLogger(ParseWithoutLogging(logLevel)), serverUrls : serverUrls, secretToken : secretToken, captureHeaders : captureHeaders, logLevel : logLevel ), payloadSender) { }