public FilteredEndpointInfoSource( ServerEndpointInfoSource serverEndpointInfoSource, IOptions <DiagnosticPortOptions> portOptions, ILogger <ClientEndpointInfoSource> clientSourceLogger) { _portOptions = portOptions.Value; DiagnosticPortConnectionMode connectionMode = _portOptions.GetConnectionMode(); switch (connectionMode) { case DiagnosticPortConnectionMode.Connect: _source = new ClientEndpointInfoSource(clientSourceLogger); break; case DiagnosticPortConnectionMode.Listen: _source = serverEndpointInfoSource; break; default: throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Strings.ErrorMessage_UnhandledConnectionMode, connectionMode)); } // Filter out the current process based on the connection mode. if (RuntimeInfo.IsDiagnosticsEnabled) { int pid = Process.GetCurrentProcess().Id; // Regardless of connection mode, can use the runtime instance cookie to filter self out. try { var client = new DiagnosticsClient(pid); Guid runtimeInstanceCookie = client.GetProcessInfo().RuntimeInstanceCookie; if (Guid.Empty != runtimeInstanceCookie) { _runtimeInstanceCookieToFilterOut = runtimeInstanceCookie; } } catch (Exception) { } // If connecting to runtime instances, filter self out. In listening mode, it's likely // that multiple processes have the same PID in multi-container scenarios. if (DiagnosticPortConnectionMode.Connect == connectionMode) { _processIdToFilterOut = pid; } } }
public FilteredEndpointInfoSource(IOptions <DiagnosticPortConfiguration> configuration) { _configuration = configuration.Value; switch (_configuration.ConnectionMode) { case DiagnosticPortConnectionMode.Connect: _source = new ClientEndpointInfoSource(); break; case DiagnosticPortConnectionMode.Listen: _source = new ServerEndpointInfoSource(_configuration.EndpointName); break; default: throw new InvalidOperationException($"Unhandled connection mode: {_configuration.ConnectionMode}"); } // Filter out the current process based on the connection mode. if (RuntimeInfo.IsDiagnosticsEnabled) { int pid = Process.GetCurrentProcess().Id; // Regardless of connection mode, can use the runtime instance cookie to filter self out. try { var client = new DiagnosticsClient(pid); Guid runtimeInstanceCookie = client.GetProcessInfo().RuntimeInstanceCookie; if (Guid.Empty != runtimeInstanceCookie) { _runtimeInstanceCookieToFilterOut = runtimeInstanceCookie; } } catch (Exception) { } // If connecting to runtime instances, filter self out. In listening mode, it's likely // that multiple processes have the same PID in multi-container scenarios. if (DiagnosticPortConnectionMode.Connect == configuration.Value.ConnectionMode) { _processIdToFilterOut = pid; } } }
public DiagnosticServices(IEndpointInfoSource endpointInfoSource) { _endpointInfoSource = (IEndpointInfoSourceInternal)endpointInfoSource; }
public DiagnosticServices(IEndpointInfoSource endpointInfoSource, IOptionsMonitor <ProcessFilterOptions> defaultProcessMonitor) { _endpointInfoSource = (IEndpointInfoSourceInternal)endpointInfoSource; _defaultProcessOptions = defaultProcessMonitor; }