public ProfiledMongoClientSettings(DependencyProfiler dependencyProfiler, string dependencyName, IEnumerable <string> commandsToIgnore) { _dependencyName = dependencyName; _dependencyProfiler = dependencyProfiler ?? throw new ArgumentNullException($"{nameof(dependencyProfiler)} is required"); var ignoredCommands = (commandsToIgnore ?? Enumerable.Empty <string>()) .Select(v => v.ToLower()).ToImmutableHashSet(); OnCommandStartEvent = e => { try { if (e.Command != null && !ignoredCommands.Contains(e.CommandName.ToLower())) { var dependencyItem = _dependencyProfiler.Start(_dependencyName, e.CommandName, e.Command.ToString()); // ReSharper disable once SpecifyACultureInStringConversionExplicitly _queriesBuffer.TryAdd(e.RequestId, dependencyItem); } } catch { // ignored } }; OnCommandSucceededEvent = e => { if (ignoredCommands.Contains(e.CommandName.ToLower())) { return; } try { if (_queriesBuffer.TryRemove(e.RequestId, out var dependencyItem)) { dependencyItem.Succeed(); dependencyItem.Dispose(); } } catch { // ignored } }; OnCommandFailedEvent = e => { if (ignoredCommands.Contains(e.CommandName.ToLower())) { return; } try { if (_queriesBuffer.TryRemove(e.RequestId, out var dependencyItem)) { dependencyItem.Failed(); dependencyItem.Dispose(); } } catch { // ignored } }; }
public ProfiledMongoClientFactory(DependencyProfiler dependencyProfiler, ProfilingSettings profilingSettings) { _configurator = new ProfiledMongoClientSettings(dependencyProfiler, profilingSettings.DependencyName, profilingSettings.IgnoredCommands ?? Enumerable.Empty <string>()); }